0

我正在用 PHP 编写一个脚本,该脚本使用 file_get_contents 获取一个 xml 文档,我用 str_replace 替换了一些字符,然后我用 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>
4

1 回答 1

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 对象
这仅在 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 格式是开源的,可以更轻松地进行修改。我不知道确切的细节,但它基本上是一些 XML 文件压缩成一个 zip 文件并给出扩展名 .docx。

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

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

于 2012-06-04T12:52:09.180 回答