在Python中操作PDF的常见方法小结

 更新时间:2024年01月04日 11:02:33   作者:涛哥聊Python  
当在Python中操作PDF时,有几种常见的方法,每种方法都有其独特的优点和用例,在本文中,我们将深入探讨这些方法,并提供丰富的示例代码,以帮助大家更好地理解如何使用这些技术,需要的朋友可以参考下

1. 使用PyPDF2库进行PDF操作

PyPDF2是一个流行的Python库,用于处理PDF文件。它允许你合并、拆分、旋转和提取PDF文档的内容。

以下是一些基本的示例代码:

import PyPDF2

# 合并两个PDF文件
def merge_pdfs(file1, file2, output):
    pdf_writer = PyPDF2.PdfFileWriter()

    pdf_reader1 = PyPDF2.PdfFileReader(file1)
    pdf_reader2 = PyPDF2.PdfFileReader(file2)

    for page_num in range(pdf_reader1.numPages):
        page = pdf_reader1.getPage(page_num)
        pdf_writer.addPage(page)

    for page_num in range(pdf_reader2.numPages):
        page = pdf_reader2.getPage(page_num)
        pdf_writer.addPage(page)

    with open(output, 'wb') as merged_file:
        pdf_writer.write(merged_file)

# 拆分PDF文件
def split_pdf(input_file, output_folder):
    pdf_reader = PyPDF2.PdfFileReader(input_file)

    for page_num in range(pdf_reader.numPages):
        pdf_writer = PyPDF2.PdfFileWriter()
        page = pdf_reader.getPage(page_num)
        pdf_writer.addPage(page)

        output_file = f'{output_folder}/page_{page_num + 1}.pdf'
        with open(output_file, 'wb') as single_page_file:
            pdf_writer.write(single_page_file)

# 调用示例
merge_pdfs('document1.pdf', 'document2.pdf', 'merged_document.pdf')
split_pdf('large_document.pdf', 'output_folder')

2. 使用reportlab库创建PDF

reportlab是一个强大的PDF生成库,它允许从头开始创建PDF文档,包括文本、图形和表格。

以下是一个简单的例子:

from reportlab.pdfgen import canvas

def create_pdf(output_file):
    c = canvas.Canvas(output_file)
    c.drawString(72, 800, "Hello, this is a sample PDF created with reportlab.")
    c.showPage()
    c.save()

# 调用示例
create_pdf('sample_reportlab.pdf')

3. 使用PyMuPDF库进行PDF渲染

PyMuPDF是一个用于渲染PDF文件的库,可以用于提取文本和图像信息。

以下是一个简单的示例:

import fitz  # PyMuPDF的Python绑定

def extract_text_images(pdf_file):
    doc = fitz.open(pdf_file)

    for page_num in range(doc.page_count):
        page = doc[page_num]
        
        # 提取文本
        text = page.get_text("text")
        print(f"Text on page {page_num + 1}:\n{text}\n")

        # 提取图像
        for img_index, img in enumerate(page.get_images(full=True)):
            img_index += 1
            base_image = doc.extract_image(img)
            image_bytes = base_image["image"]
            image_name = f"page_{page_num + 1}_image_{img_index}.png"
            
            with open(image_name, "wb") as image_file:
                image_file.write(image_bytes)

# 调用示例
extract_text_images('document.pdf')

4. 使用PDFMiner库提取文本信息

PDFMiner是一个用于提取PDF文本的强大库,它支持高级的文本提取和布局分析。

以下是一个简单的示例:

from pdfminer.high_level import extract_text

def extract_text_from_pdf(pdf_file):
    text = extract_text(pdf_file)
    print(f"Text extracted from the PDF:\n{text}")

# 调用示例
extract_text_from_pdf('document.pdf')

5. 使用FPDF库创建PDF文档

FPDF是一个轻量级的Python库,用于在PDF文档中添加文本、图形和页面。

以下是一个简单的创建PDF文档的示例:

from fpdf import FPDF

class PDFGenerator(FPDF):
    def header(self):
        self.set_font('Arial', 'B', 12)
        self.cell(0, 10, 'My PDF Document', 0, 1, 'C')

    def chapter_title(self, num, label):
        self.set_font('Arial', 'B', 12)
        self.cell(0, 10, 'Chapter %d : %s' % (num, label), 0, 1, 'L')
        
    def chapter_body(self, body):
        self.set_font('Arial', '', 12)
        self.multi_cell(0, 10, body)

# 创建PDF文档
pdf = PDFGenerator()
pdf.add_page()
pdf.chapter_title(1, 'Introduction')
pdf.chapter_body('This is the introduction to my PDF document.')
pdf.chapter_title(2, 'Chapter 1')
pdf.chapter_body('This is the content of chapter 1.')

# 保存PDF文档
pdf.output('generated_document.pdf')

6. 使用PDFKit库将HTML转换为PDF

PDFKit是一个基于wkhtmltopdf工具的Python库,可以将HTML内容转换为PDF文档。这在需要动态生成报告或将网页内容保存为PDF时非常有用。

以下是一个简单的例子:

import pdfkit

def html_to_pdf(html_content, output_pdf):
    pdfkit.from_string(html_content, output_pdf)

# 调用示例
html_content = "<html><body><h1>Hello, PDFKit!</h1><p>This is a sample HTML content.</p></body></html>"
html_to_pdf(html_content, 'html_to_pdf_output.pdf')

7. 使用PyPDF2旋转PDF页面

PyPDF2不仅可以用于合并和拆分PDF,还可以用于对PDF页面进行旋转。

以下是一个旋转PDF页面的简单示例:

import PyPDF2

def rotate_pdf(input_pdf, output_pdf, rotation_angle):
    pdf_writer = PyPDF2.PdfFileWriter()
    pdf_reader = PyPDF2.PdfFileReader(input_pdf)

    for page_num in range(pdf_reader.numPages):
        page = pdf_reader.getPage(page_num)
        page.rotateClockwise(rotation_angle)
        pdf_writer.addPage(page)

    with open(output_pdf, 'wb') as rotated_file:
        pdf_writer.write(rotated_file)

# 调用示例
rotate_pdf('document.pdf', 'rotated_document.pdf', 90)

8. 使用PDFMerger库进行PDF合并

PDFMerger是一个简单易用的库,专门用于合并PDF文件。

以下是一个示例:

from PyPDF2 import PdfMerger

def merge_pdfs_with_pdfmerger(files, output_file):
    merger = PdfMerger()

    for pdf_file in files:
        merger.append(pdf_file)

    merger.write(output_file)
    merger.close()

# 调用示例
pdf_files = ['file1.pdf', 'file2.pdf', 'file3.pdf']
merge_pdfs_with_pdfmerger(pdf_files, 'merged_files.pdf')

总结

在本文中,我们分享了Python中操作PDF的多种方法,涵盖了PyPDF2、reportlab、PyMuPDF、PDFMiner、FPDF、PDFKit、PyPDF2、PDFMerger等库的应用。通过丰富的示例代码,学习了合并、拆分、文本提取、HTML转换、页面旋转和PDF合并等常见操作。这些工具和技术为处理PDF文件提供了灵活而强大的手段,能够根据具体需求选择适当的方法。

无论是生成报告、处理文档还是转换HTML内容,Python的生态系统都提供了多样化的解决方案。通过阅读本文,不仅可以了解每种方法的基本原理,还能够通过示例代码深入理解其实际应用。在处理PDF的日常任务中,选择适当的工具和技术将极大地提高工作效率。

以上就是在Python中操作PDF的常见方法小结的详细内容,更多关于Python操作PDF的资料请关注脚本之家其它相关文章!

相关文章

  • Gradio机器学习模型快速部署工具接口状态

    Gradio机器学习模型快速部署工具接口状态

    这篇文章主要为大家介绍了Gradio机器学习模型快速部署工具接口状态的原文翻译,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 用Python进行一些简单的自然语言处理的教程

    用Python进行一些简单的自然语言处理的教程

    这篇文章主要介绍了用Python进行一些简单的自然语言处理的教程,主要用到了pandas和collections库,需要的朋友可以参考下
    2015-03-03
  • Python之字典对象的几种创建方法

    Python之字典对象的几种创建方法

    这篇文章主要介绍了Python之字典对象的几种创建方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • python re模块的高级用法详解

    python re模块的高级用法详解

    这篇文章较详细的给大家介绍了python re模块的高级用法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-06-06
  • python os.path模块使用方法介绍

    python os.path模块使用方法介绍

    os.path 模块是系统路径操作模块,但实际的原理可以把它认为是处理包含斜杠("/")和反斜杠("\")字符串的模块,其中,斜杠("/")是 linux 系统下的路径分隔符,和反斜杠("\")是 windows 系统下的路径分隔符
    2022-08-08
  • 如何使用python读取Excel指定范围并转为数组

    如何使用python读取Excel指定范围并转为数组

    python处理数据文件的途径有很多种,下面这篇文章主要给大家介绍了关于如何使用python读取Excel指定范围并转为数组的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • 为什么str(float)在Python 3中比Python 2返回更多的数字

    为什么str(float)在Python 3中比Python 2返回更多的数字

    很多朋友质疑为什么str(float)在Python 3中比Python 2返回更多的数字,在Python 2.7中,一个float的repr返回最接近十七位数的十进制数;这足以精确地识别每个可能的IEEE浮点值。对此问题很多朋友都很疑问,下面小编给大家简单介绍下,需要的朋友可以参考下
    2018-10-10
  • 使用Pyparsing处理复杂文本实现过程

    使用Pyparsing处理复杂文本实现过程

    这篇文章主要为大家介绍了使用Pyparsing处理复杂文本的实现过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Python实现二分法算法实例

    Python实现二分法算法实例

    这篇文章主要介绍了Python实现二分法算法实例,本文先是介绍了算法规则,然后给出了实现例子,需要的朋友可以参考下
    2015-02-02
  • python实现购物车功能

    python实现购物车功能

    这篇文章主要为大家详细介绍了python实现购物车功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02

最新评论