如何在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
相关产品推荐
相关产品推荐

