Skip to content

[Python]使用 Python 合并多个 PDF #2

Open
@yangruihan

Description

@yangruihan

使用 Python 合并多个 PDF

帮朋友将多个pdf合并成一个,在线工具要么收费,要么不好用,于是自己动手用 python 写一个合并的脚本

人生苦短,我用 python


开发环境

  • macOS 10.14.6
  • python 3.7.7

安装 pypdf2

pip3 install pypdf2

编写脚本

脚本内容如下,非常好理解了

#!/usr/bin/env python3
#-*- coding:utf-8 -*-

import os
from PyPDF2 import PdfFileReader, PdfFileWriter

# 合并 pdf
# file_list 待合并文件列表
# output_path 输出路径
def merge_pdf(file_list, output_path):
    # 新建一个pdf输出对象
    output = PdfFileWriter()
    output_pages = 0

    # 遍历待合并文件列表,将每个pdf page加到输出对象上
    for pdf_file in file_list:
        print(f"start merge {pdf_file} ...")
        
        # 读取待合并文件
        ipdf = PdfFileReader(open(pdf_file, 'rb'))
        
        # 读取待合并文件页数
        page_cnt = ipdf.getNumPages()
        output_pages += page_cnt
        
        print(f"- read pdf page {page_cnt}")

        # 遍历待合并文件页,添加到输出对象上
        for p in range(page_cnt):
            output.addPage(ipdf.getPage(p))

    # 输出pdf
    output_stream = open(output_path, 'wb')
    output.write(output_stream)
    output_stream.close()

    print(f"finish merge, sum page {output_pages}")

def main():
    files = []

    # 遍历当前目录,将当前目录下后缀为.pdf的文件添加到待合并文件列表
    for root, dirs, fs in os.walk(".", topdown=False):
        for file in fs:
            if file.endswith(".pdf"):
                files.append(os.path.join(root, file))

    if len(files) > 0:
        files = sorted(files)
        print(f"ready to merge {len(files)} files:")
        for f in files:
            print(f"-- {f}")

        merge_pdf(files, "output.pdf")

if __name__ == "__main__":
    main()

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions