2017-05-24 88 views
0

我正在創建一個項目,我需要創建.docx文檔。我正在使用PHPWord,加載模板然後保存文件。這個文檔有很多嵌套的表格,PHPWord在模板中取代了一些表格之後就打破了這些表格。PHP:使用.xml創建.docx文檔

因此,我決定將文檔保存爲Word XML文檔(.xml),然後替換自己。我將把文本加載到一個變量中,做替換,然後保存爲一個新的文檔。我的問題是,我不知道如何使用.xml創建.docx文檔。

你可以使用一些代碼片段嗎?

感謝所有幫助


我已經走到了一塊下面的代碼。它保存文件,但是當我試圖用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(); 
+0

你有什麼工作嘗試 –

+0

是的,我試着這個職位相同的東西︰https://stackoverflow.com/questions/3566677/problem-saving-edited-zip-archive-docx和它不適合我 –

+0

我敢肯定有更多的zip文件內容在一個.docx文件中,而不僅僅是一個XML文件。您可能需要將它們複製到新文件的zip結構中。 – amphetamachine

回答

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