Python处理PDF文档
最近碰到需要分割PDF文档的需求,本着Python万能的原则,找到了一个pypdf
的库,可以实现PDF的分割、合并等操作,现在就对这些操作做一个简单的介绍。
库的安装
pypdf
是一个支持python操作PDF的库,不过现在已经不再更新的,可以用一个类似的库pypdf2
的库代替,可以直接使用下面的命令。
pip3 install pypdf2
pypdf
的基本使用
pypdf主要有PdfFileWriter
和PdfFileReader
两个类,可以通过PyPDF2.pdf
导入。
PDF文件读取通过PdfFileReader
实现,直接传入一个打开的文件句柄就可以了,对页面的读取可以直接通过getPage
方法实现,示例如下:
from PyPDF2.pdf import PdfFileWriter, PdfFileReader
with open("source.pdf", 'rb') as souce_pdf:
pdf_in = PdfFileReader(source_pdf)
page = pdf_in.getPage(10)
如果需要写入pdf,则需要PdfFileWriter
,一般直接向里面添加页面就可以了。比如:
from PyPDF2.pdf import PdfFileWriter, PdfFileReader
with open("source.pdf", 'rb') as souce_pdf:
pdf_in = PdfFileReader(source_pdf)
page = pdf_in.getPage(10)
pdf_out = PdfFileWriter()
with open("target.pdf", 'wb') as target_pdf:
pdf_out.addPage(page)
pdf_out.write(target_pdf)
上述示例经过简单的封装就可以实现我们需要的功能了。
文件分割脚本
#! /usr/bin/env python3
"""
Extract specified pages from source PDF
"""
from PyPDF2.pdf import PdfFileWriter, PdfFileReader
import sys
import argparse
import os
__prog__ = os.path.basename(__file__)
__version__ = "1.0.0"
__description__ = __doc__
__author__ = "Major Lin"
__copyright__ = "Copyright (C) 2017 Major Lin"
def cutter():
parser = argparse.ArgumentParser(description=__description__)
parser.add_argument("-v", "--version", action="version", version="%(prog)s" + __version__)
parser.add_argument(
"src_pdf",
metavar="SOURCE-PDF",
type=argparse.FileType('rb'),
help="path to source pdf file"
)
parser.add_argument(
"first_page",
metavar="FIRST-PAGE",
type=int,
help="number of first page (1-based index)"
)
parser.add_argument(
"last_page",
metavar="LAST-PAGE",
type=str,
help="number of last page (1-based index)"
)
parser.add_argument(
"-o", "--output",
type=str,
default="output.pdf",
help="path to output file"
)
args = parser.parse_args()
first_page = args.first_page -1
if args.last_page.startswith("+"):
last_page = args.last_page[1:].replace(" ", "")
if not last_page:
sys.exit("Need to specify number of pages")
last_page = first_page + int(last_page)
else:
last_page = int(args.last_page) - 1
pdf_in = PdfFileReader(args.src_pdf)
pdf_out = PdfFileWriter()
for pg_num in range(first_page, last_page):
pdf_out.addPage(pdf_in.getPage(pg_num))
out_stream = open(os.path.expandvars(os.path.expanduser(args.output)), 'wb')
pdf_out.write(out_stream)
out_stream.close()
if __name__ == "__main__":
cutter()
[下载链接]()
最后更新于 2017-10-19 06:55:14 并被添加「」标签,已有 2409 位童鞋阅读过。
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。