朋友需要对一个pdf文件进行分割,在网上查了查发现这个pypdf2可以完成这些操作,所以就研究了下这个库,并做一些记录。首先pypdf2是python3版本的,在之前的2版本有一个对应pypdf库。
可以使用pip直接安装:
pip install pypdf2
官方文档: pythonhosted.org/PyPDF2/
里面主要有这几个类:
PdfFileReader 。
该类主要提供了对pdf文件的读操作,其构造方法为:
PdfFileReader(stream, strict=True, warndest=None, overwriteWarnings=True)
第一个参数可以传入一个文件流,或者一个文件路径。后面三个参数都是用来设置警告的处理方式,直接使用默认的即可。
得到实例之后,就可以对pdf进行一些操作了。主要的有以
本文来源gaodai.ma#com搞##代!^码7网
下几个操作:
- decrypt(password):如果pdf文件加密的话,可以使用该方法对其解密。
- getDocumentInfo():检索pdf文件的一些信息。其返回值为一个DocumentInformation 类型,直接输出的话会得到类似下面的信息:
{'/ModDate': "D:20150310202949-07'00'", '/Title': '', '/Creator': 'LaTeX with hyperref package', '/CreationDate': "D:20150310202949-07'00'", '/PTEX.Fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014/MacPorts 2014_6) kpathsea version 6.2.0', '/Producer': 'pdfTeX-1.40.15', '/Keywords': '', '/Trapped': '/False', '/Author': '', '/Subject': ''}
- getNumPages():这个会pdf文件中的页数。
- getPage(pageNumber):会得到pdf文件中对应的pageNumber页数的页面对象,返回值为PageObject实例。在得到PageObject实例之后就可以将其加添、插入等操作。
- getPageNumber(page):与上面的方法对立,可以传入PageObject实例,然后得到该实例是pdf文件中第几页的。
- getOutlines(node=None, outlines=None):检索文档中出现的文档大纲。
- isEncrypted:记录该pdf是否加密。如果文件本身加密,即使在使用解密decrypt方法之后,还是会返回true。
- numPages:pdf总共的页数,相当于访问getNumPages()的只读属性。
PdfFileWriter 。
该类支持对pdf文件进行写操作,通常是使用PdfFileReader读取一些pdf数据,然后使用该类进行一些操作。
创建该类的实例时不需要参数。
其主要的方法有:
- addAttachment(fname, fdata):向pdf添加文件。
- addBlankPage(width=None, height=None):给pdf添加一个空白页到最后,如果没有指定大小就使用当前Weiter中pdf最后一页的大小。
- addPage(page):添加page到pdf中,通常这个page是由上面的Reader获取的。
- appendPagesFromReader(reader, after_page_append=None):将reader中的数据拷贝到当前的Writer实例中,并且如果指定after_page_append的话,最后还有回掉该函数并且将writer中的数据传入其中。
- encrypt(user_pwd, owner_pwd=None, use_128bit=True):将pdf进行加密,其中官方说userpwd是允许用户使用一些限制的权限打开pdf文件,也就是使用该密码的话可能会有一些限制,但是本人并没有在文档中找到设置权限的内容。而ownerpwd则是允许用户无限制的使用。第三个参数是是否使用128位加密。
- getNumPages():得到pdf页数。
- getPage(pageNumber):得到对应页数的Page,是一个PageObject对象,可以使用上面的addPage方法将page进行添加。
- insertPage(page, index=0):将page添加到pdf中,index指定的是被插入的位置。
- write(stream):将该Writer中的内容写入到文件中。