Python批处理PDF文件,PDF附件轻松批量提取

PDF附件是指在PDF文档中嵌入的其他文件,如图像、表格、音频、视频或其他文档。这些附件可以与PDF文档一起存储、传输和共享,为文档提供了更丰富的内容和更多的功能。通过添加附件,我们可以将相关文件和信息捆绑在一起,使其更易于管理和共享。此外,PDF附件还可以用于在文档中引用外部资源,提供更全面的参考资料和支持材料。然而,处理大量的PDF附件可能会很繁琐且费时费力。通过利用Python程序,我们可以轻松地批量处理这些附件,极大地提高工作效率。本文将介绍如何通过Python轻松批量提取并保存PDF附件插入附件到PDF文档中以及删除PDF文件中的附件

文章目录

    • 使用Python批量提取PDF附件
    • 使用Python轻松插入附件到PDF
    • 使用Python批量删除PDF附件

本文所介绍的方法需要用到Spire.PDF for Python,可从官网下载或通过PyPI安装:

pip install Spire.PDF

使用Python批量提取PDF附件

提取PDF文档中的附件主要用到的是PdfDocument.Attachments属性和 PdfAttachment.Data.Save() 方法。PdfDocument.Attachments属性可以获取一个PDF文档中的所有附件并返回一个附件集合,而PdfAttachment.Data.Save()方法则可以将指定附件保存到指定文件夹。详细操作步骤如下:

  1. 指定输入文件夹和输出文件夹的路径。
  2. 获取输入文件夹中以".pdf"结尾的PDF文件列表。
pdfFiles = [f for f in os.listdir(inputFolder) if f.endswith(".pdf")]
  1. 遍历每个PDF文件。
  2. 创建PdfDocument类的对象,并使用PdfDocument.LoadFromFile()再入PDF文件。
document = PdfDocument()
document.LoadFromFile(filePath)
  1. 获取PDF文件的附件列表。
attachments = document.Attachments
  1. 判断附件列表是否为空,如果有附件,则构建储存附件的文件夹。
  2. 遍历附件列表,获取附件对象,并将附件保存到指定路径。
attachment = attachments.get_Item(i)
attachmentPath = os.path.join(outputFolderPath, attachment.FileName)
attachment.Data.Save(attachmentPath)
  1. 关闭PDF文件。

完整代码示例:

import os
from spire.pdf import *
from spire.pdf.common import *# 指定输入文件夹和输出文件夹的路径
inputFolder = "文档/PDF"
outputFolder = "文档/附件"# 获取输入文件夹中以".pdf"结尾的PDF文件列表
pdfFiles = [f for f in os.listdir(inputFolder) if f.endswith(".pdf")]# 遍历每个PDF文件
for fileName in pdfFiles:# 构建PDF文件的完整路径filePath = os.path.join(inputFolder, fileName)# 创建PdfDocument对象并加载PDF文件document = PdfDocument()document.LoadFromFile(filePath)# 获取PDF文件的附件列表attachments = document.Attachments# 如果附件存在if attachments:# 获取PDF文件名(不包含扩展名)fileNameWithoutExt = os.path.splitext(fileName)[0]# 构建输出文件夹路径outputFolderPath = os.path.join(outputFolder, fileNameWithoutExt)# 创建输出文件夹os.makedirs(outputFolderPath, exist_ok=True)# 遍历附件列表for i in range(attachments.Count):# 获取附件对象attachment = attachments.get_Item(i)# 构建附件保存路径attachmentPath = os.path.join(outputFolderPath, attachment.FileName)# 保存附件到指定路径attachment.Data.Save(attachmentPath)# 关闭PDF文档document.Close()

用于提取附件的PDF文件:
Python提取PDF附件

提取结果:
Python提取PDF附件

使用Python轻松插入附件到PDF

通过创建PdfAttachment类的实例即可创建PDF附件,并对附件相关信息进行设置,如描述和修改日期。在创建好附件后,使用PdfDocument.Attachments.Add()方法即可将附件添加到PDF文件中。附件还可以与PDF注释结合,实现从页面上跳转到指定附件。一下步骤是添加附件的简单示例:

  1. 创建PdfDocument类的对象并再入PDF文档。
document = PdfDocument()
document.LoadFromFile(pdfPath)
  1. 创建PdfAttachment类的对象,并设置附件描述和修改日期。
attachment = PdfAttachment(attachmentPath)
attachment.Description = "参会人员名单"
attachment.ModificationDate = DateTime.get_Now()
  1. 将附件添加到PDF文件中。
document.Attachments.Add(attachment)
  1. 保存并关闭PDF文件。
document.SaveToFile("output/添加附件.pdf")
document.Close()

完整代码示例:

from spire.pdf import *
from spire.pdf.common import *# 定义PDF文件路径和附件路径
pdfPath = "文档/示例5.pdf"
attachmentPath = "示例/名单.txt"# 创建PdfDocument对象并加载PDF文件
document = PdfDocument()
document.LoadFromFile(pdfPath)# 创建PdfAttachment对象
attachment = PdfAttachment(attachmentPath)# 设置附件的描述信息和修改日期
attachment.Description = "参会人员名单"
attachment.ModificationDate = DateTime.get_Now()# 将附件添加到PDF文档中
document.Attachments.Add(attachment)# 保存PDF文档到指定路径
document.SaveToFile("output/添加附件.pdf")# 关闭PDF文档
document.Close()

添加效果:
Python添加附件到PDF

使用Python批量删除PDF附件

删除PDF文件中的附件则比较简单,直接使用PdfDocument.Attachments属性获取一个PDF文件中的附件,然后再删除指定的附件或所有附件即可。一下是操作步骤:

  1. 创建PdfDocument类的对象并再入PDF文档。
document = PdfDocument()
document.LoadFromFile(pdfPath)
  1. 获取PDF文件中的附件集合。
document.Attachments
  1. 删除指定附件。
attachments.RemoveAt(0)
  1. 或删除所有附件。
attachments.Clear()
  1. 保存并关闭PDF文件。
document.SaveToFile("output/删除附件.pdf")
document.Close()

完整代码示例:

from spire.pdf import *
from spire.pdf.common import *# 定义PDF文件路径
pdfPath = "文档/示例5.pdf"# 创建PdfDocument对象并加载PDF文件
document = PdfDocument()
document.LoadFromFile(pdfPath)# 获取PDF文件的附件集合
attachments = document.Attachments# 删除指定附件
attachments.RemoveAt(0)# 删除所有附件
attachments.Clear()# 保存并关闭PDF文件
document.SaveToFile("output/删除附件.pdf")
document.Close()

以上是关于如何利用Python在PDF文件中添加、提取及删除附件的方法介绍。Spire.PDF for Python还支持许多其他功能,请前往Spire.PDF for Python教程了解更多。

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

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

相关文章

Verilog 入门(五)数据流模型化

文章目录 连续赋值语句时延 连续赋值用于数据流行为建模;相反,过程赋值用于顺序行为建模。组合逻辑电路的行为最好使用连续赋值语句建模。 连续赋值语句 连续赋值语句将值赋给线网(连续赋值不能为寄存器赋值),它的格式…

Linux 只能收到 SYN 包 不能回包

如果用户发现云主机不能登录,例如无法远程 22 端口或其他端口,但是更换网络环境正常,服务端抓包发现客户端发包只有 SYN,没有回包,可以执行 netstat -s |grep rejec 查看下是否是 tcp_timestamps 的问题 [roothfgo2 ~…

Java的53个关键字分类及详细说明(包含3个特殊直接量+2个保留字)

文章目录 关键字,特殊直接量,保留字关键字的详细用法说明(1)访问控制类关键字(2)修饰符类关键字(3)程序控制类关键字(4)错误处理类关键字(5)包相关…

Python+Requests模拟发送GET请求

模拟发送GET请求 前置条件:导入requests库 一、发送不带参数的get请求 代码如下: 以百度首页为例 import requests# 发送get请求 response requests.get(url"http://www.baidu.com") print(response.content.decode("utf-8"))…

Drift plus penalty 漂移加惩罚Part2——性能分析

文章目录 正文Performance analysisAverage penalty analysis 平均惩罚分析Average queue size analysis 平均队列大小分析Probability 1 convergenceApplication to queues with finite capacityTreatment of queueing systemsConvex functions of time averages Delay tradeo…

SSR是什么?Vue中怎么实现?

一、是什么 概念 SSR是指服务器端渲染(Server-Side Rendering),是一种将客户端和服务器端合并的 Web 应用程序渲染技术。在 SSR 中,应用程序的 UI 在服务器端渲染完成后,再将整个渲染好的 HTML、CSS 和 JavaScript 发…

西南科技大学信号与系统A课程设计报告(信号卷积与应用)

一、设计任务 编制MATLAB程序,实现任意两输入信号的卷积和运算,并正确显示输入信号、输出信号的波形。(程序文件名:ConvSum_本人姓名首拼小写.m,本程序不允许使用conv函数)输入信号x为频率0.1 Hz和0.3 Hz的等幅正弦波之和,利用fir1函数设计滤波器h,去除0.3 Hz的正弦信号…

Vue 3.0 组合式API Setup

文章目录 前言参数Props上下文访问组件的 property结合模板使用使用渲染函数使用 this后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:vue.js 🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不…

使用WalletConnect Web3Modal v3 链接钱包基础教程

我使用的是vueethers 官方文档:WalletConnect 1.安装 yarn add web3modal/ethers ethers 或者 npm install web3modal/ethers ethers2.引用 新建一个js文件,在main.js中引入,初始化配置sdk import {createWeb3Modal,defaultConfig, } from…

CMMI认证含金量高吗

一、CMMI认证含金量解答 CMMI,即能力成熟度模型集成,是由美国卡内基梅隆大学软件工程研究所开发的一种评估企业软件开发过程成熟度的模型。CMMI认证的含金量究竟高不高呢?答案是肯定的。CMMI认证被誉为软件开发行业的“金牌标准”&#xff0…

【算法】合并K个升序链表

这道题主要考察的是归并排序,因为已经升序过了,更好理解了。 当然也可以采用分治的思路;或采用最小堆的思路;面试中校招同学写出一种即可,如果能全概览讲一下,就更加分了。 #############################…

力扣题:字符的统计-12.2

力扣题-12.2 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:423. 从英文中重建数字 解题思想:有的单词通过一个字母就可以确定,依次确定即可 class Solution(object):def originalDigits(self, s):""":typ…

okhttp系列-拦截器的执行顺序

1.将拦截器添加到ArrayList final class RealCall implements Call {Response getResponseWithInterceptorChain() throws IOException {//将Interceptor添加到ArrayListList<Interceptor> interceptors new ArrayList<>();interceptors.addAll(client.intercept…

03-IDEA集成Git,初始化本地库,添加远程仓库,提交,拉取,推送,分支的快捷操作

IDEA集成Git 创建Git忽略文件 不同的IDE开发工具有不同的特点文件,这些文件与项目的实际功能无关且不参与服务器上的部署运行, 把它们忽略掉能够屏蔽之间的差异 局部忽略配置文件: 在本地仓库的根目录即项目根目录下直接创建.gitignore文件, 以文件后缀或目录名的方式忽略指定…

双远心镜头:让视觉检测更精准、高效!

工业镜头是视觉系统中的重要组件&#xff0c;工业镜头的选型影响着整个系统的成像效果。在做视觉检测时&#xff0c;会遇到无法检测空间物体、无法控制视场变化、无法控制图像扭曲、对比度低、畸变大、反光等问题&#xff0c;这时普通的工业镜头并不能有效地解决问题&#xff0…

校园门禁可视化系统解决方案

随着科技的持续进步&#xff0c;数字化校园在教育领域中的地位日益上升&#xff0c;各种智能门禁、安防摄像头等已遍布校园各个地方&#xff0c;为师生提供安全便捷的通行体验。然而数据收集分散、缺乏管理、分析困难等问题也逐渐出现&#xff0c;在这个数字化环境中&#xff0…

《opencv实用探索·六》简单理解图像膨胀

1、图像膨胀原理简单理解 膨胀是形态学最基本的操作&#xff0c;都是针对白色部分&#xff08;高亮部分&#xff09;而言的。膨胀就是使图像中高亮部分扩张&#xff0c;效果图拥有比原图更大的高亮区域。 2、图像膨胀的作用 注意一般情况下图像膨胀和腐蚀是联合使用的。 &…

scrapy介绍,并创建第一个项目

一、scrapy简介 scrapy的概念 Scrapy是一个Python编写的开源网络爬虫框架。它是一个被设计用于爬取网络数据、提取结构性数据的框架。 Scrapy 使用了Twisted异步网络框架&#xff0c;可以加快我们的下载速度。 Scrapy文档地址&#xff1a;http://scrapy-chs.readthedocs.io/z…

【.net core 7】新建net core web api并引入日志、处理请求跨域以及发布

效果图&#xff1a; 1.新建.net core web api项目 选择src文件夹》添加》新建项目 输入框搜索&#xff1a;web api 》选择ASP.NET Core Web API 输入项目名称、选择位置为项目的 src文件夹下 我的项目是net 7.0版本&#xff0c;实际选择请看自己的项目规划 2.处理Progr…

基于SpringBoot自定义线程池实现多线程执行方法,以及多线程之间的协调和同步

前言 在服务端开发中&#xff0c;多线程开发是非常重要的。因为多线程可以同时处理多个请求&#xff0c;从而提高应用程序的性能&#xff0c;大大改善用户体验。 一、先来了解三个问题 1.在SpringBoot项目中为啥需要自定义线程池&#xff1f; &#xff08;1&#xff09;在S…