在Python中使用PDF:阅读和拆分_fpdf库分割pdf文件

本文是一个小系列的开头,将介绍这些有用的Python库。 在第一部分中,我们将重点介绍现有PDF的操作。 您将学习如何阅读和提取内容(文本和图像),旋转单个页面以及将文档拆分为单独的页面。 第二部分将介绍如何根据叠加层添加水印。 第三部分将专注于编写/创建PDF,还将包括删除和重新组合单个页面到新文档。

工具和库

Python相关的PDF工具,模块和库的可用解决方案范围有点令人困惑,需要花一点时间来弄清楚什么是什么,以及哪些项目是持续维护的。 根据我们的研究,这些是目前最新的方案:

PyPDF2:这是一个Python库,用于提取文档信息和内容,逐页拆分文档,合并文档,裁剪页面和添加水印。 PyPDF2支持未加密和加密的文档。

PDFMiner:完全用Python编写,适用于Python 2.4。对于Python 3,请使用克隆包PDFMiner.six。这两个包都允许您解析,分析和转换PDF文档。包括对PDF 1.7以及CJK语言(中文,日文和韩文)以及各种字体类型(Type1,TrueType,Type3和CID)的支持。

PDFQuery:它将自己描述为“一个快速且友好的PDF抓取库”,它作为PDFMiner,lxml和pyquery的包装器实现。它的设计目标是“用尽可能少的代码可靠地从PDF集合中提取数据。”

tabula-py:它是tabula-java的简单Python包装器,可以从PDF中读取表并将它们转换为Pandas DataFrames。它还允许您将PDF文件转换为CSV / TSV / JSON文件。

pdflib for Python:Poppler库的扩展,为它提供Python绑定。它允许您解析,分析和转换PDF文档。不要与其同名的商业吊坠相混淆。

PyFPDF:用于在Python下生成PDF文档的库。从FPDF PHP库移植,一个众所周知的PDFlib扩展替换,包含许多示例,脚本和衍生产品。

PDFTables:一种商业服务,提供从PDF文档中提取的表格。提供API以便PDFTable可以用作SAAS。

PyX -  Python图形包:PyX是一个用于创建PostScript,PDF和SVG文件的Python包。它结合了PostScript绘图模型的抽象和TeX / LaTeX接口。这些基元构建了复杂的任务,例如以发布就绪质量创建2D和3D图。

ReportLab:一个雄心勃勃的工业级图书馆,主要致力于精确创建PDF文档。可作为开源版本以及名为ReportLab PLUS的商业增强版本免费提供。

PyMuPDF(又名“fitz”):MuPDF的Python绑定,它是一个轻量级的PDF和XPS查看器。该库可以访问PDF,XPS,OpenXPS,epub,漫画和小说书籍格式的文件,并以其顶级性能和高渲染质量而闻名。

pdfrw:一种基于Python的纯PDF解析器,用于读写PDF。它忠实地再现了矢量格式而没有光栅化。与ReportLab结合使用,有助于在使用ReportLab创建的新PDF中重复使用现有PDF的部分内容。

下面我们将重点介绍PyPDF2和PyMuPDF,并解释如何以最简单的方式提取文本和图像。 为了理解PyPDF2的用法,官方文档和其他资源提供的大量示例的组合。 相比之下,官方的PyMuPDF文档更清晰,使用库的速度要快得多。

用PyPDF2提取文档

PyPDF2可以作为常规软件包安装,也可以使用pip3(适用于Python3)安装。 这里的测试基于即将推出的Debian GNU / Linux版本10“Buster”的软件包。 Debian软件包的名称是python3-pypdf2。

下面的代码首先导入PdfFileReader类,然后适用这个类打开文件,用getDocumentInfo() 方法来提取文档信息,包括页数和首页内容。

请注意PyPDF2页码计数从0开始,这也是为什么pdf.getPage(0)函数可以获取文件的第一页。最终,提取到的信息被打印到了stdout。

使用PyMuPDF提取文本

PyMuPDF可从PyPi网站获得,您可以在终端中使用以下命令安装包:

显示文档信息,打印页数和提取PDF文档的文本的方式与PyPDF2类似(参见清单2)。 要导入的模块名为fitz,并返回到PyMuPDF的先前名称。

PyMuPDF的优点在于它保持原始文档结构的完整性 - 带有换行符的整个段落保留在PDF文档中。

使用PyMuPDF从PDF中提取图像

PyMuPDF使用getPageImageList()方法简化了从PDF文档中提取图像的过程。下面的代码来源于PyMuPDF wiki页面的示例,并逐页提取并保存PDF中的所有图像作为PNG文件。 如果图像具有CMYK颜色空间,则首先将其转换为RGB。

在400页PDF上运行这个Python脚本,它在不到3秒的时间内提取了117个图像,这是惊人的。 各个图像以PNG格式存储。 为了保持原始图像格式和大小,而不是转换为PNG,请查看PyMuPDF wiki中脚本的扩展版本。

最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~

给大家准备的学习资料包括但不限于:

Python 环境、pycharm编辑器/永久激活/翻译插件

python 零基础视频教程

Python 界面开发实战教程

Python 爬虫实战教程

Python 数据分析实战教程

python 游戏开发实战教程

Python 电子书100本

Python 学习路线规划

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要将一份 PDF 文件拆分成单独的 PDF 文件,可以使用 PDFium 提供的 API。PDFium 是一个开源的 PDF 渲染引擎,可以用来处理 PDF 文件的各种操作。 以下是使用 PDFium 将 PDF 文件拆分成单独的 PDF 文件的步骤: 1. 初始化 PDFium 使用 PDFium 之前,需要先初始化。可以调用 FPDF_InitLibrary 函数来初始化 PDFium 。 ```c++ #include "public/fpdfview.h" int main() { FPDF_InitLibrary(); // ... FPDF_DestroyLibrary(); return 0; } ``` 2. 打开 PDF 文件 使用 FPDF_LoadDocument 函数可以打开一个 PDF 文件,并返回一个 FPDF_DOCUMENT 句柄。 ```c++ FPDF_DOCUMENT document = FPDF_LoadDocument("test.pdf", nullptr); if (!document) { // 打开文件失败 return -1; } ``` 3. 获取 PDF 页面数 使用 FPDF_GetPageCount 函数可以获取 PDF 文件页面的总数。 ```c++ int pageCount = FPDF_GetPageCount(document); ``` 4. 遍历 PDF 文件的每一页 使用 FPDF_LoadPage 函数可以加载 PDF 文件的某一页,并返回一个 FPDF_PAGE 句柄。然后可以使用 FPDF_RenderPageBitmap 函数将该页渲染到一个位图。最后使用 FPDF_ClosePage 函数关闭页面。 ```c++ for (int i = 0; i < pageCount; i++) { FPDF_PAGE page = FPDF_LoadPage(document, i); if (!page) { // 加载页面失败 continue; } // 渲染页面到位图 FPDF_BITMAP bitmap = FPDFBitmap_Create(width, height, 0); FPDF_RenderPageBitmap(bitmap, page, 0, 0, width, height, 0, 0); // ... FPDF_ClosePage(page); // 保存单个页面为 PDF 文件 FPDF_DOCUMENT newDoc = FPDF_CreateNewDocument(); FPDF_PAGE newPage = FPDFPage_New(newDoc, 0, width, height); FPDFPage_InsertObject(newPage, bitmap); FPDF_ClosePage(newPage); FPDF_SaveAsCopy(newDoc, "page_" + std::to_string(i) + ".pdf", 0); FPDF_CloseDocument(newDoc); } ``` 在上面的代码使用 FPDF_CreateNewDocument 函数创建一个新的 PDF 文档,并使用 FPDFPage_New 函数创建一个新的页面。然后将之前渲染得到的位图插入到页面,并使用 FPDF_SaveAsCopy 函数将单个页面保存为一个 PDF 文件。最后使用 FPDF_CloseDocument 函数关闭文档。 5. 释放资源 最后需要释放 PDFium 使用的资源。 ```c++ FPDF_CloseDocument(document); FPDF_DestroyLibrary(); ``` 以上是使用 PDFium 将 PDF 文件拆分成单独的 PDF 文件的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值