gpt4 book ai didi

tiff - iText7:使用 iText 从 TIFF 多页图像创建 PDF

转载 作者:行者123 更新时间:2023-12-01 00:06:26 33 4
gpt4 key购买 nike

我正在尝试使用 iText 7.1.1 将 TIFF 图像转换为具有多页的 PDF 文件。感谢那些让我开始阅读这篇文章的人 Create PDF from TIFF image using iText 。但是,它是 iText 5.5.x,我无法在 iText 7 中复制它。

我确实找到了 TiffImageData.getNumberOfPages(raf) 来替换 int pages = TiffImage.getNumberOfPages(rafa)

但是,我无法替换 iText7 中的 TiffImage.getTiffImage(rafa, i)。我需要使用 new Image(ImageDataFactory.createTiff(...)) 吗?感谢任何建议。

iText 5.5.x 代码

import java.io.FileOutputStream;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.io.FileChannelRandomAccessSource;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.RandomAccessFileOrArray;
import com.itextpdf.text.pdf.codec.TiffImage;

public class Test1 {
public static void main(String[] args) throws Exception {
RandomAccessFile aFile = new RandomAccessFile("/myfolder/origin.tif", "r");
FileChannel inChannel = aFile.getChannel();
FileChannelRandomAccessSource fcra = new FileChannelRandomAccessSource(inChannel);
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream("/myfolder/destination.pdf"));
document.open();
RandomAccessFileOrArray rafa = new RandomAccessFileOrArray(fcra);
int pages = TiffImage.getNumberOfPages(rafa);
Image image;
for (int i = 1; i <= pages; i++) {
image = TiffImage.getTiffImage(rafa, i);
Rectangle pageSize = new Rectangle(image.getWidth(), image.getHeight());
document.setPageSize(pageSize);
document.newPage();
document.add(image);
}
document.close();
aFile.close();
}

最佳答案

Do I need to use new Image( ImageDataFactory.createTiff(...))



是的。

你想要这个: ImageDataFactory.createTiff(bytes, recoverFromImageError, page, direct)

然后您将打开一个新的 PDF,循环浏览 TIFF 页面并:
  • 获取 TIFF 图片大小
  • 在 PDF 中创建与 TIFF 页面大小匹配的新页面
  • 将 TIFF 图像添加到新的 PDF 页面

  • 以下是 Bruno Lowagie 关于在 iText 7 中使用 TIFF 的说明: How to avoid an exception when importing a TIFF file?

    我看到你可能想要完全工作的代码。干得好:
    import com.itextpdf.io.image.ImageData;
    import com.itextpdf.io.image.ImageDataFactory;
    import com.itextpdf.io.image.TiffImageData;
    import com.itextpdf.io.source.RandomAccessFileOrArray;
    import com.itextpdf.io.source.RandomAccessSourceFactory;
    import com.itextpdf.kernel.geom.PageSize;
    import com.itextpdf.kernel.geom.Rectangle;
    import com.itextpdf.kernel.pdf.PdfDocument;
    import com.itextpdf.kernel.pdf.PdfPage;
    import com.itextpdf.kernel.pdf.PdfWriter;
    import com.itextpdf.kernel.pdf.canvas.PdfCanvas;

    public class TiffToPdf {
    public static void main(String[] args) throws IOException {
    Path tiffFile = Paths.get("/myfolder/origin.tiff");
    RandomAccessFileOrArray raf = new RandomAccessFileOrArray(new RandomAccessSourceFactory().createBestSource(tiffFile.toString()));
    int tiffPages = TiffImageData.getNumberOfPages(raf);
    raf.close();
    try (PdfDocument output = new PdfDocument(new PdfWriter("/myfolder/destination.pdf"))) {
    for (int page = 1; page <= tiffPages; page++) {
    ImageData tiffImage = ImageDataFactory.createTiff(tiffFile.toUri().toURL(), true, page, true);
    Rectangle tiffPageSize = new Rectangle(tiffImage.getWidth(), tiffImage.getHeight());
    PdfPage newPage = output.addNewPage(new PageSize(tiffPageSize));
    PdfCanvas canvas = new PdfCanvas(newPage);
    canvas.addImage(tiffImage, tiffPageSize, false);
    }
    }
    }
    }

    有些人可能会建议您使用高级 API 来更干净地实现这一点,但这应该足以解决您的问题。

    关于tiff - iText7:使用 iText 从 TIFF 多页图像创建 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49414913/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com