我需要实现一个模块,用于在PHP中将html导出到docx文档。我创建了一个模板并在里面设置了一些变量。我将这些变量替换为从数据库查询的数据。它正在工作,同时需要添加一些带有样式属性和TOC的html标签。我使用str_replace来转换一些简单的标签,如<br/>
,<p>
等,但如果添加样式属性(如对齐和颜色)则无效。
是否有现成的开源系统将html标签(包括其样式)转换为Word?
我可以在所有替换完成后创建TOC吗?
答案 0 :(得分:0)
我使用http://phpword.codeplex.com/来执行此操作。
我使用它的方式:上传包含%name%
标记的现有文档。
这些标记将被$name
变量替换,系统将输出新文档。
为了修复phpword无法替换变量的错误,我必须修改Template.php
文件。查找方法setValue
并将函数更改为:
$pattern = '|\$\{([^\}]+)\}|U';
preg_match_all($pattern, $this->_documentXML, $matches);
$openedTagPattern= '/<[^>]+>/';
$closedTagPattern= '/<\/[^>]+>/';
foreach ($matches[0] as $value) {
$modified= preg_replace($openedTagPattern, '', $value);
$modified= preg_replace($closedTagPattern, '', $modified);
$this->_header1XML = str_replace($value, $modified, $this->_header1XML);
$this->_header2XML = str_replace($value, $modified, $this->_header2XML);
$this->_header3XML = str_replace($value, $modified, $this->_header3XML);
$this->_documentXML = str_replace($value, $modified, $this->_documentXML);
$this->_footer1XML = str_replace($value, $modified, $this->_footer1XML);
$this->_footer2XML = str_replace($value, $modified, $this->_footer2XML);
$this->_footer3XML = str_replace($value, $modified, $this->_footer3XML);
}
if(substr($search, 0, 2) !== '${' && substr($search, -1) !== '}') {
$search = '${'.$search.'}';
}
if(!is_array($replace)) {
$replace = utf8_encode($replace);
}
$this->_header1XML = str_replace($search, $replace, $this->_header1XML);
$this->_header2XML = str_replace($search, $replace, $this->_header2XML);
$this->_header3XML = str_replace($search, $replace, $this->_header3XML);
$this->_documentXML = str_replace($search, $replace, $this->_documentXML);
$this->_footer1XML = str_replace($search, $replace, $this->_footer1XML);
$this->_footer2XML = str_replace($search, $replace, $this->_footer2XML);
$this->_footer3XML = str_replace($search, $replace, $this->_footer3XML);