PyMuPDF创建PDF、拆分PDF

6 篇文章 16 订阅 ¥9.90 ¥99.00

一、本章前言

在本章中将对以下内容进行详细讲解:

  1. 使用PyMuPDF创建PDF文档
    复制功能代码,看第一部分;
    学习每步逻辑,看第二部分。
  2. 使用PyMuPDF拆分PDF文档
    复制功能代码,看第一部分;
    学习每步逻辑,看第二部分。

需要注意一下版本信息哈,不然后面的代码可能会出错,尤其是PyMuPDF,需要python的版本在3.8以上。

软件版本
Spyder5.4.3
Python3.10.13
PyMuPDF1.23.8

二、使用PyMuPDF创建PDF文档

使用PyMuPDF创建PDF文档是一个相对简单的过程。下面是一个详细的步骤指南,帮助你了解如何使用PyMuPDF库来创建PDF文档:

1、实例代码

import fitz  # PyMuPDF

# 创建一个新的PDF文档对象
doc = fitz.Document()

# 如果文档中没有页面的话,添加一个新页面并获取它
if doc.page_count == 0:
    doc.new_page()
page = doc[0]  # 获取第一页(也是唯一的一页)

# 在页面上插入一个包含文本的文本框
rect = fitz.Rect(50, 50, 200, 100)  # 定义文本框的位置和大小(x1, y1, x2, y2)
text_instances = page.insert_textbox(rect, "这是我创建的第一个PDF文档!", fontname="helv", fontsize=12)

# 保存文档到文件系统中
doc.save("E:\\UserData\\Desktop\\new.pdf")  # 将文档保存为new.pdf文件

代码执行效果截图
在这里插入图片描述

2、过程详解

①. 安装PyMuPDF

首先,在确保你的Python版本在3.8以上的基础上,通过下面的命令,可以对PyMuPDF进行安装:

pip install PyMuPDF

安装过程注意事项
如果通过默认源进行安装,可能会出现速度较慢的情况,我们可以通过下面的方法解决:

pip install PyMuPDF -i https://pypi.tuna.tsinghua.edu.cn/simple/

在上面的命令中,-i 参数指定了使用清华大学的PyPI镜像源(https://pypi.tuna.tsinghua.edu.cn/simple/)来下载并安装PyMuPDF包。没有深究过,我猜i大概就是 interface的首字母吧。

除了清华源,pip还有其他的国内源可供选择,例如:
阿里源:http://mirrors.aliyun.com/pypi/simple/
豆瓣源:http://pypi.douban.com/simple/
中国科学技术大学源:https://pypi.mirrors.ustc.edu.cn/simple/
华中科技大学源:http://pypi.hustunique.com/

②. 导入PyMuPDF模块

通过下面的方式导入PyMuPDF模块:

import fitz  # PyMuPDF

注意:PyMuPDF通常被称为fitz,这是对其底层库MuPDF的致敬。
在这里插入图片描述

③. 创建一个新的PDF文档

我们可以使用fitz.open()函数创建一个新的PDF文档。这个函数通常用于打开现有的PDF文件,但如果当你传递一个不存在的文件路径或一个文件对象时,它会创建一个新的PDF文档。

但更常见并且更为推荐的一种做法是直接使用fitz.Document()来显式地创建一个新文档。

doc = fitz.Document()  # 创建一个空的PDF文档

④. 添加页面和内容

接下来我们向文档中添加页面和内容。我们可以使用Document.new_page()方法来添加一个新页面,然后使用Page.insert_textbox()或其他绘图方法来添加文本、图像或者其他的内容。不过,new_page方法通常不需要直接调用,因为当我们首次向文档添加内容时,它会自动创建一个新页面。

举一个简单的,向第一页添加文本:

# 如果文档中没有页面的话,就添加一个新页面
if doc.page_count == 0:
    doc.new_page()

# 通过doc[0]获取第一页
page = doc[0]

# 创建一个文本框并添加文本
rect = fitz.Rect(50, 50, 200, 100)  # 定义文本框的位置和大小(x1, y1, x2, y2)
text_instances = page.insert_textbox(rect, "这是我创建的第一个PDF文档!", fontname="helv", fontsize=12)

⑤. 保存文档

最后,使用Document.save()方法将你的更改保存到文件中:

doc.save("E:\\UserData\\Desktop\\new.pdf")  # 将文档保存为new.pdf文件

三、使用PyMuPDF拆分PDF文档

1、实例代码

# -*- coding: utf-8 -*-
"""
Created on Wed Jan  3 11:04:40 2024

@author: 85401
"""

# 导入PyMuPDF库
import fitz    
    
# 定义一个名为split_pdf的函数,设置两个参数:
# source_filepath(我们要处理的PDF文件的路径)和 output_folder(分割以后输出文件夹的路径)
def split_pdf(source_filepath, output_folder):
    # 使用fitz.open方法打开源PDF文件,并将其对象赋值给source_pdf变量
    source_pdf = fitz.open(source_filepath)
   
    # 遍历source_pdf中的每一页,page_number从0开始计数  
    for page_number in range(source_pdf.page_count):
        
        # 创建一个新的PDF文档对象output_pdf  
        output_pdf = fitz.open()    
   
        # 使用insert_pdf方法将源PDF文件的指定页面插入到新PDF文档中 
        # from_page=page_number, to_page=page_number 的意思是:
        # 我只要 source_pdf 的 第 page_number 页。
        output_pdf.insert_pdf(source_pdf, from_page=page_number, to_page=page_number)    
  
        # 构建输出文件的路径和名称,格式为"输出文件夹路径/page_{页码号}.pdf"  
        output_filename = f"{output_folder}/page_{page_number + 1}.pdf"    
    
        # 保存新PDF文档到指定的输出文件路径  
        output_pdf.save(output_filename)    
          
        # 关闭新创建的PDF文档,释放资源 
        output_pdf.close()    
         
    # 关闭源PDF文件,释放资源  
    source_pdf.close()    
    
# 指定输入文件的路径为桌面上的一个PDF文件  
input_file = "E:\\UserData\\Desktop\\三级笔译考试大纲.pdf"  
# 指定输出文件夹的路径为桌面上的一个文件夹  
output_folder = "E:\\UserData\\Desktop\\PDF"  
# 调用split_pdf函数,传入输入文件和输出文件夹的路径,开始执行PDF分割操作  
split_pdf(input_file, output_folder)

分割效果图
在这里插入图片描述

2、过程解析

当然可以。以下是对您提供的代码的深度解析,分章分节进行详细讲解:

①. 导入模块

import fitz  # 导入PyMuPDF库

②. 定义函数

def split_pdf(source_filepath, output_folder):
    # ...(函数体)

解析

  • 定义了一个名为split_pdf的函数,该函数接受两个参数。
  • source_filepath(我们要处理的PDF文件的路径)
  • output_folder(输出文件夹的路径)。
  • 这个函数目的在于将源PDF文件的每一页分割成单独的PDF文件,并保存到指定的输出文件夹中。

③. 打开源PDF文件

source_pdf = fitz.open(source_filepath)  # 使用fitz.open方法打开源PDF文件

解析

  • source_pdf = fitz.open(source_filepath):这行代码使用fitz.open方法打开了指定路径下的源PDF文件,并将返回的文件对象赋值给变量source_pdf

④. 遍历页面并分割PDF

for page_number in range(source_pdf.page_count):  # 遍历每一页
    output_pdf = fitz.open()  # 创建一个新的PDF文档对象
    output_pdf.insert_pdf(source_pdf, from_page=page_number, to_page=page_number)  # 
    # ...(其他代码)

解析

  • for page_number in range(source_pdf.page_count)::使用for循环遍历源PDF文件中的每一页。range(source_pdf.page_count)生成一个从0到source_pdf.page_count - 1的整数序列,代表PDF文件中的每一页的页码。

  • output_pdf = fitz.open():在每次循环中,都创建一个新的空白PDF文档对象,并赋值给变量output_pdf。这个新文档将用于保存从源PDF文件中提取的单个页面。

  • output_pdf.insert_pdf(source_pdf, from_page=page_number, to_page=page_number):这行代码是将源PDF文件中的指定页面插入到新创建的PDF文档中。

⑤. 保存和关闭文件

output_filename = f"{output_folder}/page_{page_number + 1}.pdf"  # 构建输出文件名
output_pdf.save(output_filename)  # 保存新PDF文件到指定位置
output_pdf.close()  # 关闭新PDF文件
source_pdf.close()  # 关闭源PDF文件(这行代码位置有误)

解析

  • output_filename = f"{output_folder}/page_{page_number + 1}.pdf":使用格式化字符串构建输出文件的路径和名称。文件名以“page_{页码号}.pdf”的格式命名,其中页码号从1开始计数。

  • output_pdf.save(output_filename):将新创建的包含单个页面的PDF文档保存到指定的输出文件路径中。这样,每个页面都会被保存为一个单独的PDF文件。

  • output_pdf.close():关闭新创建的PDF文档对象,释放与之关联的资源。

  • source_pdf.close():关闭源PDF文件对象,释放与之关联的资源。

⑥. 调用函数并执行分割操作

input_file = "E:\\UserData\\Desktop\\三级笔译考试大纲.pdf"  # 指定输入文件的路径为桌面上的一个PDF文件
output_folder = "E:\\UserData\\Desktop\\PDF"  # 指定输出文件夹的路径为桌面上的一个文件夹
split_pdf(input_file, output_folder)  # 调用split_pdf函数,传入输入文件和输出文件夹的路径,开始执行PDF分割操作

解析

  • input_file = "E:\\UserData\\Desktop\\三级笔译考试大纲.pdf"output_folder = "E:\\UserData\\Desktop\\PDF":分别指定了输入文件的路径和输出文件夹的路径。

  • split_pdf(input_file, output_folder):传入参数并调用之前定义的split_pdf函数。

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 创建自己的付费专栏需要很多步骤。首先,你需要有一个想法,一个主题,你想要写的内容。其次,你需要找到一个发表你的内容的平台,例如WordPress或Medium。最后,你需要定义你的付费模式,比如每月固定费用或每次访问收费。 ### 回答2: 创建自己的付费专栏最重要的是要有一个具有吸引力和独特性的主题。首先,你需要选择一个你擅长或感兴趣的领域,比如科技、教育、运动、旅行等等。确保这个领域有足够的受众和市场需求。 然后,你需要准备充足的内容。这可能包括文章、视频、音频等。确保你的内容是有用的、有深度的,同时要有一定的独特性和创新性。可以与自己的经验和知识结合,或是通过采访专家、调查研究等方式获取更多的信息。 接下来,选择一个适合的平台来发布你的付费专栏。有一些平台,比如知乎、简书、微信公众号等等,提供了付费专栏的功能。你可以根据自己的需求和目标选择一个最适合的平台。确保你对该平台的规则和要求有清晰的了解,并且可以提供给你足够的自由度和收益。 在创建专栏时,你还要考虑到如何吸引用户并提升用户体验。你可以通过提供免费的预览内容来吸引用户,同时要为付费用户提供特别的待遇,比如额外的优惠、独家内容或是与作者的互动等。此外,你还可以定期更新内容,与读者建立互动,回答他们的问题或是提供额外的学习资源。 最后,宣传和推广也是非常重要的。你可以通过社交媒体、个人网站、邮件列表等方式宣传你的付费专栏,吸引更多的读者。此外,与其他相关领域的知名人士或专家合作,进行联合宣传也是一个不错的选择。 总之,创建自己的付费专栏需要找到一个独特的主题,准备充足的内容,选择合适的平台,提升用户体验,并进行有效的宣传和推广。这需要投入时间和精力,但当你建立起稳定的读者群体和可持续的收益时,你将获得满足感和经济回报。 ### 回答3: 创建一个付费专栏需要经过以下步骤: 第一步,确定专栏内容:你需要明确你要开设的专栏的主题和内容。选择一个你擅长或者对该领域有独特见解的主题,这样才能吸引读者。确保你的专栏内容有一定的独特性和价值,这样读者才会愿意为之付费。 第二步,选择合适的平台:寻找和选择合适的平台来承载你的付费专栏。有一些平台专门提供付费专栏服务,例如知乎Live、微信公众号等。你也可以选择自行搭建专栏网站或者使用其他内容创作平台。 第三步,制定付费模式:确定你的付费模式,包括订阅制、按次收费等。找到适合你的模式,并确定合理的价格,你可以参考类似内容的竞争对手的定价情况。 第四步,推广和营销:利用不同的渠道进行推广和营销,吸引更多的读者。可以通过社交媒体、电子邮件、朋友推荐等方式来宣传你的付费专栏。同时,你也可以提供一些免费的试读内容或者优惠活动来吸引用户的关注。 第五步,持续优化:一旦开始运营付费专栏,你需要保持内容的稳定更新,并持续与读者互动和沟通。客观收集读者的反馈意见,根据读者的需求和喜好进行调整和改进,从而提高专栏的质量。 总之,创建自己的付费专栏需要良好的内容质量、合适的平台选择、恰当的付费模式,以及有效的宣传推广和持续优化。通过不断努力和积累,将来可以收获更多的读者和经济回报。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

布啦啦李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值