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

如何用Python将PDF 1.3版本转换为1.7版本并解决空白页问题?

解决方案:PDF 1.3转1.7及修复空白页问题

一、修改PyPDF2代码,强制指定输出PDF版本

你的空白页问题可能是版本兼容性+代码逻辑漏洞双重导致的,先修正代码并强制设置1.7版本:

from PyPDF2 import PdfReader, PdfWriter

reader_base = PdfReader("new_pdf.pdf")
reader_base_1 = PdfReader("merged_pdf.pdf")
# 先获取两个PDF的有效页数,避免索引越界
max_available_pages = min(len(reader_base.pages), len(reader_base_1.pages))
height = float(reader_base_1.pages[0].mediabox.top)
writer = PdfWriter()
# 直接指定输出PDF版本为1.7
writer.set_version("1.7")
processed_pages = []

for i in range(1, max_available_pages):
    if i in processed_pages:
        continue
    # 检查当前页是否存在
    if i >= len(reader_base.pages):
        break
    page_box = reader_base.pages[i]
    processed_pages.append(i)
    page_box_1 = None
    angle = 90
    
    if i % 2 == 0:
        target_idx = i + 1
        if target_idx >= len(reader_base.pages):
            break
        page_box_1 = reader_base.pages[target_idx]
        processed_pages.append(target_idx)
    else:
        angle = 270
        target_idx = i + 3
        if target_idx >= len(reader_base.pages):
            break
        page_box_1 = reader_base.pages[target_idx]
        processed_pages.append(target_idx)
    # 检查底版页是否存在
    if i >= len(reader_base_1.pages):
        break
    page_base = reader_base_1.pages[i]
    
    height_1 = float(page_box.mediabox.right) * 0.8
    page_box.rotate(angle)
    page_box_1.rotate(angle)
    page_box.transfer_rotation_to_content()
    page_box_1.transfer_rotation_to_content()
    # 修正坐标,避免内容超出可视区域
    tx = -0.015 * float(page_box.mediabox.top)
    ty_top = max(0, height - height_1)
    page_base.mergeScaledTranslatedPage(page_box, 0.8, tx=tx, ty=ty_top)
    page_base.mergeScaledTranslatedPage(page_box_1, 0.8, tx=tx, ty=0)
    writer.add_page(page_base)

with open("result_v1.7.pdf", "wb") as fp:
    writer.write(fp)

关键调整:

  • 新增writer.set_version("1.7")强制输出1.7版本
  • 增加页数边界检查,避免索引越界生成空页
  • 修正坐标范围,防止内容被渲染到页面可视区域外

二、用Pikepdf直接升级PDF版本(更兼容老PDF)

如果PyPDF2处理后的文件本身有内容但版本不兼容,用Pikepdf直接转换更可靠:

先安装依赖:

pip install pikepdf

转换代码:

import pikepdf

with pikepdf.Pdf.open("你的原始处理结果.pdf") as pdf:
    pdf.save("result_v1.7_pikepdf.pdf", version="1.7")

三、命令行方案(Ghostscript,最稳定)

如果Python库仍有问题,用Ghostscript直接转换,这是工业级的PDF处理工具:

执行命令(需先安装Ghostscript):

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.7 -o output_v1.7.pdf input.pdf

该命令会自动修复PDF兼容性问题,同时升级到1.7版本,解决空白页渲染问题。

空白页的核心原因

除了版本问题,你的原始代码可能存在:

  • 循环到199页但原始PDF页数不足,生成空页面
  • 坐标计算错误,导致内容被渲染到页面可视范围外
  • 旋转操作未正确应用,内容方向异常

先验证页数匹配,再调整坐标参数,最后升级版本即可解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:45:42