You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python按16页片段合并两个拆分得到的PDF文件

解决方案

核心思路

将两个PDF的页序列按16页为单位拆分成分片,再按「奇数PDF分片→偶数PDF分片」的顺序交替拼接所有分片,即可得到符合顺序要求的完整PDF。

完整可运行代码

import itertools as itt
import sys
import PyPDF2 as PDF

def chunked(iterable, chunk_size):
    """将迭代对象按指定大小拆分为分片"""
    iterator = iter(iterable)
    while True:
        chunk = list(itt.islice(iterator, chunk_size))
        if not chunk:
            break
        yield chunk

def main():
    fbase = sys.argv[1]
    pdf_out = PDF.PdfFileWriter()
    # 分片大小固定为16页
    CHUNK_SIZE = 16

    with open(fbase + "_odd.pdf", 'rb') as f_odd, open(fbase + "_even.pdf", 'rb') as f_even:
        pdf_odd = PDF.PdfFileReader(f_odd)
        pdf_even = PDF.PdfFileReader(f_even)

        # 先将两个PDF的页按16页为单位拆分成分片
        odd_chunks = chunked(pdf_odd.pages, CHUNK_SIZE)
        even_chunks = chunked(pdf_even.pages, CHUNK_SIZE)

        # 交替拼接奇数分片、偶数分片
        for odd_chunk, even_chunk in itt.zip_longest(odd_chunks, even_chunks):
            if odd_chunk:
                for page in odd_chunk:
                    pdf_out.addPage(page)
            if even_chunk:
                for page in even_chunk:
                    pdf_out.addPage(page)

        with open(fbase + ".pdf", 'wb') as f_out:
            pdf_out.write(f_out)
    return 0

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Wrong number of arguments!")
        sys.exit(1)
    sys.exit(main())

改动说明

  • 新增了通用的分片工具函数chunked,可自定义分片大小,这里设为16适配你的业务需求
  • 替换了原有的逐页交叉逻辑,改为按分片交叉,同时保留了边界兼容逻辑,即使最后一个分片不足16页、或两个PDF的分片数量不一致也能正常运行
  • 合并了多层with语句,代码结构更简洁

内容的提问来源于stack exchange,提问作者slick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 01:54:02