将html标签转换为docx并使用php中的XML更新TOC

时间:2014-07-14 05:24:18

标签: php xml ms-word

我需要实现一个模块,用于在PHP中将html导出到docx文档。我创建了一个模板并在里面设置了一些变量。我将这些变量替换为从数据库查询的数据。它正在工作,同时需要添加一些带有样式属性和TOC的html标签。我使用str_replace来转换一些简单的标签,如<br/><p>等,但如果添加样式属性(如对齐和颜色)则无效。

  1. 是否有现成的开源系统将html标签(包括其样式)转换为Word?

  2. 我可以在所有替换完成后创建TOC吗?

1 个答案:

答案 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);