You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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)分离,需要同时使用这两个类来完成文档生成

注意事项

  1. 确保项目中引入了iText 7的核心依赖:kernel、layout、io
  2. 对于彩色多页TIFF,不需要修改核心逻辑,ImageDataFactory会自动处理色彩模式
  3. 如果需要调整图像缩放、边距等样式,可以通过Image类的方法进行设置

内容的提问来源于stack exchange,提问作者user1747980

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:48:43