付费?是不可能的!处理 PDF 只需几行代码,彻底解放双手!

时间:2020-9-17 作者:admin

在日常工作中,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密码
推荐阅读
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。