File_get_contents并使用Word文档进行重写(不保存图像)


File_get_contents and fwrite with word document (images are not saved)

>我正在用PHP编写一个脚本,该脚本采用带有file_get_contents的xml文档,我用str_replace替换了一些caracter,然后我用fwrite将该文件写入Word文档中。

示例 :

$myContent = file_get_contents("../ressources/fichiers/modeles_conventions/modele_convention.xml");
$lettre = str_replace("@NOMENT@",utf8_encode($data['nomentreprise']),$lettre);
$newFileHandler = fopen("../ressources/fichiers/conventions/lettre_convention_1.doc","a");
fwrite($newFileHandler,$lettre);
fclose($newFileHandler);

在本地主机中,它正在运行,但在服务器上的问题是:

我的 xml 文件包含图像,但我的最终.doc文档不会检索这些图像。

我不明白为什么我的图像没有被检索到。


好吧,我没有找到解决我的问题的方法。

我得到了我的xml文件(这是一个扩展名为.xml的.doc文件)

    $myContent = file_get_contents("../ressources/fichiers/modeles_conventions/modele_convention.xml");

我更换了一些东西

    $myContent = str_replace("@NOM_ENTREPRISE@",stripslashes($data['nomentreprise']),$myContent);
    $myContent = str_replace("@STATUT_ENTREPRISE@",stripslashes($data['juridique']),$myContent);

我保存了我的文档

    //On génère la convention
    $newFileHandler = fopen("../ressources/fichiers/conventions/convention_".$data2['nomeleve']."_".$data2['prenomeleve']."_".$data3['idstage'].".doc","ab");
    fwrite($newFileHandler,$myContent);
    fclose($newFileHandler);

xml文档包含图像,在本地主机中它检索图像,但不在服务器上检索图像。

XML代码示例:

<w:r>
 <w:rPr>
  <w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/>
   <wx:font wx:val="Arial"/>
    </w:rPr>
     <w:pict>
      <v:shape id="_x0000_i1028" type="#_x0000_t75" style="width:48.75pt;height:24pt">
       <v:imagedata src="wordml://06000003.emz" o:title=""/>
      </v:shape>
     </w:pict>
</w:r>
</w:p>

使用 HTML 创建 Word 文件是一种让 Word 认为它是 Word 文档的方法。将其命名.doc会创建一个默认情况下在 Word 中打开的文件。但是,它不是实际的Word文档,您是在伪造它。它之所以有效,是因为 Word 还支持打开 HTML。其他客户端可能不支持 HTML 或并非完全支持所有 HTML。例如,图像标签不适用于Mac上的TextMate,尽管粗体标签工作正常。

在XML中,您必须使用绝对路径(即Internet上的路径或本地文件系统路径)引用图像。例如,<img src="image.png">将不起作用,因为Word文件不知道如何找到它。但是,您可以使用<img src="http://yoursite.com/image.png"> 。我相信你也可以参考你的本地文件系统,例如file:"协议"。仅当文件存在于打开文件的文件系统上时,这才有效。

如果这不能解决您的问题,您可能应该在此处发布您的 XML 文件。


但是,如果您正在为客户端或外部系统(除了您自己之外的任何系统)创建它,我建议您使用以下内容:

COM 对象
仅当 Word 实际安装在运行 Web 应用程序的系统上时,此操作才有效。

<?php 
$word = new COM("word.application") or die ("Can't create Word file"); 
$word->visible = 1; 
$word->Documents->Add(); 
$word->Selection->TypeText("this is some sample text in the document"); 
$word->Documents[1]->SaveAs("sampleword.doc"); 
$word->Quit(); 
$word->Release(); 
$word = null; 
?> 

(来源)

Office Open XML 或其他格式
Word 使用的新 XML 格式是开源的,可以更轻松地进行修改。我不知道确切的细节,但它基本上是一些压缩成zip文件的XML文件,并给出了扩展名.docx。

如果可能的话,你也可以使用OpenOffice的ODT格式。最新的Word版本也可以读取此文件,格式是开源的。创建PDF文件也比使用PHP创建Word文件更可行。

phpLiveDocs
phpLiveDocs是PHP的扩展,可用于创建Word文件。