【问题标题】:Why am i getting empty page on PHPword while using HTMLtoOpenXML?为什么我在使用 HTMLtoOpenXML 时在 PHPword 上得到空白页面?
【发布时间】: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


【解决方案1】:

TemplateProcessor 只能替换单行字符串。为此,它替换了 Word 段落的内容。

您想用 HTMLtoOpenXML 结果中的另一个段落 (&lt;w:p&gt;) 替换它。转义此结果或删除段落标记,它应该可以工作。

【讨论】:

    猜你喜欢
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 2021-11-27
    • 2020-04-30
    • 2020-09-05
    • 2021-01-08
    相关资源
    最近更新 更多