0

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

我在这里这里这里的几个地方发现了类似的问题,但我的问题似乎有所不同,我只想为字符串的一部分着色,而不是整个段落或整个 OpenTBS 字段,如在这些例子中。

我首先尝试将单个字符串块包装在 docx XML 标记中,但发现 php 然后转换为实体(&gt;等),这显然没有用。目前,我已经开始通过模板脚本将部分文本包装在 XML 标记中,这给了我一个格式错误的 XML 输出,我想是因为我在</w:r>from 一个子字符串和<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); 
}

并且输出...

<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...]

Word 在我的第二个块和第二个<w:r>标签所在的位置标记错误。不幸的是,这个错误非常难以描述。


4

2 回答 2

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);
} 
于 2013-12-17T09:51:51.340 回答
1

我唯一的建议是查看格式良好的 Word 文档并以此为基础编写代码。我制作了一个基本文档并键入了一行,然后更改了一个单词的颜色。然后我将文件扩展名更改为zipfromdocx并查看 .xml 中的 XML word/document.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吗?

于 2013-12-16T19:24:43.817 回答