合并2文件docx使用tbszip

时间:2013-11-17 09:16:19

标签: php xml ms-word opentbs

我使用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');

文件-1docx中的内容包括图像+文本,文件-2:仅文本。 但是当gen文件merge1.docx时,不能生成来自file-1.docx的gen图像 请帮我一个解决方案,谢谢。 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');

1 个答案:

答案 0 :(得分:1)

由于内部元素(如图片,图表等)合并两个DOCX非常困难。

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

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

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