我想问一下,是否可以使用模板并在该模板中复制特定页面而不使用 WordFragment 或 addExternalFile(我希望模板仅为 1 个文件)?
例如,我有 3 页,我想复制(或重复)第 2 页 4 次,所以结果是我有一个 7 页的文档,第二页重复 4 次?是否可以在没有 WordFragment 或 addExternalFile 的情况下做到这一点?因为我想让模板中的编辑更容易。
我的 Phpdocx 是试用版。
到目前为止,我尝试的是使用 wordfragment,通过在文档模板中使用 $wordfragment$ 变量(在第二页中),并在 php 中执行此操作:
$wf = new WordFragment($docx, 'document');
for($i = 0: $<4; $i++) {
/*here I put a code to make a text and table in wordfragment (sorry it's too long to write it here, it's about 500 lines)*/
$wf->addBreak(array('type'=>'page')); //it's to go to next page
} //so this loop will make 4 same pages with the content I want in that 500 lines of code.
$docx->replaceVariableByWordFragment(array('wordfragment'=>$wf), array('type'=>'block'));
使用上面这样的WordFragment其实很强大,效果也很好,但是既然会被我的用户使用,而且我们总是假设用户不擅长代码,所以我不能让用户编辑如果他/她只想编辑模板的代码,例如,如果用户想编辑模板中的表格,在我的这段代码中,该用户需要在 500 行代码中编辑它,这不是用户友好,我想要的是让它更简单,用word制作文本和表格(这样用户就可以在那里编辑它),并且在代码中我只需要重复那个页面。可能吗?
哦还有另外一种方法,addExternalFile其实挺好的,但是用这个方法,我需要1个以上的模板,比如我需要3个文档,分别命名为start.docx、content.docx、end.docx。使用 addExternalFile,我可以像这样使用它:
$wf = new WordFragment($docx, 'document');
$wf->addExternalFile(array('src'=>'start.docx'));
$wf->addBreak(array('type'=>'page'));
for($i=0;$i<4;$i++) {
$content = new CreateDocxFromTemplate('content.docx');
/*here I put a code to replace all text and table variable in template*/
$content->replaceVariableByText($variables, $parameter); //$variables and $parameter already included in my code
$content->replaceTableVariable($table); //$table already included in my code
$content->createDocx('newcontent.docx');
$wf->addExternalFile(array('src'=>'newcontent.docx'));
$wf->addBreak(array('type'=>'page'));
} //this loop will make 4 same page
$wf->addExternalFile(array('src'=>'end.docx');
$docx->replaceVariableByWordFragment(array('wordfragment'=>$wf), array('type'=>'block'));
使用 addExternalFile,我可以在文档中而不是在 wordfragment 中编写文本、变量和绘制表格。它对用户非常友好,但缺点是这种方法需要用户打开至少 3 个不同的文档才能对其进行编辑。我想要的只是 1 个文档,所有文本、变量和表格都在文档中,并且 php 代码中没有文本或表格。有什么方法可以用 phpDocx 做到这一点吗?