Python实现为页数较少的PDF添加空白页使两份PDF页数一致
Python实现两份PDF页数对齐方案
核心逻辑
你现有代码里用pdf2image.convert_from_path把PDF转成PIL图像列表的逻辑是可用的,原有代码中np.hstack、np.vstack部分是用于拼接长图的,和补页需求无关,可以直接移除。
实现对齐只需要走3步:
- 分别读取两份PDF得到页面对象列表,统计两个列表的长度(即对应PDF的总页数)
- 取两个页数的最大值作为对齐基准,计算每份PDF需要补充的空白页数量
- 按照对应PDF原有页面的尺寸生成纯白空白页,追加到页数更少的PDF页列表末尾,最终两份PDF页数一致
依赖说明
不需要额外安装新的第三方库,你现有环境已经安装的pdf2image、Pillow即可满足需求,注意提前配置好pdf2image依赖的poppler运行环境即可。
完整实现代码
from pdf2image import convert_from_path from PIL import Image # 替换为你本地的两份PDF路径 pdf_path_a = r"/home/hp/PycharmProjects/DHT/pdf_comparison/pdf/project plan1-1.pdf" pdf_path_b = r"/home/hp/PycharmProjects/DHT/pdf_comparison/pdf/project plan1-2.pdf" # 读取PDF为PIL Image格式的页面列表 pages_a = convert_from_path(pdf_path_a) pages_b = convert_from_path(pdf_path_b) # 计算对齐后的目标总页数 target_page_num = max(len(pages_a), len(pages_b)) def fill_blank_pages(page_list, target_num): """给页列表末尾追加空白页到指定页数""" current_num = len(page_list) if current_num >= target_num: return page_list # 取原PDF第一页的尺寸、色彩模式作为空白页基准,和原PDF格式保持一致 std_mode = page_list[0].mode std_size = page_list[0].size # 生成纯白空白页 blank_page = Image.new(std_mode, std_size, color="white") # 差多少页补多少页 for _ in range(target_num - current_num): # 必须用copy()生成独立对象,避免后续修改出现联动问题 page_list.append(blank_page.copy()) return page_list # 两份PDF都补页到相同页数 pages_a_aligned = fill_blank_pages(pages_a, target_page_num) pages_b_aligned = fill_blank_pages(pages_b, target_page_num) # 如需将对齐后的PDF保存到本地,执行以下代码即可 pages_a_aligned[0].save( "aligned_pdf_a.pdf", save_all=True, append_images=pages_a_aligned[1:] ) pages_b_aligned[0].save( "aligned_pdf_b.pdf", save_all=True, append_images=pages_b_aligned[1:] )
注意事项
- 如果待处理的PDF存在页面尺寸不统一的情况,把空白页尺寸获取逻辑改成取对应位置前一页的尺寸即可,绝大多数常规PDF页面尺寸统一,取第一页的逻辑足够覆盖场景。
- 追加空白页时不要硬编码A4等固定尺寸,否则遇到自定义尺寸的PDF会出现页面大小不匹配的问题。
- 补页完成后你就可以基于对齐后的两个页列表做后续的逐页对比等操作,不需要额外转格式。
内容的提问来源于stack exchange,提问作者user13303557
相关产品推荐
相关产品推荐

