如何使用PHP在Word文件中插入图片?

7

有人让我用php制作一个应用程序,可以生成一个包含图片和几个表格的.doc文件。我的第一次尝试是:

<?php
function data_uri($file, $mime) 
{  
  $contents = file_get_contents($file);
  $base64   = base64_encode($contents); 
  return ('data:' . $mime . ';base64,' . $base64);
}
$file = 'new.doc';
$fh = fopen($file,'w');
$uri = data_uri('pic.png','image/png');
fwrite($fh,'<table border="1"><tr><td><b>something</b></td><td>something else</td></tr><tr><td></td><td></td></tr></table>
<br/><img src="'.$uri.'" alt="some text" />
<br/>
<table border="1"><tr><td><b>ceva</b></td><td>altceva</td></tr><tr><td></td><td></td></tr></table>');
fclose($fh);
?>

这里使用了数据URI技术来嵌入一张图片。

这将生成一个HTML文件,在Web浏览器中呈现正常,但在Microsoft Office Word中缺少图片,至少在标准设置中是这样的。然后,在使用Word编辑文件时,我用文件中的一张图片替换了原来的图片,Microsoft Word将文件内容更改为Open XML,并添加了一个名为new_files的文件夹,其中放置了导入的图片(它是一个.png格式的文件),以及该图片的.gif版本和一个XML文件:

<xml xmlns:o="urn:schemas-microsoft-com:office:office">
  <o:MainFile HRef="../new.doc" /> 
  <o:File HRef="image001.jpg" /> 
  <o:File HRef="filelist.xml" /> 
</xml>

现在这还不够好,因为我希望所有内容都保存在一个 .doc 文件中。 有没有一种方法可以在 OpenXML 格式的 .doc 文件中嵌入图像?

6个回答

5
看这里:

http://www.tkachenko.com/blog/archives/000106.html

<w:pict>
    <v:shapetype id="_x0000_t75" ...>
    ... VML shape template definition ...
    </v:shapetype>
    <w:binData w:name="wordml://02000001.jpg">
    ... Base64 encoded image goes here ...
    </w:binData>
    <v:shape id="_x0000_i1025" type="#_x0000_t75" 
      style="width:212.4pt;height:159pt">
         <v:imagedata src="wordml://02000001.jpg" 
           o:title="Image title"/>
    </v:shape> 
</w:pict>

我不知道这段代码是什么,以及在哪里使用它,是在PHP还是HTML中?您能否再详细解释一下? - Bajrang
如果我没记错的话,你必须将这个放在你生成的doc(xml)文件内。或者你可以将你的doc文件保存为xml,然后检查它的内部结构,这似乎是我使用过的方法。 - llamerr

4

有一个PHPWord项目,可以在PHP内部操作MS Word。

PHPWord是一个用PHP编写的库,可创建Word文档。无需Windows操作系统即可使用,因为结果是docx文件(Office Open XML),可以在所有主要办公软件中打开。


3
PHPWord 可以编写它们,详情请访问http://phpword.codeplex.com/(注意:它仍处于测试版。我经常使用同一作者的 PHpExcel……从未尝试过 Word 版本)。

谢谢,你的帖子对我很有帮助。我选择了PHPWord,你有没有找到更好的解决方案? - mysterious
@mysterious:没有,自从我写下那个答案以来,我就没有需要新的解决方案了。 - Steve

2

推荐使用phpdocx库生成真正的.docx文件,而不是将html文件保存为.doc扩展名的文件。

提示:对于Open XML Word 2007文件,扩展名应严格为.docx。


1
抱歉,我不能使用docx格式,因为我的目标受众不使用Office-2007。 - Valentin Brasso
1
我知道的另一种方法是使用PHP的COM扩展。 - Mark Baker

2

OpenTBS 可以使用模板技术在 PHP 中创建 DOCX(和其他 OpenXML 文件)动态文档。

无需临时文件,无需命令行,全部在 PHP 中完成。

它可以添加或删除图片。创建的文档可以作为 HTML 下载、保存在服务器上的文件,或作为 PHP 中的二进制内容生成。

它还可以合并 OpenDocument 文件(ODT、ODS、ODF 等)。

http://www.tinybutstrong.com/opentbs.php


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接