PHP:使用.xml创建.docx文档

时间:2017-05-24 14:40:31

标签: php xml zip phpword

我正在开展一个需要创建.docx文档的项目。我正在使用PHPWord,加载模板然后保存文件。这个文档有很多嵌套表,PHPWord在模板中替换一些表后会破坏表。

所以我决定将文档保存为Word XML文档(.xml)并自行替换。我将文本加载到变量中,执行替换,然后另存为新的word文档。我的问题是,我不知道如何使用.docx创建.xml文档。

您是否有一些我可以使用的代码片段?

感谢您的帮助

我已经看到下面的代码了。它会保存文件,但是当我尝试使用word打开时,它会给我无效的文档

    $xmlString = simplexml_load_file($this->config->application->fileTemplateFolder.'coi.xml')->asXML();
    $xmlString = str_replace('${coi_number}', $coi['application_number'], $xmlString);

    $path = $this->config->application->fileTemplateFolder.'test.docx';
    $zip = new ZipArchive();
    $zip->open($path, ZipArchive::CREATE);
    $zip->addFromString("word/document.xml", $xmlString);
    $zip->close();

1 个答案:

答案 0 :(得分:0)

以下是我解决问题的方法:

private function CreateWordDocument($xmlString) {
    $templateFolder = $this->config->fileTemplateFolder;
    if(!endsWith($templateFolder, '/'))
        $templateFolder = $templateFolder.'/';


    $temp_file = tempnam(sys_get_temp_dir(), 'coi_').'.docx';

    copy($templateFolder. 'coi.docx', $temp_file);

    $zip = new ZipArchive();
    if($zip->open($temp_file)===TRUE) {

        $zip->deleteName('word/document.xml');
        $zip->addFromString("word/document.xml", $xmlString);
        $zip->close();

        return $temp_file;
    }
    else {
        return null;
    }
}