当前位置: 首页 > news >正文

Python 实现PDF和TIFF图像之间的相互转换

PDF是数据文档管理领域常用格式之一,主要用于存储和共享包含文本、图像、表格、链接等的复杂文档。而TIFF(Tagged Image File Format)常见于图像处理领域,主要用于高质量的图像文件存储。 在实际应用中,我们可能有时需要将PDF文件转换为TIFF图像,或者将TIFF转换为PDF,以适应不同的场景需求。
本文将介绍如何使用Python实现PDF和TIFF格式之间的相互转换。

文章目录

      • 所需Python库
      • Python 将PDF文件转换为一个多页TIFF图像
      • Python 将TIFF图像转换为PDF文件

所需Python库

本文中需要用到以下两个Python库:

  • Spire.PDF Python - 支持在Python 程序中创建、读取、编辑、转换和保存 PDF 文档。
  • Pillow – Python的图像处理库(基于PIL库),提供了对图像的读取、修改、创建和保存等功能,支持多种图像格式,包括 JPEG、PNG、GIF、TIFF、BMP 等。

这两个Python库可以通过下面的pip 命令进行安装:

pip install Spire.Pdf
pip install pillow

Python 将PDF文件转换为一个多页TIFF图像

TIFF格式支持存储多页图像,非常适合用于存储和分发包含多个图像或页面的文档,如扫描的书籍、报纸或报告等。要将PDF文件转换为TIFF,我们需要使用Spire.PDF for Python库提供的接口将PDF中每一页转换为图像流,然后再使用Pillow 库将这些图像流合并为一个连续的多页TIFF 文件。

主要步骤及方法如下:

  1. 使用PdfDocument类的LoadFromFile()方法加载PDF文件;
  2. 将PDF页面转换为图像:
    • 遍历PDF文件中的每一页;
    • 使用PdfDocument类的SaveAsImage()方法将每一页转换为图像流;
    • 使用Pillow库将图像流转换为Image图像对象,并添加到列表中。
  3. 将列表中的图像保存为一个多页TIFF文件。

Python 代码:

from spire.pdf.common import *
from spire.pdf import *from PIL import Image
from io import BytesIO# 加载PDF文档
pdf = PdfDocument()
pdf.LoadFromFile("实验.pdf")# 创建列表
images = []# 遍历PDF文档中所有页面
for i in range(pdf.Pages.Count):# 将指定页面转换为图像流with pdf.SaveAsImage(i) as imageData:# 将图像流转换为图像对象img = Image.open(BytesIO(imageData.ToArray())) # 将转换后的图像对象添加到列表中images.append(img)# 使用第一个图像作为基底,然后将剩余的图像附加到这个基底上,形成一个连续的多页TIFF文件
images[0].save("PDF转TIFF.tiff", save_all=True, append_images=images[1:])# 释放资源
pdf.Dispose()

生成TIFF文件:
PDF转TIFF长图

Python 将TIFF图像转换为PDF文件

如需将一个多页TIFF图像转换为PDF文档,需要首先借助Pillow库来拆分TIFF图像中的每一帧并保存为PNG图片,然后使用Spire.PDF for Python库将这些图片绘制到PDF页面上。

主要步骤及方法如下:

  1. 创建一个PdfDocument类的对象;
  2. 使用Pillow库的加载一个TIFF图像文件;
  3. 处理TIFF图像帧:
    • 遍历TIFF图像中的每个帧;
    • 获取当前帧,然后使用Pillow库提供的copy()方法复制当前帧。
    • 使用Pillow库提供的save()方法将当前帧保存为指定格式的图像文件。
    • 使用Spire.PDF库将图像文件转换为PDF图像对象。
  4. 将图像绘制到PDF页面上:
    • 使用PdfDocument.Pages.Add()方法在PDF文档中添加页面。
    • 使用PdfPageBase.Canvas.DrawImage()方法在PDF页面上绘制图像。
  5. 保存PDF文件。

Python 代码:

from spire.pdf.common import *
from spire.pdf import *from PIL import Image
import io# 创建PdfDocument对象
pdf = PdfDocument()# 设置页边距
pdf.PageSettings.SetMargins(0.0)# 加载TIFF图像
tiff_image = Image.open("PDF转TIFF.tiff")# 遍历其中每一帧
for i in range(tiff_image.n_frames):# 获取当前帧tiff_image.seek(i)# 复制当前帧并保存为PNG图像文件tiff_image.copy().save("output_frame_{i}.png")# 将PNG图像文件转换为PDF图像对象image = PdfImage.FromFile("output_frame_{i}.png")# 获取图像宽度和高度width = image.PhysicalDimension.Widthheight = image.PhysicalDimension.Height# 在PDF中添加一个与图像大小相同的页面page = pdf.Pages.Add(SizeF(width, height))# 将图像绘制在页面指定位置处page.Canvas.DrawImage(image, 0.0, 0.0, width, height)# 保存PDF文件
pdf.SaveToFile("Tiff转Pdf.pdf",FileFormat.PDF)# 释放资源
pdf.Dispose()

生成PDF文件:
TIFF转PDF


  • 去除水印,点击自行申请一个月免费授权:
    https://www.e-iceblue.cn/misc/temporary-license.html

  • PDF转换功能示例:
    https://www.e-iceblue.cn/pdfforpython/spire-pdf-for-python-program-guide-content.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SpringBoot整合Elastic-Job 2.1.53版本任务调度,手动任务,动态添加任务演示
  • py3.7.4离线安装openpyxl等错误,无法安装openpyxl...
  • yolo5图片视频、摄像头推理demo
  • Unity UGUI 之 ScrollBar与ScrollView
  • HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 单选题序号2
  • 生成式人工智能之路,从马尔可夫链到生成对抗网络
  • 探索LLM世界:新手小白的学习路线图
  • 密码学
  • 可能造成z-index小的元素显示在z-index大的元素上方的原因
  • 无法连接到internet怎么办?已连接但无internet访问,其实并不难
  • uniapp从入坑到出土(2-初始化你的uniapp项目)
  • mac本安装brew
  • 代码随想录算法训练营第40天 | 第九章 动态规划12
  • 【计算机视觉】基本概念和应用
  • IP数据报结构详解:从基础到进阶
  • 【译】JS基础算法脚本:字符串结尾
  • 「面试题」如何实现一个圣杯布局?
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Git学习与使用心得(1)—— 初始化
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Python_OOP
  • ReactNativeweexDeviceOne对比
  • SpringCloud集成分布式事务LCN (一)
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • - 概述 - 《设计模式(极简c++版)》
  • 如何用vue打造一个移动端音乐播放器
  • 详解NodeJs流之一
  • 小程序测试方案初探
  • 自制字幕遮挡器
  • # Redis 入门到精通(七)-- redis 删除策略
  • # 职场生活之道:善于团结
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (3)(3.5) 遥测无线电区域条例
  • (3)nginx 配置(nginx.conf)
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (多级缓存)缓存同步
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (六)Hibernate的二级缓存
  • (七)c52学习之旅-中断
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .gitignore不生效的解决方案
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .mysql secret在哪_MySQL如何使用索引
  • .net core Redis 使用有序集合实现延迟队列
  • .Net Core 生成管理员权限的应用程序
  • .Net MVC4 上传大文件,并保存表单
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .net 连接达梦数据库开发环境部署
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比