我有一个包含此内容的Word模板
${line1}
SQL中的${line 1}模板内容值为
${block_name}
${var1}
${block_name}
使用PhpWord模板处理器,我可以替换这个。在TemplateProcessor.php中,我添加了
$replace = preg_replace('~\R~u', '</w:t><w:br/><w:t>', $replace);
在函数setValue中。这是因为,块应该是多行的,并且没有空间才能发生克隆块。
然后,我保存为template2.docx并再次加载到新的TemplateProcessor()中。当我打开word文件时,它已经显示多行。但是,仍然无法实现cloneblock。
include "db.php";
require_once 'vendor/autoload.php';
use PhpOffice\PhpWord\TemplateProcessor;
use PhpOffice\PhpWord\IOFactory;
use PhpOffice\PhpWord\PhpWord;
//1
$templateProcessor = new TemplateProcessor('template.docx');
//template content value
$templateContentValue=$stmt->fetchAll(PDO::FETCH_ASSOC);
$content =$templateContentValue[0]['contentVal'];
$templateProcessor->setValue('line', $content);
//save as template2.docx
$pathToSave ='template2.docx';
$templateProcessor->saveAs($pathToSave);
//2
$templateProcessor2 = new TemplateProcessor($pathToSave);
$replacements = array(
array('var1' => 'value1'),
array('var1' => 'value2'),
);
$templateProcessor2->cloneBlock('block_name', 0, true, false, $replacements);
$templateProcessor2->saveAs('output.docx');
预期输出:
value1
value2
1条答案
按热度按时间v2g6jxz61#
我想您可能在最后一行的块语法中输入了错误
通过参考cloneBlock文档,您发现模板内容**${line1}**中缺少斜线(/),内容值应为
在第一个包含内容的单词模板中
我看到你的代码
不是吗?
所以我想这可能只是你写文章时的一个打字错误,这不是这里的主要问题。
在使用多行值的这篇文章的建议进行测试后,我能想到的另一种可能性是,这可能是由于PHPWord在**${line1}的替换内容中无法识别*换行符**的语法。
我尝试以下第一个字模板:
然后一次替换多个值
输出如预期,但我不认为这是你喜欢的。
希望能有所帮助!