在OpenTBS中更改部分字符串的文本颜色

时间:2013-12-16 15:33:01

标签: php docx opentbs tinybutstrong

我正在构建一个大型word文档,并且只需要更改字符串“part”的文本颜色。

我在一些地方hereherehere发现了类似的问题,但我的问题似乎有所不同,那就是我只希望为字符串的一部分着色,与整个段落或整个OpenTBS字段相对,如这些示例中所示。

我首先尝试在docx XML标签中包装单个字符串块,但发现php转换为实体(&gt;等),这显然没用。目前,我已经开始通过模板脚本将文本的一部分包装在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...] 标记的位置标记错误。不幸的是,这个错误非常简洁。


2 个答案:

答案 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吗?