我正在构建一个大型word文档,并且只需要更改字符串“part”的文本颜色。
我在一些地方here,here和here发现了类似的问题,但我的问题似乎有所不同,那就是我只希望为字符串的一部分着色,与整个段落或整个OpenTBS字段相对,如这些示例中所示。
我首先尝试在docx XML标签中包装单个字符串块,但发现php转换为实体(>
等),这显然没用。目前,我已经开始通过模板脚本将文本的一部分包装在XML标签中,这给了我一个格式错误的XML输出,我认为因为我在一个子字符串的</w:r>
和{之间有内容{1}}下一个子字符串。
有关如何正确执行此操作的任何建议吗?下面是当前的代码和输出。
<w:r>
输出......
//Function called onmerge. I wrap the portion of string I want to change the text
//colour of with [UNTRANSLATED] and [ENDUNTRANSLATED] manually earlier, and attempt
//to swap them for tags at this point.
function lb($FieldName, &$CurrVal) {
$CurrVal= str_replace('[UNTRANSLATED]', '<w:r><w:rPr><w:color w:val="FF0000"/></w:rPr><w:t>', $CurrVal);
$CurrVal= str_replace('[ENDUNTRANSLATED]', '</w:t></w:r>', $CurrVal);
}
Word在我的第二个块和第二个<w:t>
<w:r>
<w:rPr>
<w:color w:val="FF0000" />
</w:rPr>
<w:t>Slaked Lime</w:t>
</w:r>,
<w:r>
<w:rPr>
<w:color w:val="FF0000" />
</w:rPr>
<w:t>Air slaked Lime</w:t>
</w:r>,
[code continues in same style...]
标记的位置标记错误。不幸的是,这个错误非常简洁。
答案 0 :(得分:2)
上述代码的问题在于,在插入自己的代码之前,OpenTBS会将字符串输入到一对<w:r><w:t>
标记中,这些标记需要关闭。 (正如Sarah Kemp在评论中所说,<w:t>
似乎不是可嵌套的。
以下是更新的工作版本。还需要添加xml:space="preserve"
以保留间距。
//Function called onmerge. I wrap the portion of string I want to change the text
//colour of with [UNTRANSLATED] and [ENDUNTRANSLATED] manually earlier, and attempt
//to swap them for tags at this point.
function lb($FieldName, &$CurrVal) {
$CurrVal= str_replace('[UNTRANSLATED]', '</w:t></w:r><w:r><w:rPr><w:color w:val="FF0000"/></w:rPr><w:t xml:space="preserve">', $CurrVal);
$CurrVal= str_replace('[ENDUNTRANSLATED]', '</w:t></w:r><w:r><w:t xml:space="preserve">', $CurrVal);
}
答案 1 :(得分:1)
我唯一的建议是查看格式良好的Word文档,并将代码基于此。我制作了一个基本文档,然后键入了一行,然后更改了一个单词的颜色。然后我将文件扩展名从zip
更改为docx
,并查看word/document.xml
中的XML。以下是直接来自Word(应用格式化)的内容:
<w:p w:rsidR="00BA3836" w:rsidRDefault="00420636">
<w:r>
<w:t xml:space="preserve">This is some text where </w:t>
</w:r>
<w:r w:rsidRPr="00420636">
<w:rPr>
<w:color w:val="FF0000"/>
</w:rPr>
<w:t>parts</w:t>
</w:r>
<w:r>
<w:t xml:space="preserve"> are red.</w:t>
</w:r>
</w:p>
在文档中,“部分”一词是红色的。
如果您从.docx文件中提取XML,就像我已经完成并发布相关区域(TBS标签完整 - 合并之前),我可以提供更多帮助。
听起来你很接近解决这个问题。你玩过参数strconv=no
吗?