有谁知道如何合并(连接)docx文档与PHP(或Python,如果在PHP中不可能)?
为了澄清,我的服务器是基于Linux的.我有2个现有的docx文档,我需要使用PHP或可能的Python将它们放在一个新的docx文档中.
合并两个不同的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)
| 归档时间: |
|
| 查看次数: |
11603 次 |
| 最近记录: |