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

如何在Python中给PDF添加竖线?pypdf实现遇问题求助

解决PDF添加竖线及表格解析问题

关于pypdf的问题

  • 你遇到的Incorrect first char in NameObject:(None)是pypdf处理Line注释时的已知兼容性问题,原因是Line注释缺少部分必填的Name属性,导致写入PDF时抛出警告。
  • 另外,pypdf添加的是注释型线条,并非直接绘制在页面内容层,多数PDF阅读器默认隐藏注释,所以你看到的修改后PDF和原文件无差异。

替代方案:使用PyMuPDF(fitz)直接绘制页面线条

PyMuPDF可以直接在PDF页面的内容层绘制图形,生成的线条会和原内容融为一体,不存在注释不显示的问题。以下是适配你需求的实现代码:

步骤1:安装PyMuPDF

pip install pymupdf

步骤2:添加竖线的代码

import fitz  # PyMuPDF

def add_vertical_lines(input_path, output_path, x_coordinates):
    doc = fitz.open(input_path)
    for page in doc:
        page_height = page.rect.height
        # 遍历每个x坐标绘制竖线,可调整颜色和线宽
        for x in x_coordinates:
            page.draw_line(
                fitz.Point(x, 0), 
                fitz.Point(x, page_height), 
                color=(0, 0, 0),  # 黑色线条
                width=1  # 线宽
            )
    doc.save(output_path)
    doc.close()

# 示例调用:需根据实际表格列位置调整x_coordinates参数
add_vertical_lines(
    "Injury-Report_2024-02-15_03PM.pdf", 
    "modified_injury_report.pdf", 
    [85, 220, 310, 400, 520, 610]  # 示例列坐标,需自行校准
)

额外建议:无需修改PDF直接优化tabula解析

其实可以跳过修改PDF的步骤,直接调整tabula参数适配扁平结构表格:

  • 关闭自动表格检测,手动指定列坐标,避免数据泄漏:
import tabula

# 手动指定列的x分割坐标(需根据PDF实际列位置校准)
columns = [85, 220, 310, 400, 520, 610]
df_list = tabula.read_pdf(
    "Injury-Report_2024-02-15_03PM.pdf",
    guess=False,
    columns=columns,
    pages="all",
    pandas_options={"header": 0}
)
# 合并多页表格数据
combined_df = pd.concat(df_list, ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:10:02