在日常工作中,PDF (Portable Document Format的简称,意为"可携带文档格式") 是我们比较常用的电子文档格式。PDF文件以 PostScript 语言图象模型为基础,无论在哪种打印机上都可保证精确的颜色和准确的打印效果。
市面上的 PDF 工具,文档阅读基本是免费的,但是文档编辑很多都是需要收费的。面对PDF文档处理,是时候思考如何利用 Python 免费高效地处理任务了。想诱导我下载付费使用,是不可能的!今天我给大家分享一些免费高效的处理方法,彻底解放双手!
原文链接:
付费?是不可能的!处理 PDF 只需几行代码,彻底解放双手!
处理PDF的Python库
处理PDF的库比较多,有时也需要多种配合使用,今天我就介绍一下常用的库:
-
1、PyPDF2:一个纯 python PDF库,能够分割,合并,裁剪和转换PDF文件的页面。它还可以向PDF文件添加自定义数据,查看选项和密码。它可以从PDF中检索文本和元数据,以及将整个文件合并在一起。
-
2、ReportLab:它能快速创建PDF 文档。一款超好用的开源项目,用于创建复杂的、数据驱动的PDF文档和自定义矢量图形
-
3、PDFMiner:一个从PDF文档中提取信息的工具。与其他PDF相关工具不同,它完全专注于获取和分析文本数据。
-
4、pdfplumber,它是一个可以处理pdf格式信息的库,可以查找关于每个文本字符、矩阵、和行的详细信息,也可以对表格进行提取并进行可视化调试。
PDF 实操
1、选取指定页
可以利用 Python 从众多 PDF 页中,选择指定页
from PyPDF2 import PdfFileWriter, PdfFileReader
input1 = PdfFileReader("Python数据分析.pdf")
writer = PdfFileWriter()
def choose_pdf(index):
pages = input1.getNumPages()
for page_num in range(pages):
if page_num+1 not in index:
continue
page = input1.getPage(page_num)
writer.addPage(page)
out_file = open('out.pdf', 'wb')
writer.write(out_file)
out_file.close()
choose_pdf([1,2,3,4,5,6])
2、选取指定页
对于不需要的页,我们可以利用 Python 一键删除
from PyPDF2 import PdfFileWriter, PdfFileReader
input1 = PdfFileReader("source.pdf")
writer = PdfFileWriter()
def delete_pdf(index):
pages = input1.getNumPages()
for page_num in range(pages):
if page_num+1 in index:
continue
page = input1.getPage(page_num)
writer.addPage(page)
out_file = open('delete_out.pdf', 'wb')
writer.write(out_file)
out_file.close()
delete_pdf([2,3,4])
3、合并PDF
对于多个PDF 文件,我们可以利用 Python 一键合并
from PyPDF2 import PdfFileReader, PdfFileWriter
# 创建两个pdf文件对应的PdfFileReader对象
pdf_reader1 = PdfFileReader('source.pdf')
pdf_reader2 = PdfFileReader('delete_out.pdf')
# 创建PdfFileWriter对象
writer = PdfFileWriter()
# 遍历将第一个pdf文件中的每一页取出来
for page_num in range(pdf_reader1.getNumPages()):
# 取出每一页对应的PageObject对象
page = pdf_reader1.getPage(page_num)
# 将当前取出来的页面添加到writer中
writer.addPage(page)
# 遍历将第二个pdf文件中的每一页取出来
for page_num in range(pdf_reader2.getNumPages()):
# 取出每一页对应的PageObject对象
page = pdf_reader2.getPage(page_num)
# 将当前取出来的页面添加到writer中
writer.addPage(page)
# write(stream) - 将添加到此对象的页面集合写入 PDF 文件 ,这儿的stream必须是以写的方式打开的文件对象
out_file = open('add_out.pdf', 'wb')
writer.write(out_file)
out_file.close()
4、添加水印
对于多个PDF 文件,我们可以利用 Python 一键合并
def add_watermark2pdf(input_pdf,output_pdf,watermark_pdf):
watermark = PdfFileReader(watermark_pdf)
watermark_page = watermark.getPage(0)
pdf = PdfFileReader(input_pdf,strict=False)
pdf_writer = PdfFileWriter()
for page in range(pdf.getNumPages()):
pdf_page = pdf.getPage(page)
pdf_page.mergePage(watermark_page)
pdf_writer.addPage(pdf_page)
pdfOutputFile = open(output_pdf,'wb')
# pdf_writer.encrypt(user_pwd="1234",owner_pwd="01234")#设置pdf密码
pdf_writer.write(pdfOutputFile)
pdfOutputFile.close()
create_watermark("""更多内容关注公众号:Python学习与数据挖掘""")
input_pdf= 'source.pdf'
output_pdf= 'water_result.pdf'
watermark_pdf='water_mark.pdf'
add_watermark2pdf(input_pdf,output_pdf,watermark_pdf)
结果示例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-useP2p1B-1599984008623)(https://imgkr2.cn-bj.ufileos.com/ca460ace-b3b9-4cd2-b31d-c78cffa02192.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=fCNUrEpBpPeE3sXysbvuvjcp2AQ%253D&Expires=1600069551)]
5、PDF加密
我们可以设置用户和owner加密功能
pdf_writer.encrypt(user_pwd="12324",owner_pwd="021234")#设置pdf密码
推荐阅读
技术交流
欢迎转载、收藏本文,码字不易,有所收获点赞支持一下!
为方便进行学习交流,本号开通了技术交流群,添加方式如下:
直接添加小助手微信号:pythoner666,备注:CSDN+python,或者按照如下方式添加均可!