带有word文档的File_get_contents和fwrite(图像未保存)

时间:2012-06-04 12:10:49

标签: php image file-get-contents

我正在用PHP编写一个脚本编写一个带有file_get_contents的xml文档,我用str_replace替换了一些caracters,然后用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);

在localhost中它正在工作,但在服务器上的问题是:

我的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文档包含图像,在localhost中它检索图像但不检索服务器。

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>

1 个答案:

答案 0 :(得分:1)

使用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对象
这仅适用于在Web应用程序运行的系统上实际安装Word的情况。

<?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; 
?> 

source

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

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

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