如何在PHP中合并docx文档?

2 php ms-word docx

有谁知道如何合并(连接)docx文档与PHP(或Python,如果在PHP中不可能)?

为了澄清,我的服务器是基于Linux的.我有2个现有的docx文档,我需要使用PHP或可能的Python将它们放在一个新的docx文档中.

Skr*_*l29 7

合并两个不同的Docx文件可能非常复杂,因为标题,样式,图表,注释,用户修改跟踪和其他特殊内容都保存在每个Docx的单独的内部XML子文件中.因此,两个Docx可能具有相同ID的不同对象.因此,在两个文档中列出所有可能的对象,给它们新的内部ID,并在一个文档中重新影响它们将是一项非常大的工作.可能只有Office女士目前可以这样做.

不过,如果您知道要合并的两个文档具有相同的样式,并且如果您知道没有图表,标题和其他特殊对象,那么合并将变得非常容易执行.

在这种情况下,您只需使用Zip阅读器(如TbsZip)打开第一个Docx文件(技术上是一个包含XML子文件的zip存档); 然后读取子文件"word/document.xml"并提取标签<w:body>和</ w:body>之间的部分.在第二个Docx文件中,打开"word/content.xml"并在标记</ w:body>之前插入之前的内容.将结果保存在新的Docx文件中.

这可以使用TbsZip完成,如下所示:

<?php

include_once('tbszip.php');

$zip = new clsTbsZip();

// Open the first document
$zip->Open('doc1.docx');
$content1 = $zip->FileRead('word/document.xml');
$zip->Close();

// Extract the content of the first document
$p = strpos($content1, '<w:body');
if ($p===false) exit("Tag <w:body> not found in document 1.");
$p = strpos($content1, '>', $p);
$content1 = substr($content1, $p+1);
$p = strpos($content1, '</w:body>');
if ($p===false) exit("Tag </w:body> not found in document 1.");
$content1 = substr($content1, 0, $p);

// Insert into the second document
$zip->Open('doc2.docx');
$content2 = $zip->FileRead('word/document.xml');
$p = strpos($content2, '</w:body>');
if ($p===false) exit("Tag </w:body> not found in document 2.");
$content2 = substr_replace($content2, $content1, $p, 0);
$zip->FileReplace('word/document.xml', $content2, TBSZIP_STRING);

// Save the merge into a third file
$zip->Flush(TBSZIP_FILE, 'merge.docx');
Run Code Online (Sandbox Code Playgroud)

  • 为了让分页符与最新版本的 Word 一起使用,我必须使用 `'&lt;w:p&gt;&lt;w:r&gt;&lt;w:br w:type="page" /&gt;&lt;w:lastRenderedPageBreak/&gt;&lt;/ w:r&gt;&lt;/w:p&gt;'` (2认同)