tiff 因其高质量和支持多种色彩空间而成为扫描和存档中常用的图像格式。另一方面,pdf 在压缩文件大小的同时保留了文档的布局和格式,因此被广泛用于文档交换。这些格式之间的转换可用于各种目的,如存档、编辑或共享文档。
在本文中,您将学习如何使用 spire.pdf for python 在 python 程序中将 pdf 转换为 tiff 和将 tiff 转换为 pdf。
安装 spire.pdf for python
本教程需要用到 spire.pdf for python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 windows 中。
pip install spire.pdf
如果您不确定如何安装,请参考此教程:如何在 windows 中安装 spire.pdf for python
python 将 pdf 转为 tiff
要完成 pdf 到 tiff 的转换,首先需要加载 pdf 文档,并使用 spire.pdf 将单个页面转换为图像流。然后,使用 pil 库的功能将这些图像流合并在一起,得到一个合并的 tiff 图像。
以下是使用 python 将 pdf 转换为 tiff 的步骤。
- 创建一个 pdfdocument 类对象。
- 从指定的文件路径加载 pdf 文档。
- 遍历文档中的页面。
- 使用 pdfdocument.saveasimage() 方法将每一页转换为图像流。
- 将图像流转换为 pil 图像。
- 将这些 pil 图像合并为一个 tiff 图像。
- python
from spire.pdf.common import *
from spire.pdf import *
from pil import image
from io import bytesio
# 创建一个pdfdocument对象
doc = pdfdocument()
# 加载pdf文档
doc.loadfromfile("输入文档.pdf")
# 创建一个空列表,用于存储从pdf中提取的图片
images = []
# 遍历pdf文档中的每一页
for i in range(doc.pages.count):
# 使用saveasimage方法将pdf的当前页保存为图片
with doc.saveasimage(i) as imagedata:
# 将imagedata中的图片数据转换为字节流,然后使用pil库中的image.open方法打开这个字节流作为图片
img = image.open(bytesio(imagedata.toarray()))
# 将打开的图片添加到images列表中
images.append(img)
# 将所有图片保存为一个多页的tiff文件
images[0].save("totiff.tiff", save_all=true, append_images=images[1:])
# 释放pdfdocument对象占用的资源
doc.dispose()
python 将 tiff 转为 pdf
在 pil 库的帮助下,您可以加载 tiff 文件并将每一帧转换为不同的 png 文件。然后,您可以使用 spire.pdf 将这些 png 文件绘制到 pdf 文档的页面上。
要使用 python 将 tiff 图像转换为 pdf 文档,请按照以下步骤操作。
- 创建一个 pdfdocument 类对象。
- 加载 tiff 图像。
- 遍历 tiff 图像中的帧。
- 获取特定帧,并将其保存为 png 文件。
- 为 pdf 文档添加页面。
- 使用 pdfpagebase.canvas.drawimage() 方法在页面指定位置绘制图像。
- 将文档保存为 pdf 文件。
- python
from spire.pdf import *
from spire.pdf.common import *
from pil import image
import io
# 创建一个 pdfdocument 对象
doc = pdfdocument()
# 设置页边距为 0
doc.pagesettings.setmargins(0.0)
# 加载 tiff 图像
tiff_image = image.open("tiff.tiff")
# 遍历其中的frame
for i in range(tiff_image.n_frames):
# 转到当前frame
tiff_image.seek(i)
# 提取当前frame的图像
frame_image = tiff_image.copy()
# 将图像保存为 png 文件
frame_image.save(f"temp/output_frame_{i}.png")
# 将图像文件加载到 pdfimage 中
image = pdfimage.fromfile(f"temp/output_frame_{i}.png")
# 获取图像宽度和高度
width = image.physicaldimension.width
height = image.physicaldimension.height
# 向文档添加页面
page = doc.pages.add(sizef(width, height))
# 在页面的 (0, 0) 处绘制图像
page.canvas.drawimage(image, 0.0, 0.0, width, height)
# 将文档保存为 pdf 文件
doc.savetofile("结果文件.pdf",fileformat.pdf)
doc.dispose()
申请临时 license
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用javascript。获取有效期 30 天的临时许可证。