【发布时间】:2018-09-03 22:04:15
【问题描述】:
我正在尝试制作一个网站,让人们提交表单。此表单的一部分是使用 ckeditor 从用户那里获取输入。因为来自 ckeditor 的数据是 html,所以您需要将 html 转换为 openxml 以使用 phpword 的 tamplatingprocessor 但每当我运行我的脚本时,我都会在输出文件上看到空白部分。
PHP 代码:
$toOpenXML = HTMLtoOpenXML::getInstance()->fromHTML($data[1]);
$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor('template.docx');
$templateProcessor->setValue('section1', $data[0]);
$templateProcessor->setValue('section2', $toOpenXML);
$templateProcessor->setValue('section3', $specialdata);
$templateProcessor->setValue('section4', $data[2]);
$templateProcessor->setValue('section5', $data[3]);
$file_name1 = $file_name.'.docx';
$file_name2 = $file_name.rand().'.docx';
if(file_exists($file_name1)== false){
$templateProcessor->saveAs($file_name1);
}elseif(file_exists($file_name2)== false){
$templateProcessor->saveAs($file_name2);
}else{
$info['er'] = "3";
}
HTMLtoOpenXML 的输出:
<w:p>
<w:pPr>
<w:pStyle w:val='OurStyle2'/>
</w:pPr>
<w:r>
<w:t xml:space='preserve'>foo</w:t>
</w:r>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val='OurStyle2'/>
</w:pPr>
<w:r>
<w:t xml:space='preserve'>bar</w:t>
</w:r>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val='OurStyle2'/>
</w:pPr>
<w:r>
<w:t xml:space='preserve'></w:t>
</w:r>
</w:p>
我的问题不是关于 HTMLtoOpenXML 我的问题是关于
输出文件上除 section2 外的所有部分都在工作。 section2的数据应该是空的。
【问题讨论】:
-
来自 PHPWord 文档:“只能替换单行值。”你确定你只是替换简单的字符串吗?
-
@Maria 谢谢你的推荐。我不知道我不能使用多行值的敲击引擎。
-
我建议您解压缩输出文件(使用 7zip 或类似的文件)并查看 document.xml。这包含结果文档的 XML。看看你的 HTMLtoOpenXML 输出是否真的不存在,或者它只是没有显示在 docx 文件中。我猜模板处理器正在尝试将段落 (
) 写入文本节点。 Word 可能无法处理。如果您希望在 word 文件中输出 HTMLtoOpenXML,请尝试转义它。
-
是的,你是对的。模板处理器仅替换段落内部,我将段落内部替换为另一个段落,这会产生错误。如果我只是删除第一段开头和最后一段关闭它应该工作。我要为这个问题定制 HtmltoOpenXML 编辑器。谢谢你的帮助@Maria
-
我将其作为答案发布,因此该线程不只是坐在这里似乎没有答案;)希望它有效! :)
标签: php openxml phpword phpoffice