pdf合并(拼接)——Python工具之pdf合并(拼接)

写一下为什么选择了PyPDF:

使用PyPDF库,该库是目前正在持续更新的,以下截图时间为2023/12/9。pypdf 是一个免费的开源纯 python PDF 库,能够拆分合并裁剪转换 PDF 文件的页面。它还可以向 PDF 文件添加自定义数据查看选项密码。pypdf 也可以从 PDF 中检索文本元数据

以前用的比较多的是PyPDF2和后来出现的PyPDF4。PyPDF2是最初从PyPDF发展起来的,而现在pypdf2的最后更新版本又明确提示:PyPDF2项目要回归其本源了,PyPDF2==3.0.X将会是PyPDF2的最后一系列版本,将来的版本从PyPDF==3.1.0开始。也就是说从3.1.0版本开始,该项目重新使用PyPDF这一最初使用的名字。

PyPDF4最后版本1.27.0更新是2018年,其后一直再更新,不知道是不是版本已经很稳定不需要更新,还是也无人继续维护了。

使用方法:

基本例子

from pypdf import PdfWriter

merger = PdfWriter()

for pdf in ["file1.pdf", "file2.pdf", "file3.pdf"]:
    merger.append(pdf)

merger.write("merged-pdf.pdf")
merger.close()

更多合并(拼接)选项

from pypdf import PdfWriter

merger = PdfWriter()

input1 = open("document1.pdf", "rb")
input2 = open("document2.pdf", "rb")
input3 = open("document3.pdf", "rb")

# 将第一个文件的前三页添加到输出文件中
merger.append(fileobj=input1, pages=(0, 3))

# 将第二个文件的第一页插入到输出文件的第二页后面
merger.merge(position=2, fileobj=input2, pages=(0, 1))

# 将全部第三个文件内容放在输出文件最后
merger.append(input3)

# 写入保存输出PDF文件
output = open("document-output.pdf", "wb")
merger.write(output)

# 关闭文件描述符
merger.close()
output.close()

append的用法

writer = PdfWriter()

# 附加源文件的前10页
writer.append("source.pdf", (0, 10))

# 添加reader文件中的第1页和第10页并创建大纲
writer.append(reader, "page 1 and 10", [0, 9])

如果要在目标位置的中间插入页面,请使用 merge(提供(插入)位置)。如有必要,甚至可以使用基于列表的语法多次插入同一页面:

writer.append(reader, [0, 1, 0, 2, 0])

执行上面语句将插入第 1 页和第 2 页,在之前、中间和之后插入第 0 页。

### 如何使用Python从带有合并单元格的PDF中提取表格数据 对于带合并单元格的PDF文件,可以利用 Camelot 和 Tabula 这样的工具来完成表格数据的提取工作。这些库专门针对 PDF 表格进行了优化,能较好地处理复杂的表格结构。 #### 使用 Camelot 提取 PDF 表格数据 Camellot 是一个强大的 Python 库,它支持多种方式读取 PDF 文件中的表格将其转换为 Pandas DataFrame 或 CSV 格式的数据[^1]。以下是具体实现方法: ```python import camelot # 读取 PDF 提取其中的表格 tables = camelot.read_pdf('example.pdf', pages='all') # 将提取到的第一个表格保存为 CSV 文件 tables[0].to_csv('output.csv') ``` 如果遇到复杂情况(比如存在跨页表或多级标题的情况),可以通过调整参数 `flavor` 来适应不同类型的表格布局。例如设置 `flavor="stream"` 可以更灵活地应对不规则表格。 #### 处理合并单元格的具体策略 当面对含有合并单元格的表格时,单纯依赖上述简单调用可能无法完全满足需求。此时需要进一步分析和预处理原始数据。一种常见做法是在获取初始结果之后手动修复缺失值或者重新排列行列关系。 下面展示了一个例子,演示怎样通过编程手段解决部分因合并而导致的信息丢失问题: ```python import pandas as pd def fix_merged_cells(df): """填充由于合并造成的空白""" df.ffill(inplace=True) # 向下填充相同列内的前一有效观测值 return df dataframes = [] for table in tables: dataframe = table.df cleaned_df = fix_merged_cells(dataframe) dataframes.append(cleaned_df) final_result = pd.concat(dataframes, ignore_index=True) print(final_result) ``` 此脚本片段先定义辅助函数 `fix_merged_cells()` ,该函数会自动填补由 Excel/PDF 导致的重复项显示为空白的现象;接着遍历所有已解析出来的子表单逐一修正后再拼接成最终完整的DataFrame对象[^5]。 另外值得注意的是,在某些特殊情形下仅靠软件层面操作难以达到理想效果,则需参照官方文档深入理解内部机制甚至自定义算法逻辑才能妥善解决问题[^3]。 #### 总结说明 综上所述,虽然目前主流框架已经提供了较为成熟的解决方案帮助开发者轻松达成目标——即高效准确地抓取出嵌套于各类电子档里的结构化信息资源,但对于特定场景仍可能存在局限性,这就要求使用者具备一定技术水平以便适时介入调试直至获得满意成果为止[^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值