You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何仅为待合并的内容文档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

火山引擎 最新活动