以不同的格式将 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 模板编写的,那就更好了,这样就不会(或应该)在样式或页边距上没有冲突。
使用 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 模板编写的,那就更好了,这样就不会(或应该)在样式或页边距上没有冲突。