处理PDF文档

用于处理PDF的模块是PyPDF2(区分大小写),使用pip安装。

c:\python\Scripts>pip3.6 install PyPDF2
Collecting PyPDF2
  Downloading PyPDF2-1.26.0.tar.gz (77kB)
    100% |████████████████████████████████| 81kB 69kB/s
Installing collected packages: PyPDF2
  Running setup.py install for PyPDF2 ... done
Successfully installed PyPDF2-1.26.0

c:\python>python.exe
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import PyPDF2
>>>

从PDF提取文本

PyPDF2没有办法从PDF文档中提取图像、图表或其他媒体,但它可以提取文本,并将文本返回为python字符串。

PyPDF2从PDF提取文本时可能会出错,甚至根本不能打开某些PDF。

>>> import PyPDF2
>>> pdf1=open('125001.pdf','rb')          ##采用二进制模式打开
>>> pdfReader=PyPDF2.PdfFileReader(pdf1)
PdfReadWarning: Xref table not zero-indexed. ID numbers for objects will be corrected. [pdf.py:1736]
>>> pdfReader.numPages         ##文档总页数
20
>>> page1=pdfReader.getPage(0)  ##首页下标为0
>>> page1.extractText()         ##返回该页文本的字符串
'  H3C S12500 QoS\n  www.h3c.com.cn \n121NI H3C S12500 QoS \n2O......SP Strict Priority \n ToS Type of Service \n '
>>>

解密PDF

某些PDF文档有加密功能,以防止别人阅读,只有在打开文档时提供口令才能阅读。

在文件用正确的口令解密之前,尝试调用函数来读取文件,将会导致错误。

decrypt()方法只解密了PdfFileReader对象,而不是实际的PDF文件。在程序中止后,硬盘上的文件仍然是加密的。程序下次运行时,仍然需要再次调用decrypt()。

>>> import PyPDF2
>>> pdfReader=PyPDF2.PdfFileReader(open('125003.pdf','rb'))
>>> pdfReader.isEncrypted           ##判断是否加密
True
>>> pdfReader.decrypt('password')   ##使用口令解密,返回0表示失败
1
>>>

创建PDF

PdfFileWriter可以创建一个新的PDF文件。

它的能力仅限于从其他PDF中拷贝页面、旋转页面、重叠页面和加密文件。

模块不允许直接编辑PDF。必须创建一个新的PDF,然后从已有的文档拷贝内容。

  • 操作步骤:

1、打开一个或多个已有的PDF,得到PdfFileReader对象

2、创建一个新的PdfFileReader对象

3、将页面从PdfFileReader对象拷贝到PdfFileWriter对象中

4、最后,利用PdfFileWriter对象写入输出的PDF

创建一个PdfFileWriter对象,只是在Python中创建一个代表PDF文档的值,这并没有创建实际的PDF文件,要实际生成文件,必须调用PdfFileWriter对象的write()方法。

拷贝页面

PyPDF2不能在PdfFileWriter对象中间插入页面,addPage()方法只能够在末尾添加页面。

传递给PyPDF2.PdfFileReader()的File对象,需要以读二进制的方式打开。

>>> import PyPDF2
>>> pdf1=open('125001.pdf','rb')
>>> pdf2=open('125002.pdf','rb')
>>> pdf1Reader=PyPDF2.PdfFileReader(pdf1)
>>> pdf2Reader=PyPDF2.PdfFileReader(pdf2)
>>> pdfWriter=PyPDF2.PdfFileWriter()
>>> for page in range(pdf1Reader.numPages):
...     pageObj=pdf1Reader.getPage(page)
...     pdfWriter.addPage(pageObj)
...
>>> for page in range(pdf2Reader.numPages):
...     pageObj=pdf2Reader.getPage(page)
...     pdfWriter.addPage(pageObj)
...
>>> pdfFile=open('new.pdf','wb')  ##生成新PDF文件,包含前面几个文档的内容
>>> pdfWriter.write(pdfFile)
>>> pdfFile.close()
>>> pdf1.close()
>>> pdf2.close()

效果:

旋转页面

利用rotateClockwise()和rotateCounterClockwise()方法,PDF文档的页面也可以旋转90度的整数倍。

>>> import PyPDF2
>>> pdf1=open('125001.pdf','rb')
>>> pdf1Reader=PyPDF2.PdfFileReader(pdf1)
>>> page=pdf1Reader.getPage(0)
>>> page.rotateClockwise(90)
{'/CropBox': [0, 0, 595.22, 842], '/Parent': IndirectObject(476, 0), '/Conten......0': IndirectObject(491, 0)}}, '/Type': '/Page'}
>>> pdfWriter=PyPDF2.PdfFileWriter()
>>> pdfWriter.addPage(page)
>>> newFile=open('newfile.pdf','wb')
>>> pdfWriter.write(newFile)
>>> newFile.close()
>>> pdf1.close()

效果:

叠加页面

通过叠加页面的方式,很容易为多个文件添加水印,并且只针对程序指定的页面添加。

>>> import PyPDF2
>>> pdf1=open('125001.pdf','rb')
>>> pdf1Reader=PyPDF2.PdfFileReader(pdf1)
>>> pdf1Page1=pdf1Reader.getPage(0)
>>> pdfMarkReader=PyPDF2.PdfFileReader(open('125002.pdf','rb'))
>>> pdf1Page1.mergePage(pdfMarkReader.getPage(0))
>>> pdfWriter=PyPDF2.PdfFileWriter()
>>> pdfWriter.addPage(pdf1Page1)
>>> for page in range(1,pdf1Reader.numPages):
...     pageObj=pdf1Reader.getPage(page)
...     pdfWriter.addPage(pageObj)
...
>>> resultFile=open('result.pdf','wb')
>>> pdfWriter.write(resultFile)
>>> pdf1.close()
>>> resultFile.close()

效果:

加密PDF

PdfFileWriter对象也可以为PDF文档进行加密。

PDF可以有一个用户口令(允许查看这个PDF)和一个拥有者口令(允许设置打印、注释、提取文本和其他功能的许可)。

用户口令和拥有者口令分别是encrypt()的第一个和第二个参数。

如果只传入一个字符串给encrypt(),它将作为两个口令。

>>> import PyPDF2
>>> pdf1=open('125001.pdf','rb')
>>> pdf1Reader=PyPDF2.PdfFileReader(pdf1)
>>> pdfWriter=PyPDF2.PdfFileWriter()
>>> for page in range(pdf1Reader.numPages):
...     pdfWriter.addPage(pdf1Reader.getPage(page))
...
>>> pdfWriter.encrypt('123456')
>>> encryptFile=open('encrypt.pdf','wb')
>>> pdfWriter.write(encryptFile)
>>> encryptFile.close()
>>> pdf1.close()

效果:

时间: 2024-10-08 05:25:38

处理PDF文档的相关文章

教你如何将word转换成PDF文档使用

对于各种不同文档格式的转换对文字工作者来说可谓是"家常便饭",而最让人头疼的莫过于office文档与pdf文档之间的互相转换.有时候遇到需要文字编辑的就得转换成word文档,有时候要成稿传输了,又得转换成pdf格式,这来回之间的转换,如果没有一个好的转换器作为帮手,还真的是会让人抓狂. 今天小编和大家介绍一款小编平时用的转换器软件.除了将word转成pdf,更重要的是能够对一些常见类型的文档转换格式.像word.ppt.excel.pdf等都可以转为你需要的文档格式.另外还能对文档进行

java导出pdf文档

java导出pdf文档,多是iText实现的,可以创建pdf文档,并向文档写入内容. 1 导入包:itext-2.0.6.jar       itext必须使用的包. iTextAsian.jar      向pdf写入中文必须的包. 2 代码: package com.exp.pdf; import java.awt.Color; import java.io.FileOutputStream; import com.lowagie.text.Document; import com.lowa

PHP制作pdf文档方法

本篇博客是在看完 php+mysql web书以后自己的测试代码,虽然是测试代码,但不是简单的粘贴复制,为了学习thinkPHP框架,自己就用这个来做的,而且这本书已经有年头了.原书的代码中的方法,在查阅手册的时候,很多都已经弃用了,所以分享给大家还是有必要的.php制作pdf文档的方法有很多,我写的只是其中一种,大家有时间可以多看看.好了,进入正题 准备工作: 1.php手册(在线php关于pdf地址: http://php.net/manual/zh/intro.pdf.php ) 2.PD

CentOS6.4下使用默认的文档查看器打开PDF文档乱码的解决方案

 最近在CentOS6.4下使用其默认的文档查看器打开PDF文档时出现乱码的方块,有两种方法可以解决.    方法一:修改/etc/fonts/conf.d/49-sansserif.conf文件,如下: [html] view plaincopy <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <!-- If the f

PDF文档创建组件Spire.PDF for .NET

Spire.PDF for .NET控件是一款由e-iceblue公司开发的专业性的PDF文档创建组件.它能够使用户在不用Adobe Acrobat和其他外部控件的情况下,运用.NET 应用程序阅读,编写和操纵PDF 文档.Spire.PDF for .NET不仅可以运用在服务端比如:ASP.NET 或者其他环境,还可以应用在Windows Forms 应用程序中.Spire.PDF for .NET 适合应用于所有常见的坏境中,比如:创建好的PDF文档可以存到磁盘中, 还可以在Windows

Java生成PDF文档(表格、列表、添加图片等)

需要的两个包及下载地址: (1)iText.jar:http://download.csdn.net/source/296416 (2)iTextAsian.jar(用来进行中文的转换):http://download.csdn.net/source/172399 代码如下: 1 import java.awt.Color; 2 import java.io.FileOutputStream; 3 import com.lowagie.text.Cell; 4 import com.lowagi

PDF文档如何编辑,怎样设置PDF文本字体

PDF文件怎么编辑,如何设置字体?很多人都会编辑word.ppt这类文档,但是对于PDF格式的文档很少有人知道怎样去编辑修改,下面就来说说怎样编辑PDF,设置文本的字体. 在PDF阅读器中无法对文档内容进行编辑修改,所以要先用PDF编辑器来打开文档. 打开PDF文档后点击编辑内容工具,文档内容就可以进行编辑操作了. 设置字体,对文本格式进行修改,需要打开属性窗格.如果没有该窗格,可以选择"视图"-"其他窗格"-"属性窗格"来打开. 选择文本内容后

手机打开PDF文档中文英文支持(乱码问题)解决攻略

电子书的优点很多,随时随地阅读,无论白天黑夜走路坐车都能阅读:想确认一下某句话是不是这本书里的,搜索一下就可以知道:搬家也不用发愁,几万本书带在身上,依然轻松步行.我买了一台平板主要动因就是为了看书,但是有时候会遇到一些问题:一本PDF格式的电子书在电脑上打开时显示正常,用手机打开却出现乱码.通过网络查询,找到了解决办法.这里分享给大家.过程不算很麻烦.一本书2-3分钟搞定. PDF文件自身是可以嵌入字体的,这样就可以在任何语言的设备上直接阅读,而不用考虑该设备上是否有相应的字体.但是PDF文件

专业性的PDF文档创建组件 Spire.PDF for .NET

Spire.PDF for .NET控件是一款由e-iceblue公司开发的专业性的PDF文档创建组件.它能够使用户在不用Adobe Acrobat和其他外部控件的情况下,运用.NET 应用程序阅读,编写和操纵PDF 文档.Spire.PDF for .NET不仅可以运用在服务端比如:ASP.NET 或者其他环境,还可以应用在Windows Forms 应用程序中.Spire.PDF for .NET 适合应用于所有常见的坏境中,比如:创建好的PDF文档可以存到磁盘中, 还可以在Windows

[Latex] Type3 PDF文档处理

提交给ACM与IEEE的论文中,除了有明确具体字体类型的Type1和TrueType字体外,经常会出现Latex不能识别的Type3字体.这种字体在印刷刊物中有可能出现印刷错误,编译为.dvi文件时也有几率发生错误,在正式文档中是需要尽量规避的. 一.Type3 文件的识别 1.整体识别 1)阅读器 用adobe/foxit 等reader打开pdf文件,"文件 -> 属性" 打开属性对话框,找到“字体”项目,可以看到pdf所包含的字体信息.通常如果有type3,会直接显示在最前