【PDF转换】Python的PyMuPDF(fitz)库对PDF文档的删除、合并及ofd格式车票的转换操作

文摘   2025-02-03 07:56   山东  


为什么要进行PDF文档的删除页、合并文档等操作?

‌进行PDF文档的删除页和合并文档等操作的主要原因包括提高工作效率、方便存储和携带、优化阅读体验以及统一管理文档‌。

一、提高工作效率

将多个PDF文件合并可以减少在查阅和传输过程中的繁琐操作,从而提高工作效率‌。例如,团队成员在完成各自的任务后,需要将内容整合到一起,合并后的文档方便传输和阅读,减少了多次传输单个文件的麻烦‌。

二、方便存储和携带

合并后的PDF文件体积更小,便于存储和携带,降低了存储空间和传输带宽的需求‌。这对于需要频繁移动设备或在不同设备间同步文档的用户来说尤为重要。

三、优化阅读体验

合并同类PDF文件可以避免重复内容的出现,使阅读更加流畅‌。此外,合并文档还可以减少文档数量,节省空间,方便阅读和共享‌。

四、统一管理文档

将多个PDF文件合并有助于实现对文档的统一管理,便于检索和整理‌。这对于需要管理和维护大量文档的组织和个人来说是非常有用的功能。






Python如何进行PDF文档的删除页、合并文档等操作?

在Python中,处理PDF文档,包括删除页面和合并文档,可以通过多种库来实现。最常用的库有PyPDF2和pdfplumber(主要用于读取PDF),以及PyMuPDF(也称为fitz)用于更高级的PDF操作。

1. 使用PyPDF2

PyPDF2是一个功能强大的库,用于读取和写入PDF文件。它可以用来删除页面和合并文档。

2. 使用PyMuPDF (fitz)

PyMuPDF提供了更多的功能和更好的性能,特别适合于处理大型或复杂的PDF文件。

如果你的需求主要集中在简单的读取和修改操作上,PyPDF2是一个很好的选择。如果你的需求包括更复杂的操作如旋转页面、提取文本等,或者需要处理非常大的文件,PyMuPDF会是更好的选择。

这两个都属于第三方库,需要pip install 过程进行安装再调用。

pip install PyPDF2

import PyPDF2

pip install pymupdf

import fitz # PyMuPDF

今天我们以PyMuPDF (fitz)库的操作为例,演示一下对PDF文档的删除、合并及ofd格式车票的转换操作。

pip install 过程如下:
在pycharm下端,找到终端(图标为“>_”),直接输入“pip install + 库的名称”,然后“Enter”,等待安装完即可。








比如我们有一个9页的PDF文件,如下图所示:








#使用PyMuPDF(fitz)库

#pip install PyMuPDF

import fitz  # PyMuPDF

#删除后边多余页的操作

pdf0 = fitz.open(r'C:\Users\L\Desktop\顺财福寿上上签平安健康八方来财一帆风顺.pdf')

pdf = fitz.open()#创建一个空的PDF文件

pdf.insert_pdf(pdf0,to_page =5) # first 6 pages

pdf.save(r'C:\Users\L\Desktop\顺财福寿上上签.pdf')

print("保留前6页的 PDF files have been merged successfully.")

可以得到前6页的PDF。








#删除后边多余页的操作

pdf0 = fitz.open(r'C:\Users\L\Desktop\顺财福寿上上签.pdf')

pdf = fitz.open()#创建一个空的PDF文件

pdf.insert_pdf(pdf0,to_page =3) # first 4 pages

pdf.save(r'C:\Users\L\Desktop\顺财福寿.pdf')

print("保留前4页的 PDF files have been merged successfully.")

继续操作,可以得到前4页的PDF。








#删除前边多余页的操作

pdf0 = fitz.open(r'C:\Users\L\Desktop\顺财福寿上上签平安健康八方来财一帆风顺.pdf')

pdf = fitz.open()#创建一个空的PDF文件

pdf.insert_pdf(pdf0,from_page =len(pdf0)-3) # last 3 pages

pdf.save(r'C:\Users\L\Desktop\平安健康八方来财一帆风顺.pdf')

print("保留后3页的 PDF files have been merged successfully.")

同样,我们也可以对原始PDF文档进行仅保留后3页的操作。








#删除前边多余页的操作

pdf0 = fitz.open(r'C:\Users\L\Desktop\顺财福寿上上签.pdf')

pdf = fitz.open()#创建一个空的PDF文件

pdf.insert_pdf(pdf0,from_page =len(pdf0)-3) # last 3 pages

pdf.save(r'C:\Users\L\Desktop\上上签.pdf')

print("保留后3页的 PDF files have been merged successfully.")

或者对中间过程保存的文档,进行仅保留后3页的操作。








#合并多个PDF文档的操作

pdf1 = fitz.open(r'C:\Users\L\Desktop\顺财福寿.pdf')

pdf2 = fitz.open(r'C:\Users\L\Desktop\上上签.pdf')

pdf3 = fitz.open(r'C:\Users\L\Desktop\平安健康八方来财一帆风顺.pdf')

pdf4 = fitz.open(r'C:\Users\L\Desktop\俺的电子车票.pdf')

# 输入的 PDF 文件列表

pdf_files = [pdf1, pdf2, pdf3, pdf4]

# 创建一个新的PDF文档对象

new_pdf = fitz.open()

# 遍历每个PDF文件,并插入到新文档中

for file in pdf_files:

    # 打开每个PDF文件

    pdf_to_insert = fitz.open(file)

    # 插入PDF的每一页到新文档中

    new_pdf.insert_pdf(pdf_to_insert)

    # 关闭已处理的PDF文件

    pdf_to_insert.close()

# 保存合并后的PDF文件

new_pdf.save(r'C:\Users\L\Desktop\合并多个PDF.pdf')

new_pdf.close()  # 关闭文档对象以释放资源

print("多个合并的 PDF files have been merged successfully.")

可以得到合并的PDF文档。








‌什么是ofd格式文档?

OFD格式(Open Fixed-layout Document)是一种开放的固定版式文档格式,主要用于电子文档的存储和交换,特别适用于需要保持版式不变的场景,如电子发票、电子文档和电子图书等‌‌。OFD格式由工业和信息化部软件司牵头中国电子技术标准化研究院制定的国家标准,属于中国的自主格式,旨在打破政府部门和党委机关电子公文格式不统一的问题,方便电子文档的存储、读取和编辑‌。

OFD格式的特点

一、版式固定‌:OFD格式能够确保文档的版式在不同的阅读器和设备上保持不变‌。

‌二、文件压缩‌:OFD文件通常具有较好的压缩率,便于存储和传输‌。

‌三、安全性‌:支持数字签名和加密,保证文档的安全性和完整性‌。

四、可扩展性‌:支持文档的注释、标记等交互功能,并允许用户自定义扩展新的功能与特性‌。

五、多层次结构‌:支持多种内容的嵌套与组织,能够包含文本、图像、音频、视频等多媒体元素‌。

‌六、高度安全性‌:采用数字签名和加密技术,防止文档被篡改或信息泄露‌。

OFD格式的应用场景

OFD格式广泛应用于需要保持版式不变的场景,如电子发票、电子文档和电子图书等。由于其开放性和安全性,OFD格式在政府和企业中逐渐得到应用,特别是在电子公文和财务文档的处理中‌。






自2024年11月1日起,全国铁路客运领域正式推广使用全面数字化的电子发票,标志着纸质火车票将逐步退出历史舞台,‌铁路电子客票采用OFD格式的。新年假期,坐火车、动车、高铁春运或旅游过年的同志们可能都见过了这种格式。

‌铁路电子客票采用OFD格式的主要原因包括技术优势和政策推动。‌

首先,从技术角度来看,OFD格式具有较高的安全性和数据处理能力。OFD全称为“开放版式文档”(Open Fixed-layout Document),是中国自主研发的电子文档标准。相比国际上广泛使用的PDF格式,OFD在安全性、兼容性和数据处理能力上具有优势‌。OFD格式的文件带有数字签名,确保文件的来源合法、真实可靠和未被篡改,这对于财务报销和入账非常重要‌。

其次,政府层面也在积极推广包括OFD在内的本土化技术应用,以减少对外部系统的依赖。采用国产标准有利于推动我国信息技术产业的发展,增强自主可控能力‌。

然而,OFD格式的普及度相对较低,许多用户在操作过程中遇到不便,如无法直接打开或打印等问题。尽管如此,用户可以通过个人所得税APP实现PDF格式的电子发票下载功能,或者使用支持OFD格式的文档阅读器来解决这些问题‌。

那么我们今天介绍一种用Python阅读、转换、合并‌OFD格式铁路电子客票的方法。比如,我们有下面一张电子车票:








用Python阅读、转换、合并‌OFD格式文档

处理OFD格式文档(中国国家标准文档格式)在Python中相对较为复杂,因为Python标准库中没有直接支持OFD格式的模块。但是,你可以使用一些第三方库来实现这一功能。

1. 安装必要的库

首先,你需要安装一些库来处理OFD文件。一个常用的库是openfd,这是一个专门用来处理OFD文件的库。你可以通过pip安装它:

#pip install openfd

from openfd import OFDDocument

# 加载OFD文件

ofd0 = OFDDocument.load(r'C:\Users\L\Desktop\俺的电子车票.pdf')

#转换OFD文档内容

text_content = ofd0.text_content()

print(text_content)








或者自定义一个函数,来将ofd_to_pdf

#电子车票的ofd格式文件的读取与处理

#ofd_to_pdf

def ofd_to_pdf(file_path):

    doc=fitz.open(file_path)

    pdf_bytes = doc.convert_to_pdf()

    with open(file_path[:-4] + ".pdf","wb")as f:

        f.write(pdf_bytes)

ofd_to_pdf(r"C:\Users\L\Desktop\俺的电子车票.ofd")

然后我们可以得到PDF格式的电子车票,通过上述PDF操作过程,整理成可以存储的报销文件的PDF电子文档:








同样我们也可以通过自定义函数的方式,来实现pdf_to_ofd的转换

import fitz  # PyMuPDF

#pdf_to_ofd

def pdf_to_ofd(file_path):

    doc = fitz.open(file_path)

    ofd_bytes = doc.convert_to_ofd()

    with open(file_path[:-4] + ".ofd","wb")as f:

        f.write(ofd_bytes)

pdf_to_ofd(r"C:\Users\L\Desktop\俺的电子车票.pdf")




医学统计数据分析
分享交流SPSS、R语言、Python、ArcGis、Geoda、GraphPad、数据分析图表制作等心得。承接数据分析,论文修回,医学统计,空间分析,问卷分析业务。若有投稿和数据分析代做需求,可以直接联系我,谢谢!
 最新文章