ODTPHP和细分市场
我正在使用个人数据自定义ODTPHP和细分市场,php,templates,libreoffice,odt,Php,Templates,Libreoffice,Odt,我正在使用个人数据自定义.odt模板 当前,我在复制过程中遇到了问题,我想复制表中的一行 当我使用默认段名称时,代码运行良好:articles $app = $odf->setSegment('articles'); foreach ($listing_app as $element) { $app->descrApp($element['descr']); $app->refApp($element['ref']); $app->merge()
.odt
模板
当前,我在复制过程中遇到了问题,我想复制表中的一行
当我使用默认段名称时,代码运行良好:articles
$app = $odf->setSegment('articles');
foreach ($listing_app as $element)
{
$app->descrApp($element['descr']);
$app->refApp($element['ref']);
$app->merge();
}
$odf->mergeSegment($app);
但是当我想用另一个名称替换/编辑/创建一个新段时(此处test
),它不起作用
致命错误:未捕获的异常“OdfException”,消息“test”段未在文档中找到“
代码完全相同
$app = $odf->setSegment('test');
foreach ($listing_app as $element)
{
$app->descrApp($element['descr']);
$app->refApp($element['ref']);
$app->merge();
}
$odf->mergeSegment($app);
我的.odt
中确实有这些行:
[!-- BEGIN row.test --] {descrApp} {refApp} [!-- END row.test --]
我试图通过编辑段名来复制/粘贴在线教程。我还试图重写所有内容。似乎没有任何效果
我还尝试将template.odt导出为xml
,但似乎没有任何问题
<informaltable frame="all">
<tgroup cols="3"><tbody><row><entry><para/></entry><entry><para/></entry><entry><para/></entry></row><row><entry><para>[!-- BEGIN row.articles --]{descrApp}</para></entry><entry><para>{refApp}</para></entry><entry><para/><para/><para>[!-- END row.articles --]</para></entry></row></tbody></tgroup>
</informaltable>
[!--开始row.articles-->{descrApp}{refApp}[!--结束row.articles-->
编辑
我发现错误来自这个函数
public function setSegment($segment)
{
if (array_key_exists($segment, $this->segments)) {
return $this->segments[$segment];
}
// $reg = "#\[!--\sBEGIN\s$segment\s--\]<\/text:p>(.*?)<text:p\s.*>\[!--\sEND\s$segment\s--\]#sm";
$reg = "#\[!--\sBEGIN\s$segment\s--\](.*?)\[!--\sEND\s$segment\s--\]#smU";
if (preg_match($reg, html_entity_decode($this->contentXml), $m) == 0) {
throw new OdfException("'$segment' segment not found in the document");
}
$this->segments[$segment] = new Segment($segment, $m[1], $this);
return $this->segments[$segment];
}
公共功能设置段($section)
{
如果(数组\键\存在($segment,$this->segments)){
返回$this->segments[$segment];
}
//$reg=“\[!-->\sBEGIN\s$segment\s-->”(.*?\[!-->\sEND\s$segment\s-->]sm”;
$reg=“\[!-->\sBEGIN\s$segment\s-->”(.*?\[!-->\sEND\s$segment\s-->)]\smU”;
if(preg_match($reg,html_entity_decode($this->contentXml),$m)==0){
抛出新的ODFEException(“$segment”段未在文档中找到”);
}
$this->segments[$segment]=新段($segment,$m[1],$this);
返回$this->segments[$segment];
}
我对regex了解不够,但您认为这可能不是最新的吗?问题主要不是由odtPhp引起的! 该问题是由修改模板odt文件的方式引起的。在(较新的)open/libreoffice中编辑模板文档中的行标签后,它会向其中添加一些不需要的格式化程序: 原始代码:
[!-- BEGIN row.articles --]
新代码:
[!-- BEGIN row.<text:span text:style-name="T4">articles</text:span> --]
然而,这似乎会导致误报和库中的错误。问题主要不是由odtPhp引起的! 该问题是由修改模板odt文件的方式引起的。在(较新的)open/libreoffice中编辑模板文档中的行标签后,它会向其中添加一些不需要的格式化程序: 原始代码:
[!-- BEGIN row.articles --]
新代码:
[!-- BEGIN row.<text:span text:style-name="T4">articles</text:span> --]
<>这似乎会导致错误的肯定和后来的错误在图书馆。我发现我可以通过仔细地删除引起问题的整个元素并重新键入整个事情来解决问题。(而不是在中间删除一个位并替换它。)我发现我可以通过仔细地删除引起问题的整个元素并重新键入整件事情来解决问题。(而不是在中间删除一个位并替换它)我会检查一下,当我有空闲的时候,我会在有空的时候检查一下。