以不同的格式将 Docx 与 PHP 合并

Merge Docx with PHP with different formatting

使用 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 'hardcoded' 的 word 文档,这将解决问题。

不太理想

回答您的问题:是的,可以 'hardcode' 格式化样式,但这需要大量工作并且容易失败。

如果使用了 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>

这仅适用于简单样式。例如带编号的款式就比较复杂

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

更好

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