章金莱,怎么运用Python玩转PDF各种骚操作?,斐讯

Portable Document Format(可移植文档格局),或许PDF是一种文件格局,能够用于跨操作系统的出现和文档交流。尽管PDF开端是由Adobe创造的,但它现在是由世界规范化安排(ISO)维护的敞开规范。你能够经过运用PyPDF2包在Python中处理已先存在的psp游戏下载PDF。

PyPDF2是一个纯Python包,可用于许多不同类型的PDF操作。

本文将带你了解怎样履行以下操作:

从Python中提取PDF中的文档信息

旋转页面

兼并PDF

拆分PDF

增加水印

加密PDF

pyPdf,PyPDF2和PyPDF4的前史

开端的pyPdf软件包于2005年发布。pyPdf的最终一个正式版别是在2010年。大约一年后,一家名为Phasit的公司资助了一个名为PyPDF2的pyPdf分支。该代码编写为向后与原我是阴阳人始代码兼容,并且用了好多年,作用一向很好,其最终一个版别是在2016年。

有一个名为PyPDF3的软件愿望改造家包简略系列版别,然后该项目被重命名为PyPDF4。一切这些项章金莱,怎样运用Python玩转PDF各种骚操作?,斐讯目都彻底相同,但py章金莱,怎样运用Python玩转PDF各种骚操作?,斐讯Pdf和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 py章金莱,怎样运用Python玩转PDF各种骚操作?,斐讯pdf2

由于PyPDF2没有任何依靠,因而装置十分快。

怎样从Python中提取PDF文档信息

咱们能够运用PyPDF2从PDF中提取元数据和一些文本,特别是当在预先存在的PDF文件上履行某些类型的主动化时对错常有用的。

以下是当时能够提取的数据武林别传戟神加点类型:

Author

Creator

Producer

Subject

Title

Number of page

能够在自己的电脑上随意找一个PDF文件进行测验操作。下面是运用该PDF编写一些代码,并了解如森苺莉何拜访这些特点:

from PyPDF2import PdfFileReader

def 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: {information24式简化太极拳.producer}

Subject: {information.subject}

Title: {information.title}

Number of pages: {nu姐姐妹妹站起来电影mber_of_pages}

"""

print(txt)

return information

if __name__ =='__main__':

path ='xxxx.pdf'

extract_information(path)

首要从PyPDF2包导入PdfFileReader。PdfFileReader是一个具有多种与PDF文件交互的办法的类。在吉林省此示例中,咱们调用了.getDocumentIn章金莱,怎样运用Python玩转PDF各种骚操作?,斐讯fo(),它将回来DocumentInformation的实例,包括了咱们感兴趣的大部章金莱,怎样运用Python玩转PDF各种骚操作?,斐讯分信息。咱们还能够在reader目标上调用.getNumPages(),让它回来文档中的页数。

information这个变量具有多个实例特点,能够运用这些特点从文档中获取所需的其余元数据。咱们能够打印出该信息并将其回来以备将来运用。

尽管PyPDF2具有.extractText(),能够在其页面目标上运用提取文本(本例中未显现),但它的作用不是很好。arc有些PDF会回来文本,有些会回来空字符串。假如要从PDF中提取文本,主张应该看一下PDFMiner项目。章金莱,怎样运用Python玩转PDF各种骚操作?,斐讯PDFMiner愈加强壮,专门用于从PDF中提取文本。

怎样旋转页面?

有时候PDF是横向形式而不是纵向形式,乃至是倒置的。当有人扫描文档为PDF或电子邮件时,很或许会发作这种状况。咱们能够打印出文档并阅览纸质版别,也能够运用Py痒孟楠thon的强壮功能来旋转有问题的页面。

下面看一下怎样运用PyPDF2旋转文章的一些页面:

from PyPDF2import PdfFileReader, PdfFileWriter

def 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__章金莱,怎样运用Python玩转PDF各种骚操作?,斐讯 =='__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 PyPDF2import PdfFileReader, PdfFileWriter

def merge_pdfs(paths, output):

pdf_writer = PdfFileWriter()

for pathin paths:

pdf_reader = PdfFileReader(path)

for pagein range(pdf_reader.getNumPages()):

# 将每页增加到writer目标

pdf_writer.a小姐诱心ddPage(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 PyPDF2import PdfFileReader, PdfFileWriter

def split(path, name_of_split):

pdf = PdfFileReader(path)

for pagein 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 PyPDF2import 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 pagein 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_wri就爱影视ter目标中。遍历完结后,最终将新加水印的PDF写入磁盘。

怎样加密PDF?

PyPDF2现在仅支撑将用户暗码和一切者暗码增加到预先存在的PDF。在PDF版别中,一切者暗码会供给PDF的管理员权限,并答应设置文档的权限,而用户暗码只答应翻开文档。

实际上,PyPDF2是不答应设置文档的任何权限的,即便它答应设置一切者暗码的状况下。但无论怎样,这是能够加密的方法,也将固有地加密PDF:

from PyPDF2import PdfFileWriter, PdfFileReader

def add_encryption(input_pdf, output_pdf, password):

pdf_w鲤组词riter = PdfFileWriter()

pdf_reader = PdfFileReader(input_pdf)

for pagein range(pdf_reader.getNumPages()):

pdf_writer.addPage(pdf_reader.getPage(page))

pdf_writer.encrypt(user_pwd=pass杏眼word, 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_encryptitipon以输入输出PDF途径和要增加到PDF的暗码为参数。由于需求加密整个输入PDF,因而需求遍历其一切页面并将其增加到writer编写器。最终一步是调用.encrypt(),以用户暗码,一切者暗码以及是否应该增加128位加密为参数。默许状况下,要启用128位加密。假如将其设置为False,开业大吉则将运用40位加密。

定论

PyPDF2包十分有用,能够运用PyPDF2主动履行脚本完结PDF文档的批量操作。本文介绍了怎样从PDF中提取元数据,旋转页面,兼并和拆分PDF,增加水印,以及增加加密的操作。

一起,还要重视较新的PyPDF4包,由于它很快就会替代PyPDF2。也能够看看pdfrw包,它也能够履行许多与PyPDF2相同的操作。

3分钟测试自己适不适合成为IT大神

声明:该文观念仅代表作者自己,搜狐号系信息发布渠道,搜狐仅供给信息存储空间服务。
  • 最新留言