PDF与PDF/A的区别及如何使用Python实现它们之间的相互转换

目录

概述

PDF/A 是什么?与 PDF 有何不同?

用于实现 PDF 与 PDF/A 相互转换的 Python 库

Python 实现 PDF 转 PDF/A

将 PDF 转换为 PDF/A-1a

将 PDF 转换为 PDF/A-1b

将 PDF 转换为 PDF/A-2a

将 PDF 转换为 PDF/A-2b

将 PDF 转换为 PDF/A-3a

将 PDF 转换为 PDF/A-3b

Python 实现 PDF/A 转 PDF

Python 判断 PDF 是否是 PDF/A格式


概述

本文将详细介绍 PDF 与 PDF/A 的区别,并提供在 Python 中实现 PDF 与 PDF/A 相互转换的具体方法。同时,还将探讨如何在 Python 中判断 PDF文档是否是 PDF/A 格式并获取其具体的合规级别。

  • PDF/A 是什么?与 PDF 有何不同?
  • 用于实现PDF 与 PDF/A相互转换的 Python 库
  • Python 实现 PDF 转 PDF/A
  • Python 实现 PDF/A 转 PDF
  • Python 判断 PDF 是否是 PDF/A格式

PDF/A 是什么?与 PDF 有何不同?

PDF/A 是一种专为电子文档的长期存档和保存设计的 PDF 格式。与常规 PDF 不同,PDF/A 对某些功能进行了限制,确保文档不依赖外部资源,即使在未来的技术环境中也能被完整再现。这种格式的主要特点包括:

  1. 禁止外部内容依赖
    PDF/A 不允许链接外部资源,如字体、音频、视频或加密数据。这确保了文档的所有内容完全嵌入文件内部,避免因外部资源丢失或变化而导致内容显示异常。
  2. 嵌入必要信息
    文档所需的字体、颜色配置文件等都会被嵌入文件中,从而确保无论在任何设备或软件中打开,都能准确呈现原始内容。

简而言之,PDF/A 是一种确保文档内容完整性的标准,特别适合用于长期保存和存档。常规 PDF 则更适合日常的共享、打印或编辑,但在内容长期保存和兼容性方面可能存在不确定性。

用于实现 PDF 与 PDF/A 相互转换的 Python 库

在Python中,可以使用 Spire.PDF for Python 库来实现 PDF 和 PDF/A 格式之间的转换。该库提供了丰富的功能,可在 Python 应用中创建、读取、编辑和转换 PDF 文档。

安装方法

在使用前,需要通过以下命令安装 Spire.PDF for Python:

pip install Spire.Pdf

Python 实现 PDF 转 PDF/A

将 PDF 转换为 PDF/A只需要以下两个步骤:

  1. 打开 PDF 文档:使用 PdfStandardsConverter 类打开需要转换的 PDF 文件。
  2. 转换为所需的 PDF/A 格式:选择 PdfStandardsConverter 类的适当方法,将文档转换为特定的 PDF/A 格式。

实现代码

以下是将 PDF 文档转换为不同 PDF/A 格式的实现代码。

将 PDF 转换为 PDF/A-1a

from spire.pdf.common import *
from spire.pdf import *# 打开 PDF 文件
converter = PdfStandardsConverter("测试.pdf")# 转换为 PDF/A-1a
converter.ToPdfA1A("PdfA1a.pdf")
converter.Dispose()

将 PDF 转换为 PDF/A-1b

from spire.pdf.common import *
from spire.pdf import *converter = PdfStandardsConverter("测试.pdf")
# 转换为 PDF/A-1b
converter.ToPdfA1B("PdfA1b.pdf")
converter.Dispose()

将 PDF 转换为 PDF/A-2a

from spire.pdf.common import *
from spire.pdf import *# 打开 PDF 文件
converter = PdfStandardsConverter("测试.pdf")
# 转换为 PDF/A-2a
converter.ToPdfA2A("PdfA2a.pdf")
converter.Dispose()

将 PDF 转换为 PDF/A-2b

from spire.pdf.common import *
from spire.pdf import *# 打开 PDF 文件
converter = PdfStandardsConverter("测试.pdf")
# 转换为 PDF/A-2b
converter.ToPdfA2B("PdfA2b.pdf")
converter.Dispose()

将 PDF 转换为 PDF/A-3a

from spire.pdf.common import *
from spire.pdf import *# 打开 PDF 文件
converter = PdfStandardsConverter("测试.pdf")
# 转换为 PDF/A-3a
converter.ToPdfA3A("PdfA3a.pdf")
converter.Dispose()

将 PDF 转换为 PDF/A-3b

from spire.pdf.common import *
from spire.pdf import *# 打开 PDF 文件
converter = PdfStandardsConverter("测试.pdf")
# 转换为 PDF/A-3b
converter.ToPdfA3B("PdfA3b.pdf")
converter.Dispose()

转换后的 PDF/A 文档均可在 Adobe Acrobat 中成功通过PDF/A规范验证,如下图所示:

Python PDF转PDF/A

Python 实现 PDF/A 转 PDF

虽然 PDF/A 是存档的理想格式,但有时还是需要将文档还原为常规 PDF,以便进行编辑、添加交互元素或加密等操作。

以下是将 PDF/A 转换为常规 PDF的实现代码:

from spire.pdf.common import *
from spire.pdf import *# 加载 PDF/A 文档
pdf = PdfDocument("PdfA1A.pdf")# 创建常规 PDF 文档
new_pdf = PdfNewDocument()
new_pdf.CompressionLevel = PdfCompressionLevel.none# 遍历 PDF/A 的每一页
for i in range(pdf.Pages.Count):page = pdf.Pages.get_Item(i)size = page.Size# 添加空白页面new_page = new_pdf.Pages.Add(size, PdfMargins(0.0))# 将原始页面内容复制到新页面page.CreateTemplate().Draw(new_page, 0.0, 0.0)# 保存为常规 PDF
new_pdf.SaveToFile("常规PDF.pdf")
new_pdf.Close(True)

Python 判断 PDF 是否是 PDF/A格式

Spire.PDF 提供了 PdfDocument.Conformance 属性,用于判断 PDF 文档是否是 PDF/A 格式,此外还支持获取其具体的合规级别。如果该属性返回的是none,表示该PDF文档是常规PDF,如果返回具体级别,如Pdf_A1A,表明该PDF是PDF/A-1a格式。

以下是判断PDF是否是PDF/A格式并获取其具体级别的实现代码:

from spire.pdf.common import *
from spire.pdf import *# 打开 PDF 文档
pdf = PdfDocument("ToPdfA1A.pdf")# 获取文档的 PDF/A级别
conformance_level = pdf.Conformance
print(conformance_level.name)
pdf.Close()

Python 判断PDF是否是PDF/A格式

以上就是关于PDF与PDF/A之间的区别,以及如何使用Python实现它们之间的相互转换的全部内容。感谢阅读!

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

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

相关文章

面向对象(二)——类和对象(上)

1 类的定义 做了关于对象的很多介绍,终于进入代码编写阶段。 本节中重点介绍类和对象的基本定义,属性和方法的基本使用方式。 【示例】类的定义方式 // 每一个源文件必须有且只有一个public class,并且类名和文件名保持一致! …

【HarmonyOS】鸿蒙应用地理位置获取,地理名称获取

【HarmonyOS】鸿蒙应用地理位置获取,地理名称获取 一、前言 首先要理解地理专有名词,当我们从系统获取地理位置,一般会拿到地理坐标,是一串数字,并不是地理位置名称。例如 116.2305,33.568。 这些数字坐…

关于数据库数据国际化方案

方案一:每个表设计一个翻译表 数据库国际化的应用场景用到的比较少,主要用于对数据库的具体数据进行翻译,在需要有大量数据翻译的场景下使用,举个例子来说,力扣题目的中英文切换。参考方案可见: https://b…

「Mac畅玩鸿蒙与硬件37」UI互动应用篇14 - 随机颜色变化器

本篇将带你实现一个随机颜色变化器应用。用户点击“随机颜色”按钮后,界面背景会随机变化为淡色系颜色,同时显示当前的颜色代码,页面还会展示一只猫咪图片作为装饰,提升趣味性。 关键词 UI互动应用随机颜色生成状态管理用户交互…

跟着官方文档快速入门RAGAS

官网: Ragas Ragas(Retrieval-Augmented Generation, RAG)是一个基于简单手写提示的评估框架,通过这些提示全自动地衡量答案的准确性、 相关性和上下文相关性。这种评估方法不需要访问人工注释的数据集或参考答案,使得评估过程更…

掌握 Spring Boot 中的缓存:技术和最佳实践

缓存是一种用于将经常访问的数据临时存储在更快的存储层(通常在内存中)中的技术,以便可以更快地满足未来对该数据的请求,从而提高应用程序的性能和效率。在 Spring Boot 中,缓存是一种简单而强大的方法,可以…

我谈冈萨雷斯对频域滤波的误解——快速卷积与频域滤波之间的关系

在Rafael Gonzalez和Richard Woods所著的《数字图像处理》中,Gonzalez对频域滤波是有误解的,在频域设计滤波器不是非得图像和滤波器的尺寸相同,不是非得在频域通过乘积实现。相反,FIR滤波器设计都是构造空域脉冲响应。一般的原则是…

AI高中数学教学视频生成技术:利用通义千问、MathGPT、视频多模态大模型,语音大模型,将4个模型融合 ,生成高中数学教学视频,并给出实施方案。

大家好,我是微学AI,今天给大家介绍一下AI高中数学教学视频生成技术:利用通义千问、MathGPT、视频多模态大模型,语音大模型,将4个模型融合 ,生成高中数学教学视频,并给出实施方案。本文利用专家模…

Linux下,用ufw实现端口关闭、流量控制(二)

本文是 网安小白的端口关闭实践 的续篇。 海量报文,一手掌握,你值得拥有,让我们开始吧~ ufw 与 iptables的关系 理论介绍: ufw(Uncomplicated Firewall)是一个基于iptables的前端工具&#xf…

MySQL之数据完整性

数据的完整性约束可以分为三类: 实体完整性、域完整性和引用完整性。 说来说去(说主键,外键,以及⼀些约束) 1、实体完整性 (实体就是行) 什么是关系型数据库? 一个表代表一类事务&#xff0…

echarts的双X轴,父级居中的相关配置

前言:折腾了一个星期,在最后一天中午,都快要放弃了,后来坚持下来,才有下面结果。 这个效果就相当是复合表头,第一行是子级,第二行是父级。 子级是奇数个时,父级label居中很简单&…

配置宝塔php curl 支持http/2 发送苹果apns消息推送

由于宝塔面板默认的php编译的curl未加入http2的支持,如果服务需要使用apns推送等需要http2.0的访问就会失败,所以重新编译php让其支持http2.0 编译方法: 一、安装nghttp2 git clone https://github.com/tatsuhiro-t/nghttp2.git cd nghttp…

记录一次网关异常

记一次网关异常 网关时不时就会出现下面的异常。关键是不知道什么时候就会报错,并且有时候就算什么都不操作,也会导致这个异常。 ERROR org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler - Unexpected error occurred in schedul…

动态艺术:用Python将文字融入GIF动画

文章内容: 在数字媒体的多样化发展中,GIF动画作为一种流行的表达形式,常被用于广告、社交媒体和娱乐。本文通过一个具体的Python编程示例,展示了如何将文字以动态形式融入到GIF动画中,创造出具有视觉冲击力的动态艺术…

@antv/x6 再vue中 ,自定义图形,画流程图、数据建模、er图等图形

X6 是基于 HTML 和 SVG 的图编辑引擎,提供低成本的定制能力和开箱即用的内置扩展,方便我们快速搭建 DAG 图、ER 图、流程图、血缘图等应用。 最终效果图 1.安装 npm install antv/x6 --save //x6主要包 npm install antv/x6-vue-shape //使用vue组…

2.4特征预处理(机器学习)

2.4特征预处理 2.4.1 什么是特征预处理 通过 一些转换函数将特征数据转换成更加适合算法模型的特征数据过程。 1 包含内容 数值型数据的无量纲化: 归一化 标准化 2 特征预处理API sklearn.preprocessing 为什么要进行归一化/标准化? 特征的单…

前端、后端、测试?如何选择

目录 一、前端开发 (一)职业概述 (二)需学习的技术 二、后端开发 (一)职业概述 (二)需学习的技术 三、测试 (一)职业概述 (二&#xff0…

AI - 谈谈RAG中的查询分析(2)

AI - 谈谈RAG中的查询分析(2) 大家好,RAG中的查询分析是比较有趣的一个点,内容丰富,并不是一句话能聊的清楚的。今天接着上一篇,继续探讨RAG中的查询分析,并在功能层面和代码层面持续改进。 功…

hadoop环境配置-创建hadoop用户+更新apt+安装SSH+配置Java环境

一、创建hadoop用户(在vm安装的ubantu上打开控制台) 1、sudo useradd -m hadoop -s /bin/bash (创建hadoop用户) 2、sudo passwd hadoop (设置密码) 3、sudo adduser hadoop sudo(将新建的hadoop用户设置为管理员) 执行如下图 将…

大数据新视界 -- Hive 数据湖架构中的角色与应用(上)(25 / 30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…