ARTICLE · 1058459
PDF机制图转→TIFF格式且保证300dpi质量
我为你整理了 R、Python、Matlab 和 Java 这四种语言的实现方案,你可以看看哪种更适合你。
一、Python 方案:生态丰富,选择多样
Python 有多个库可以实现这个功能,从开源到商业库都有,选择很灵活。
开源方案 (PyMuPDF+Pillow):这是一个轻量且强大的组合。PyMuPDF 负责将 PDF 页面高质量地渲染为图像,Pillow 则用于将图像保存为 TIFF 格式。
首先,pip install pymupdf Pillow
import fitzPyMuPDFfrom PIL import Image# 打开PDF文件doc = fitz.open("input.pdf")# 遍历每一页for page_num in range(len(doc)): page = doc.load_page(page_num) # 将页面渲染为Pixmap(图像) pix = page.get_pixmap(dpi=300) # 可以设置DPI # 将Pixmap转换为PIL Image对象 img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples) # 保存为TIFF img.save(f"output_page_{page_num + 1}.tiff")doc.close()
二、 R 方案:pdftools 包,简洁高效
R 语言用户可以使用pdftools包,它基于强大的libpoppler库,能够高质量地将 PDF 渲染为 TIFF 格式。
library(pdftools)将PDF的每一页分别转换为TIFF文件pdf_convert("input.pdf", format = "tiff", dpi = 300)# 或者,将指定页转换为TIFF# pdf_convert("input.pdf", format = "tiff", pages = 1:3, dpi = 300)
三、Matlab 方案:利用内置图像处理函数
Matlab 可以通过imread读取 PDF 的首页为图像,然后用imwrite将其保存为 TIFF,同时可以指定分辨率。
% 读取PDF的第一页pdfData = imread('input.pdf');% 将图像保存为TIFF格式,并指定分辨率为600 DPIimwrite(pdfData, 'output.tif', 'Resolution', 600);
注意:这种方法默认只转换 PDF 的第一页。如果需要处理多页 PDF,需要结合其他方法逐页读取。
四、Java 方案:Apache PDFBox 或 pdf2tiff 工具
Java 生态中,Apache PDFBox是一个成熟的开源选择,可以将 PDF 页面渲染为图像,再通过 ImageIO 保存为 TIFF-。此外,还有一个专门封装好的开源工具pdf2tiff,使用起来更便捷,它底层也依赖 PDFBox。
使用pdf2tiff工具(推荐):
Maven 依赖:
五、一个无需代码的备选方案
命令行工具。例如,pdftocairo(属于 poppler-utils)是一个非常强大的工具,一条命令就能搞定。。
这会在当前目录生成output-1.tiff,output-2.tiff等文件。在 Windows 上,你可能需要通过包管理器(如 Chocolatey)来安装 poppler 工具集。
——————————————————————————————
常见问题:
Python出现fitz命令不可用了,可换成pymupdf,如doc=pimupdf.open(pdf_path)。 按照上述完整代码,发现明明设置了300dpi,但是交付的tiff图片查看属性是发现只有几十dpi。
此类error,问题不在page.get_pixmap(dpi=300),而在于PIL 保存 TIFF 时没有把 300 DPI 写进文件元数据。
get_pixmap(dpi=300)只负责按 300 DPI 去渲染,也就是生成足够多的像素。比如 A4 纸在 300 DPI 下会变成约 2480×3508 像素。但 TIFF 文件里还有一个“分辨率标签”,告诉看图软件“这些像素应该按每英寸多少像素来显示”。PIL 的img.save()默认不会自动继承这个信息,所以文件属性里看到的 DPI 是错的。
以下展示修正后的代码:
温馨提示:
如果用adobe illustrator打开PDF导出为TIFF也是个方法,但是常常面临着缺失字体无法嵌入、强制自动更换字体的风险,所以,还是优选上述其他方法哦~
正常Adobe Illustrator导出TIFF/JPG/PDF等格式时,注意养成根据画板/根据内容(根据需要选择,不要不看)、勾选字体嵌入、勾选LZW压缩(针对TIFF文件的无损压缩,大多数期刊明文提倡,少数期刊拒绝,注意要求)的好习惯哦~