Python玩转PDF:几招搞定的高效操作方法

更多资料获取

📚 个人网站:ipengtao.com


当在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 canvasdef 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 += 1base_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_textdef 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 FPDFclass 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 pdfkitdef 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 PyPDF2def 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 PdfMergerdef 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学习路线

在这里插入图片描述

更多资料获取

📚 个人网站:ipengtao.com

如果还想要领取更多更丰富的资料,可以点击文章下方名片,回复【优质资料】,即可获取 全方位学习资料包。

在这里插入图片描述
点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/218880.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

​multiprocessing.shared_memory --- 可跨进程直接访问的共享内存​

源代码: Lib/multiprocessing/shared_memory.py 3.8 新版功能. 该模块提供了一个 SharedMemory 类&#xff0c;用于分配和管理多核或对称多处理器&#xff08;SMP&#xff09;机器上进程间的共享内存。为了协助管理不同进程间的共享内存生命周期&#xff0c;multiprocessing.m…

Linux具体命令(二)

1.ls Linux的ls命令是用来列出指定目录下的文件和子目录的命令。该命令在Linux和Unix系统中广泛使用&#xff0c;是一个非常基础且重要的命令行工具。执行ls命令时&#xff0c;它会显示指定目录下的所有文件和子目录的名字&#xff0c;如果是根目录&#xff0c;则默认显示当前…

Java 多线程按顺序执行输出

比如三个线程分别打印 A&#xff0c;B&#xff0c;C&#xff0c;顺序执行5次&#xff0c;最后输出ABCABCABCABCABC 主要依赖线程的join方法 实现代码如下&#xff1a; package com.cn.springboot.bootdemo.controller;import org.springframework.web.bind.annotation.RestC…

查询指定节点和对应的父节点

查询指定节点和对应的父节点 WITH RECURSIVE cte AS (SELECT id, parent_id FROM xxx_dir WHERE id 2 -- 当前节点的 IDUNION ALLSELECT t.id, t.parent_id FROM xxx_dir t JOIN cte c ON t.id c.parent_id ) SELECT DISTINCT id, parent_id FROM cte;

「Verilog学习笔记」可置位计数器

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1nsmodule count_module(input clk,input rst_n,input set,input [3:0] set_num,output reg [3:0]number,output reg zero);reg [3:0] cnt ; always (posed…

3-分布式存储之Ceph

任务背景 虽然使用了分布式的glusterfs存储, 但是对于爆炸式的数据增长仍然感觉力不从心。对于大数据与云计算等技术的成熟, 存储也需要跟上步伐. 所以这次我们选用对象存储. 任务要求 1, 搭建ceph集群 2, 实现对象存储的应用 任务拆解 1, 了解ceph 2, 搭建ceph集群 3, 了…

深度学习 | Pytorch深度学习实践 (Chapter 12 Basic RNN)

十二、Basic RNN —— 实际上就是对线性层的复用 使用RNN最重要的两点&#xff1a; 了解序列数据的维度&#xff1b;循环过程所用的权重共享机制&#xff1b; 一般就是自己写个循环&#xff0c;权重层重复用就行了&#xff1b; 回顾&#xff1a;-----------------------------…

【源码复现】《Simple and Deep Graph Convolutional Networks》——GCNII模型

目录 1、论文简介2、论文核心介绍2.1、研究动机2.2、创新点2.3、具体实现2.3.1、初始残差链接2.3.2、恒等映射2.3.3、模型 3、源码复现3.1、Torch复现3.2、DGL复现 1、论文简介 论文题目——《Simple and Deep Graph Convolutional Networks》论文作者——Ming Chen&#xff0…

【模型训练】SD-大模型

【模型训练】SD-大模型

破局创新,天翼云HBlock如何以小见大、以柔克刚?

引言&#xff1a;另辟蹊径开拓创新 不走传统存储厂商的“寻常路” 【全球存储观察 &#xff5c; 科技热点关注】 在分布式块存储领域&#xff0c;大部分厂商的安装软件套件大小都在GB级。然而&#xff0c;天翼云破天荒地将存储资源盘活系统HBlock的软件安装包浓缩到了170MB&a…

linux中proc与sys的区别

在Linux系统中&#xff0c;/sys目录和/proc目录都是特殊的虚拟文件系统&#xff0c;用于提供对系统内核和设备信息的访问。 虽然它们的作用有一些重叠&#xff0c;但它们在功能和用途上有一些区别。 功能&#xff1a; /sys目录主要用于提供对设备和驱动程序的信息和配置的访…

Python-乒乓球小游戏【附完整源码】

乒乓球小游戏 乒乓球小游戏是一个简单而有趣的2D页面交互式游戏&#xff0c;玩家可以通过键盘输入来控制球拍上下移动来接球&#xff0c;从而体验乒乓球的乐趣。该游戏有单人和双人两种模式 运行效果&#xff1a; 一&#xff1a;主程序&#xff1a; import sys import cfg …

Jupyter Notebook: 交互式数据科学和编程工具

Jupyter Notebook: 功能强大的交互式编程和数据科学工具 简介 Jupyter Notebook是一个开源的Web应用程序&#xff0c;广泛用于数据分析、科学计算、可视化以及机器学习等领域。它允许创建和共享包含实时代码、方程式、可视化和解释性文本的文档。总而言之&#xff0c;我认为它…

3D Font

在游戏中使用3D文本 只需添加预制件并立即生成您的文本。 特点: *真实3D字母&#xff0c;可用作游戏对象*移动友好低聚 *VR兼容 *WebGL兼容 *30种以上不同字体 *材料和颜色可定制 WebGL演示 https://indiechest.itch.io/3d-font-engine 下载&#xff1a; ​​Unity资源商店链…

【tips】base64编码怎么反显出图片

格式 <img width"400" height"300" src"data:image/jpeg;base64,这里存放base64的图片内容/>实际的数据展示是这样的 然后把以上的文件内容放置到html文件中 最终展示样例 点击这个 展示出来是这样的

opencv 十五 红外图像中虹膜的提取

一、算法需求 在医疗检测中&#xff0c;需要使用红外相机拍摄眼睛照片&#xff0c;然后提取出虹膜的区域。在拍摄过程瞳孔需要进行运动&#xff0c;其通常不在正前方&#xff0c;无法形成圆形&#xff0c;不能使用常规的霍夫圆检测进行提取定位。且在在红外图像中&#xff0c;…

将输入的字符串反向输出(c语言)

#include<stdio.h> #include<string.h> int main() {int i, j, k;char s[50], temp;gets(s);//输入k strlen(s);//计算字符的长度//反向输出for (i 0, j k - 1;i < k / 2;i, j--){temp s[i];s[i] s[j];s[j] temp;}puts(s);//输出 }

ARM TZC-400原理及配置方式

吧ARM TZC-400是一种TrustZone Controller&#xff0c;用于ARM Cortex-A系列处理器中的硬件支持。TrustZone是ARM提供的一种安全技术&#xff0c;通过在处理器上创建两个不同的安全区域&#xff08;Secure Zone和Non-Secure Zone&#xff09;来提供硬件级别的安全隔离。 TZC-4…

最近面试了一位5年的测试,一问三不知,还反怼我...

最近看了很多简历&#xff0c;很多候选人年限不小&#xff0c;但是做的都是一些非常传统的项目&#xff0c;想着也不能通过简历就直接否定一个人&#xff0c;何况现在大环境越来 越难&#xff0c;大家找工作也不容易&#xff0c;于是就打算见一见。 在沟通中发现&#xff0c;由…

MD5解密详解

MD5解密详解 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; MD5解密揭秘&#xff1a;解谜编码的神奇之路 在信息安全领域&#xff0c;MD5&#xff08;Message Di…