如何仅为待合并的内容文档ID-2.docx添加页眉页脚后与封面文档ID-1.docx合并?
如何仅为待合并的内容文档ID-2.docx添加页眉页脚后与封面文档ID-1.docx合并?
没问题,你选python-docx来处理确实是个靠谱的选择,它对Word文档的细节控制比PhpWord要灵活不少。咱们只需要修改你的merge_docs.py脚本,在合并前给ID-2.docx加上独立的页眉页脚,同时确保封面文档ID-1的样式不受影响就行,具体步骤如下:
1. 编写页眉页脚添加函数
先在脚本里加一个专门给文档添加页眉页脚的函数,我们可以设置页眉的自定义文本,页脚加上页码,同时取消内容节和前一节(也就是封面)的链接,避免封面被带上页眉页脚:
def add_custom_header_footer(doc): # 遍历文档的所有节(如果ID-2有多节的话也能覆盖) for section in doc.sections: # 取消与前一节的页眉页脚关联,确保内容的页眉页脚独立 section.header.is_linked_to_previous = False section.footer.is_linked_to_previous = False # 添加页眉内容,这里可以改成你需要的文本 header = section.header # 如果页眉已有段落就用第一个,没有就新建 header_para = header.paragraphs[0] if header.paragraphs else header.add_paragraph() header_para.text = "文档内容页眉" header_para.alignment = 1 # 设置页眉居中(0左对齐,2右对齐) # 添加页脚和页码 footer = section.footer footer_para = footer.paragraphs[0] if footer.paragraphs else footer.add_paragraph() # 插入页码域,Word会自动识别并生成正确页码 page_run = footer_para.add_run() page_run.add_field("PAGE") # 可选:加上总页数 # page_run.add_text(" / ") # page_run.add_field("NUMPAGES") footer_para.alignment = 1 # 页脚居中
2. 修改合并脚本逻辑
在原脚本中,加载ID-2.docx之后,先调用上面的函数给它加上页眉页脚,再执行合并操作:
修改后的完整merge_docs.py代码:
import warnings warnings.filterwarnings("ignore", category=UserWarning, module="docxcompose") import sys from docx import Document from docxcompose.composer import Composer import os def add_custom_header_footer(doc): # 遍历文档的所有节(如果ID-2有多节的话也能覆盖) for section in doc.sections: # 取消与前一节的页眉页脚关联,确保内容的页眉页脚独立 section.header.is_linked_to_previous = False section.footer.is_linked_to_previous = False # 添加页眉内容,这里可以改成你需要的文本 header = section.header # 如果页眉已有段落就用第一个,没有就新建 header_para = header.paragraphs[0] if header.paragraphs else header.add_paragraph() header_para.text = "文档内容页眉" header_para.alignment = 1 # 设置页眉居中(0左对齐,2右对齐) # 添加页脚和页码 footer = section.footer footer_para = footer.paragraphs[0] if footer.paragraphs else footer.add_paragraph() # 插入页码域,Word会自动识别并生成正确页码 page_run = footer_para.add_run() page_run.add_field("PAGE") # 可选:加上总页数 # page_run.add_text(" / ") # page_run.add_field("NUMPAGES") footer_para.alignment = 1 # 页脚居中 doc1_path = sys.argv[1] doc2_path = sys.argv[2] output_path = sys.argv[3] doc1 = Document(doc1_path) doc2 = Document(doc2_path) # 先给ID-2.docx添加页眉页脚 add_custom_header_footer(doc2) composer = Composer(doc1) composer.append(doc2) composer.save(output_path)
3. 验证效果
你的PHP调用部分完全不需要修改,直接运行原来的代码就行。这样合并后的文档里:
- ID-1(封面)不会有页眉页脚
- ID-2(内容)的每一页都会带上你设置的页眉和页码页脚
如果需要调整页眉页脚的样式(比如字体、大小),可以在函数里给header_para或者footer_para添加样式设置,比如:
header_para.style = doc.styles["Header"] # 使用Word内置的页眉样式 # 或者自定义字体 run = header_para.add_run("文档内容页眉") run.font.name = "微软雅黑" run.font.size = docx.shared.Pt(10)
内容来源于stack exchange




