返回顶部
首页 > 资讯 > 后端开发 > Python >Python如何从PDF中提取元数据
  • 554
分享到

Python如何从PDF中提取元数据

2023-06-02 06:06:48 554人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要讲解了“python如何从pdf中提取元数据”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python如何从PDF中提取元数据”吧!PyPdf PyPDF2 PyPDF4的历史最

这篇文章主要讲解了“python如何从pdf中提取元数据”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python如何从PDF中提取元数据”吧!

PyPdf PyPDF2 PyPDF4的历史

最初的pyPdf软件包于2005年发布。pyPdf的最后一个正式版本是在2010年。大约一年后,一家名为Phasit的公司赞助了一个名为PyPDF2的pyPdf分支。该代码编写为向后与原始代码兼容,并且用了好多年,效果一直很好,其最后一个版本是在2016年。

有一个名为PyPDF3的软件包简短系列版本,然后该项目被重命名为PyPDF4。所有这些项目都完全相同,但pyPdf和PyPDF2 +之间的最大区别在于后者版本增加了Python 3支持。Python 3的原始pyPdf有一个不同的Python 3分支,但是这个分支已经多年没有维护了。

虽然最近放弃了PyPDF2,但新的PyPDF4与PyPDF2没有完全的向后兼容性。本文中的大多数示例都可以与PyPDF4完美配合,但也有一些不能,这就是为什么PyPDF4在本文中没有更多的特色。随意用PyPDF4替换PyPDF2的导入,看看它是如何工作的。

pdfrw:一个替代的PDF操作包

Patrick Maupin创建了一个名为pdfrw的软件包,它可以完成许多与PyPDF2相同的工作。除了加密的特殊情况外,本文后面提到PyPDF2的所有操作,pdfrw均可以实现。

pdfrw的最大区别在于它与ReportLab软件包集成,因此你可以使用一些或所有预先存在的PDF构建一个新的PDF。

PyPDF2的安装

如果使用Anaconda而不是常规Python,可以使用pip或conda安装PyPDF2。以下是使用pip安装PyPDF2的方法:

$ pip install pypdf2

由于PyPDF2没有任何依赖,因此安装非常快。

如何从Python****中提取PDF文档信息

我们可以使用PyPDF2从PDF中提取元数据和一些文本,尤其是当在预先存在的PDF文件上执行某些类型的自动化时是非常有用的。

以下是当前可以提取的数据类型:

  • Author

  • Creator

  • Producer

  • Subject

  • Title

  • Number of page

可以在自己的电脑上随便找一个PDF文件进行尝试操作。下面是使用该PDF编写一些代码,并了解如何访问这些属性:

from PyPDF2 import PdfFileReaderdef extract_infORMation(pdf_path): with open(pdf_path, 'rb') as f: pdf = PdfFileReader(f) information = pdf.getDocumentInfo() number_of_pages = pdf.getNumPages() txt = f""" Information about {pdf_path}: Author: {information.author} Creator: {information.creator} Producer: {information.producer} Subject: {information.subject} Title: {information.title} Number of pages: {number_of_pages} """ print(txt) return informationif __name__ == '__main__': path = 'xxxx.pdf' extract_information(path)

首先从PyPDF2包导入PdfFileReader。PdfFileReader是一个具有多种与PDF文件交互的方法的类。在此示例中,我们调用了.getDocumentInfo(),它将返回DocumentInformation的实例,包含了我们感兴趣的大部分信息。我们还可以在reader对象上调用.getNumPages(),让它返回文档中的页数。

information这个变量具有多个实例属性,可以使用这些属性从文档中获取所需的其余元数据。我们可以打印出该信息并将其返回以备将来使用。

虽然PyPDF2具有.extractText(),可以在其页面对象上使用提取文本(本例中未显示),但它的效果不是很好。有些PDF会返回文本,有些会返回空字符串。如果要从PDF中提取文本,建议应该看一下PDFMiner项目。PDFMiner更加强大,专门用于从PDF中提取文本。

如何旋转页面?

有时候PDF是横向模式而不是纵向模式,甚至是颠倒的。当有人扫描文档为PDF或电子邮件时,很可能会发生这种情况。我们可以打印出文档并阅读纸质版本,也可以使用Python的强大功能来旋转有问题的页面。

下面看一下如何使用PyPDF2旋转文章的一些页面:

from PyPDF2 import PdfFileReader, PdfFileWriterdef rotate_pages(pdf_path): pdf_writer = PdfFileWriter() pdf_reader = PdfFileReader(path) # 顺时针旋转90度 page_1 = pdf_reader.getPage(0).rotateClockwise(90) pdf_writer.addPage(page_1) # 逆时针旋转90度 page_2 = pdf_reader.getPage(1).rotateCounterClockwise(90) pdf_writer.addPage(page_2) # 在正常方向上添加一页 pdf_writer.addPage(pdf_reader.getPage(2)) with open('rotate_pages.pdf', 'wb') as fh: pdf_writer.write(fh)if __name__ == '__main__': path = '新路径.pdf' rotate_pages(path)

上面除了pdfileReader之外,还导入了pdfileWriter,因为我们需要编写一个新的pdf。rotate_pages()获取要修改的PDF的路径。在这个函数中,需要创建一个可以命名为pdf-writer的writer对象和一个名为pdf-reader的reader对象。

接下来,可以使用.get page()获取所需的页面。上面开始输入了第0页,也就是第一页,调用page对象的.rotateClockwise()顺时针旋转方法并输入90。然后同样地,对于第二页,调用.rotateCounterLockwise()逆时针旋转并输入90。

每次调用Rotation旋转方法后,都会调用.addPage(),这将向writer对象添加页面的旋转版本。最后一页是第3页,没有对其进行任何旋转。最后,使用.write()把所有新页写入新的PDF。

如何合并PDF?

在许多情况下,我们希望将两个或多个PDF合并到一个PDF中。例如,现在可能有一个标准的封面,需要转到许多类型的报告中。这时候就可以使用python来帮助完成这类工作。

下面是实现的代码,完成PDF合并的操作:

from PyPDF2 import PdfFileReader, PdfFileWriterdef merge_pdfs(paths, output): pdf_writer = PdfFileWriter() for path in paths: pdf_reader = PdfFileReader(path) for page in range(pdf_reader.getNumPages()): # 将每页添加到writer对象 pdf_writer.addPage(pdf_reader.getPage(page)) # 写入合并的pdf with open(output, 'wb') as out: pdf_writer.write(out)if __name__ == '__main__': paths = ['document1.pdf', 'document2.pdf'] merge_pdfs(paths, output='merged.pdf')

假如有一个要合并到一起的pdf列表时,可以直接使用merge_pdf函数完成。此函数采用了输入路径和输出路径作为参数。

首先遍历输入的paths,并为每个输入创建一个PDF阅读对象。然后遍历PDF文件中的所有页面,并使用.addpage()将这些页面写入writer对象。当完成对列表中所有PDF的所有页面的写入后,将在末尾写入新的结果中。

如果不想合并每个PDF的所有页面,可以通过添加一系列要添加的页面来稍微增强这个脚本。挑战一点的话,也可以使用Python的argparse模块为这个函数创建一个命令行接口。

如何拆分PDF?

有时可能需要将PDF拆分为多个PDF,对于包含大量扫描内容的PDF来说尤其重要。以下是如何使用PyPDF2将PDF拆分为多个文件:

from PyPDF2 import PdfFileReader, PdfFileWriterdef split(path, name_of_split): pdf = PdfFileReader(path) for page in range(pdf.getNumPages()): pdf_writer = PdfFileWriter() pdf_writer.addPage(pdf.getPage(page)) output = f'{name_of_split}{page}.pdf' with open(output, 'wb') as output_pdf: pdf_writer.write(output_pdf)if __name__ == '__main__': path = 'xxx.pdf' split(path, 'jupyter_page')

这个函数中再次创建了PDF的reaer对象,并对其所读取的页面进行遍历。对于PDF中的每个页面,创建一个新的PDF的writer实例并向其添加单个页面。然后,将该页面写入一个唯一命名的文件。脚本运行完毕后,就可以将原始PDF的每个页面拆分为单独的PDF。

如何添加水印?

水印是纸质或者电子文档上的图像或图案,一些水印只能在特殊照明条件下才能看到。水印的重要性在于它可以保护你的知识产权,例如图像或PDF。

我们可以使用Python和PyPDF2为文档添加水印,而且是拥有仅包含水印图像或文本的PDF。下面是向PDF添加水印方法:

from PyPDF2 import PdfFileWriter, PdfFileReader

def create_watermark(input_pdf, output, watermark):

watermark_obj = PdfFileReader(watermark)

watermark_page = watermark_obj.getPage(0)

pdf_reader = PdfFileReader(input_pdf)

pdf_writer = PdfFileWriter()

# 给所有页面添加水印

for page in range(pdf_reader.getNumPages()):

page = pdf_reader.getPage(page)

page.mergePage(watermark_page)

pdf_writer.addPage(page)

with open(output, 'wb') as out:

pdf_writer.write(out)

if __name__ == '__main__':

create_watermark(

input_pdf='Jupyter_Notebook_An_Introduction.pdf',

output='watermarked_notebook.pdf',

watermark='watermark.pdf')

上面create_watermark有三个参数:

  • input_pdf:要加水印的PDF文件路径

  • output:要保存PDF的水印版本的路径

  • watermark:包含水印图像或文本的PDF

在代码中,打开水印PDF并从文档中抓取第一页,因为这是水印应该驻留的位置。然后使用input_pdf和通用pdf_writer对象创建PDF的writer对象,以写出带水印的PDF。

下一步是遍历input_pdf中的页面,然后调用.mergePage()并以用上面读取的水印对象watermark_page为参数,这样会将watermark_page覆盖在当前页面的顶部,然后再将新合并的页面添加到pdf_writer对象中。遍历完成后,最后将新加水印的PDF写入磁盘。

如何加密PDF?

PyPDF2目前仅支持将用户密码和所有者密码添加到预先存在的PDF。在PDF版本中,所有者密码会提供PDF的管理员权限,并允许设置文档的权限,而用户密码只允许打开文档。

实际上,PyPDF2是不允许设置文档的任何权限的,即使它允许设置所有者密码的情况下。但无论如何,这是可以加密的方式,也将固有地加密PDF:

from PyPDF2 import PdfFileWriter, PdfFileReaderdef add_encryption(input_pdf, output_pdf, passWord): pdf_writer = PdfFileWriter() pdf_reader = PdfFileReader(input_pdf) for page in range(pdf_reader.getNumPages()): pdf_writer.addPage(pdf_reader.getPage(page)) pdf_writer.encrypt(user_pwd=password, owner_pwd=None,  use_128bit=True) with open(output_pdf, 'wb') as fh: pdf_writer.write(fh)if __name__ == '__main__': add_encryption(input_pdf='reportlab-sample.pdf', output_pdf='reportlab-encrypted.pdf', password='twofish')

add_encryption以输入输出PDF路径和要添加到PDF的密码为参数。由于需要加密整个输入PDF,因此需要遍历其所有页面并将其添加到writer编写器。最后一步是调用.encrypt(),以用户密码,所有者密码以及是否应该添加128位加密为参数。默认情况下,要启用128位加密。如果将其设置为False,则将应用40位加密。

感谢各位的阅读,以上就是“Python如何从PDF中提取元数据”的内容了,经过本文的学习后,相信大家对Python如何从PDF中提取元数据这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Python如何从PDF中提取元数据

本文链接: https://lsjlt.com/news/229058.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python如何从PDF中提取元数据
    这篇文章主要讲解了“Python如何从PDF中提取元数据”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python如何从PDF中提取元数据”吧!PyPdf PyPDF2 PyPDF4的历史最...
    99+
    2023-06-02
  • Python中怎么PDF文件提取数据
    这篇文章将为大家详细讲解有关Python中怎么PDF文件提取数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。示例:使用Python从PDF文件中提取一个表格a) 将表复制到Excel并保存...
    99+
    2023-06-16
  • 如何在 PHP 中从 JSON 中提取数据
    在本文中,我们将介绍在 PHP 中从 JSON 中提取数据的方法。 使用 json_decode() 函数 在 PHP 中使用 json_decode() 函数从 JSON 中提取数据...
    99+
    2024-02-27
  • Python--从PDF中提取文本的方法总结
    目录 前言 一、pdfplumber 二、pdfminer 三、fitz / pymupdf 四、性能对比 前言 这段时间做了好几个关于年报的需求,其中无一例外需要从年报PDF中提取文本再进行下一步的操作。为了提高效率,对...
    99+
    2023-09-03
    python pdf 自动化
  • Python数据分析:从数据中提取价值
    背景 数据已渗透到我们生活的各个层面,从智能传感器到庞大数据库。从这些数据中提取有用信息已变得至关避要,以帮助我们制定明智的决策、提升运营效率和创造创新洞察。使用诸如 Pandas、NumPy 等库的编程语言(如:python)扮演着关...
    99+
    2024-02-17
    数据科学 机器语言 数据挖掘 数据可视化
  • 如何从维基链接中提取数据?
    问题内容 我想从 mwparserfromhell 库返回的 wiki 链接中提取数据。 例如,我想解析以下字符串: [[file:warszawa, ul. freta 16 201...
    99+
    2024-02-06
  • 如何在Linux上从图像和PDF中提取文本
    本篇内容介绍了“如何在Linux上从图像和PDF中提取文本”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!gImageReader是Tesse...
    99+
    2023-06-15
  • 通过Python的pdfplumber库提取pdf中表格数据
    文章目录 前言一、pdfplumber库是什么?二、安装pdfplumber库三、查看pdfplumber库版本四、提取pdf中表格数据1.引入库2.定义pdf文件路径3.打开pdf文件4.获...
    99+
    2023-09-05
    python pdf 开发语言
  • 如何利用Python提取pdf中的表格数据(附实战案例)
    目录前言pdfplumber简介实战案例前言 今天给大家介绍一个Python使用工具,那就是从pdf文件中读取表格数据,主要用到第三方库 pdfplumber。 pdfpl...
    99+
    2022-11-13
    python读取pdf表格数据 Python读取pdf pandas读取pdf数据
  • Python怎么从csv文件中读取数据及提取数据
    本篇内容主要讲解“Python怎么从csv文件中读取数据及提取数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么从csv文件中读取数据及提取数据”吧!数据保存在csv文件中1.从...
    99+
    2023-06-25
  • Python从txt文件中提取特定数据
    本段代码用于,想要从一段txt文件中只提取目标数据的情况。 代码: def get_data(txt_path: str = '', epoch: int = 100, target: str = '...
    99+
    2023-09-12
    python 算法 c#
  • python如何从字典中获取元素
    这篇文章主要介绍python如何从字典中获取元素,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!从字典中获取元素不要用下列的方式data = {'user': 1,&nbs...
    99+
    2023-06-17
  • python如何提取数据中的部分数据
    您可以使用Python中的切片(slicing)来提取数据中的部分数据。切片允许您根据索引从序列(如列表、字符串或元组)中选择部分子...
    99+
    2023-08-23
    python
  • Python如何提取chm数据
    目录Python提取chm数据需求场景查用python自带的.chm官方文档总结Python提取chm数据 需求场景 chm格式文档中的内容,提取保存为html 方法一 使用在线转换...
    99+
    2023-01-06
    Python提取chm数据 Python chm数据 Py提取chm数据
  • Python从csv文件中读取数据及提取数据的方法
    目录1.从csv文件中读取数据2.数据切割数据保存在csv文件中 1.从csv文件中读取数据 参数header=None的有无 (1)没有header=None——直接将csv表中...
    99+
    2024-04-02
  • 如何使用Python从字符串中提取数字?
    在Python中,有时候需要从字符串中提取特定的数字信息,这种操作很常见。例如,从一篇新闻报道中提取新闻发布日期、从一篇小说中提取章节编号等。那么,如何使用Python从字符串中提取数字呢?本文将介绍几种方式。 阅读更多:Python...
    99+
    2023-08-31
    mysql 数据库 python
  • Python怎么从不同表格中提取数据
    Python怎么从不同表格中提取数据,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。获取谷歌表格数据访问谷歌表格是这三种方法中最复杂的,因为你需要在使用谷歌表格API前设置一些证...
    99+
    2023-06-16
  • java如何从数组中随机取元素
    要从数组中随机取元素,可以使用Java中的Random类生成一个随机索引,然后根据该索引从数组中取出对应的元素。以下是一个示例代码:...
    99+
    2023-10-18
    java
  • 如何在Linux上使用gImageReader从图像和PDF中提取文本
    本篇文章为大家展示了如何在Linux上使用gImageReader从图像和PDF中提取文本,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。gImageReader 是一个 GUI 工具,用于在 Lin...
    99+
    2023-06-15
  • python怎么抓取pdf数据
    要在Python中抓取PDF数据,可以使用pdfminer库。以下是一个简单的示例代码,展示了如何使用pdfminer来解析PDF文...
    99+
    2023-09-22
    python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作