使用iText 7将多页TIFF图像转换为PDF的技术实现疑问
用iText 7将多页TIFF转换为PDF的正确实现方式
没错,你找对方向了!在iText 7里,确实是通过new Image(ImageDataFactory.createTiff(...))来替代iText 5中TiffImage.getTiffImage()的功能,整个多页TIFF转PDF的逻辑也需要适配iText 7全新的API结构。
完整实现代码
下面是一个可直接运行的示例,涵盖了从读取TIFF到生成PDF的完整流程:
import com.itextpdf.io.image.ImageData; import com.itextpdf.io.image.ImageDataFactory; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfWriter; import com.itextpdf.layout.Document; import com.itextpdf.layout.element.Image; import com.itextpdf.layout.property.HorizontalAlignment; import java.io.File; import java.io.RandomAccessFile; public class TiffToPdfConverter { public static void main(String[] args) throws Exception { // 替换为你的输入TIFF路径和输出PDF路径 String inputTiff = "path/to/your/multipage.tiff"; String outputPdf = "path/to/your/output.pdf"; // 使用try-with-resources自动关闭资源,避免内存泄漏 try (RandomAccessFile raf = new RandomAccessFile(new File(inputTiff), "r"); PdfWriter pdfWriter = new PdfWriter(outputPdf); PdfDocument pdfDoc = new PdfDocument(pdfWriter); Document layoutDoc = new Document(pdfDoc)) { // 获取TIFF的总页数(对应iText5的TiffImage.getNumberOfPages()) int totalPages = ImageDataFactory.getNumberOfPages(raf); // 遍历每一页TIFF,添加到PDF中 for (int pageIndex = 1; pageIndex <= totalPages; pageIndex++) { // 创建单页TIFF的ImageData对象(替代iText5的TiffImage.getTiffImage()) // 第三个参数true表示对黑白TIFF启用CCITT压缩,可减小PDF体积;彩色TIFF可设为false ImageData tiffPageData = ImageDataFactory.createTiff(raf, pageIndex, true); Image tiffImage = new Image(tiffPageData); // 设置PDF页面大小与图像尺寸完全匹配 pdfDoc.setDefaultPageSize(new com.itextpdf.kernel.geom.Rectangle( tiffImage.getImageWidth(), tiffImage.getImageHeight() )); // 可选:设置图像居中对齐(如果页面比图像大的话) tiffImage.setHorizontalAlignment(HorizontalAlignment.CENTER); // 将图像添加到PDF文档 layoutDoc.add(tiffImage); } } } }
关键API说明
- 获取TIFF页数:
ImageDataFactory.getNumberOfPages(raf)完全替代了iText 5中的TiffImage.getNumberOfPages() - 创建单页TIFF图像:
ImageDataFactory.createTiff(raf, pageNum, useCcittCompression)是TiffImage.getTiffImage()的替代方案,通过指定页码来提取单页图像,第三个参数适合黑白TIFF的压缩优化 - 文档结构:iText 7将PDF内核操作(
PdfDocument)与布局逻辑(Document)分离,需要同时使用这两个类来完成文档生成
注意事项
- 确保项目中引入了iText 7的核心依赖:
kernel、layout、io - 对于彩色多页TIFF,不需要修改核心逻辑,
ImageDataFactory会自动处理色彩模式 - 如果需要调整图像缩放、边距等样式,可以通过
Image类的方法进行设置
内容的提问来源于stack exchange,提问作者user1747980
相关产品推荐
相关产品推荐

