如何在PHP中合并docx文档?
有谁知道如何使用 PHP(或 Python,如果在 PHP 中不可能)合并(连接)docx 文档?
澄清一下,我的服务器是基于 Linux 的。我有 2 个现有的 docx 文档,我需要使用 PHP 或可能的 Python 将它们放入一个新的 docx 文档中。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
合并两个不同的 Docx 文件可能非常复杂,因为标题、样式、图表、注释、用户修改跟踪和其他特殊内容都保存在每个 Docx 中单独的内部 XML 子文件中。因此,两个 Docx 可能具有具有相同 id 的不同对象。因此,列出两个文档中所有可能的对象,为它们提供新的内部 ID,并在单个文档中重新影响它们将是一项非常艰巨的工作。目前可能只有Ms Office可以做到这一点。
然而,如果您知道要合并的两个文档具有相同的样式,并且您没有图表、标题和其他特殊对象,那么合并就会变得非常容易执行。
在这种情况下,您只需使用 Zip 阅读器,例如 TbsZip 即可打开第一个Docx 文件(技术上是包含 XML 子文件的 zip 存档);然后读取子文件“word/document.xml”并提取标签 < 之间的部分w:主体>
且< /w:正文>。
在第二个 Docx 文件中,打开“word/content.xml”并将之前的内容插入到标签 << 之前。 /w:正文>。将结果保存在新的 Docx 文件中。
这可以使用 TbsZip 来完成,如下所示:
Merging two different Docx files may be very complicated because Headers, Styles, Charts, Comments, User Modification Traces and other special contents are saved in separate inner XML sub-files in each Docx. Thus, two Docx may have different objects having the same ids. So it would be a very huge job to list all possible objects in the two documents, give them new inner ids, and re-affect them in a single one. Probably only Ms Office can do this currently.
Nevertheless, if you know that your two documents to be merged have the same styles, and if you know you have no charts, headers and other special objects, then the merging becomes something quite easy to perform.
In this case, you only have to use a Zip reader, such as TbsZip, to open the first Docx file (which is technically a zip archive containing XML sub-files) ; then read the sub-file "word/document.xml" and extract the part which is between the tags < w:body >
and < /w:body >.
In the second Docx file, open the "word/content.xml" and insert the previous content just before the tag < /w:body >. Save the result in a new Docx file.
This can be done using TbsZip, like this :
您可以使用 PHPDocX 合并两个 Word 文档,只需一行代码:(来源:将 Word 文档与 PHPDocX 合并)
此合并可让您保留所有部分结构(纸张大小、页边距、关联的页脚和页眉等),包括所有必需的样式,管理所有列表(这可能看起来微不足道,但在 OOXML 标准中并非如此),保留图像和图表以及脚注、尾注和注释。
此外,还有一个选项可以保留原始编号(默认情况下,页码继续)。
还可以通过 mergeType 选项放弃合并文档的节结构并将其添加到第一个文档的末尾作为其最后一节的一部分。当然,在这种情况下,页眉和页脚不会导入,但所有其他元素仍然保留。
You may merge two Word documents with PHPDocX with a single line of code: (Source: Merging Word documents with PHPDocX)
This merging let you preserve all section structure (paper size, margins, associated footers and headers,...), includes all the required styles, manages all lists (this may seem trivial but it is not so in the OOXML standard), preserves images and charts as well as footnotes, endnotes and comments.
Moreover there is an option to preserve the original numberings (by default the page numbering continues).
One also may, via the mergeType option, to discard the section structure of the merged document and add it at the end of the first document as part of its last section. In this case, of course, the headers and footers are not imported but all other elements are still preserved.
Aspose.Words Cloud SDK for PHP 可以将多个 Word 文档合并/加入到一个 Word 文档中,同时根据 ImportFormatMode 参数值保留附加文档或目标文档的格式。其次,它是一个商业 API,但免费定价计划允许每月 150 次免费 API 调用。
PS:我是 Aspose 的开发人员布道者。
Aspose.Words Cloud SDK for PHP can merge/join several Word Documents into a one Word document while keeping the formatting of appended or destination document depending upon the ImportFormatMode parameter value. Secondly, it is a commercial API but the free pricing plan allows 150 free monthly API Calls.
P.S: I'm developer evangelist at Aspose.