【问题标题】:Merge Docx with PHP with different formatting使用不同格式将 Docx 与 PHP 合并
【发布时间】:2016-07-31 00:14:23
【问题描述】:

使用 DocxMerge 我可以将多个 Docx 文档合并到一个 Word 文档中。我已对此进行了修改,通过用以下代码替换结束 w:body 标记在文档之间添加分页符:

<w:p><w:r><w:br w:type="page" /></w:r></w:p>

但是,文档格式不正确。例如,一个文档居中对齐,而另一个文档向左对齐 - 它们继续对齐首先放置的文档。

还有一个不同边距的问题..

问题似乎在于styles.xml,但是我缺乏Word XML 的知识来合并两个styles.xml。有可能在主文档中保存带有styles.xml“硬编码”的word文档,这将解决问题。

【问题讨论】:

    标签: php xml merge ms-word docx


    【解决方案1】:

    不太理想

    回答您的问题:是的,可以对格式样式进行“硬编码”,但这需要大量工作并且容易失败。

    如果使用的是 Word 模板,则 document.xml 中的(字符)样式如下所示:

    <w:r>
        <w:rPr>
            <w:rStyle w:val="myStyle"/>
        </w:rPr>
        <w:t>My content</w:t>
    </w:r>
    

    styles.xml 中的格式如下:

    <w:style w:type="character" w:styleId="myStyle">
        <w:name w:val="myStyle"/>
        <w:rsid w:val="003504C8"/>
        <w:rPr>
            <w:color w:val="0000FF"/>
            <w:u w:val="single"/>
        </w:rPr>
    </w:style>
    

    要将其添加为手动格式,请删除 w:rStyle 元素并将其替换为 w:rPr 元素内容:

    <w:r>
        <w:rPr>
            <w:color w:val="0000FF"/>
            <w:u w:val="single"/>
        </w:rPr>
        <w:t>My content</w:t>
    </w:r>
    

    这只适用于简单的样式。例如带有编号的样式就更复杂了。

    页边距:页边距在w:sectPr -> w:pgMar 元素内的document.xml 文件(不是styles.xml)中设置。使用的单位是twips

    更好

    如果您的源文档是使用相同的 Word 模板编写的,那就更好了,这样就不会(或应该)在样式或页边距方面没有冲突。

    【讨论】:

    • 感谢您的洞察马丁。是的,我的主要问题是合并两个使用不同单词模板的文档。我需要一种将不同模板样式与每个新文档合并的方法。
    • 我最好的解决方法是“欺骗”单词来修改文档而不是它所在的模板,如果这有任何意义的话。但我真的可以用一种方法来自动化它。
    猜你喜欢
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    相关资源
    最近更新 更多