0

我使用 OpenTBS 合并 2 个文件 docx。

include_once('tbszip.php');

$zip = new clsTbsZip();

// Open the first document

$zip->Open('file-1.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('file-2.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_DOWNLOAD, 'merge1.docx');

file-1.docx 中的内容包括图像+文本,file-2:仅文本。但是当生成文件merge1.docx时,无法从file-1.docx生成图像请给我一个解决方案,谢谢。P/s:对不起我的英语。


当我颠倒打开文件的顺序时,文件merge1.docx 的全部内容。为什么?

// Open the first document

$zip->Open('file-2.docx');
$content1 = $zip->FileRead('word/document.xml');
$zip->Close();


..........
// Insert into the second document
$zip->Open('file-1.docx');
4

1 回答 1

1

由于图片、图表等内部元素,合并两个 DOCX 是相当困难的。

  • 在存档中,图片必须保存在word/media/目录中。
  • 它们必须在文件中声明/[Content_Types].xml
  • 它们还必须分配给文件中的唯一 ID /word/_rels/document.xml.rels
  • 然后必须在word/document.xml文件中图片对应的 XML 元素中使用唯一 Id。

因此,为了合并两个 DOCX 文件,您必须应用您的代码片段,然后从 DOCX 获取图片到另一个文件,然后执行上述操作。

您正在使用 OpenTBS 使用的 TbsZip,但它不是同一个工具。OpenTBS 不会帮助您将两个 DOCX 合并在一起。

于 2013-11-18T00:42:16.630 回答