iText7:使用iText从TIFF多页图像创建PDF [英] iText7: Creating PDF from TIFF multipage image using iText
问题描述
我正在尝试使用iText 7.1.1将TIFF图像转换为具有多个页面的PDF文件.感谢您帮助我开始阅读本文从TIFF创建PDF图片使用iText .但是,它是iText 5.5.x,我很难在iText 7中复制它.
I am trying to use iText 7.1.1 to convert a TIFF image to PDF file with multiple pages. Thanks for those to get me started with this article Create PDF from TIFF image using iText. However, it is iText 5.5.x and I have trouble to duplicate it in iText 7.
我确实找到了TiffImageData.getNumberOfPages(raf)
来替换int pages = TiffImage.getNumberOfPages(rafa)
.
但是,我无法替换iText7中的TiffImage.getTiffImage(rafa, i)
.我是否需要使用new Image(ImageDataFactory.createTiff(...))
.感谢任何建议.
However, I am not able to replace TiffImage.getTiffImage(rafa, i)
in iText7. Do I need to use new Image(ImageDataFactory.createTiff(...))
. Appreciate any suggestion(s).
iText 5.5.x代码
iText 5.5.x code
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();
}
推荐答案
我是否需要使用新的Image(ImageDataFactory.createTiff(...))
Do I need to use new Image( ImageDataFactory.createTiff(...))
是的
您要这样做:然后,您将打开一个新的PDF,循环浏览TIFF页面,然后:
Then you would open a new PDF, loop through the TIFF pages and:
- 获取TIFF图像大小
- 在PDF中创建与TIFF页面大小匹配的新页面
- 将TIFF图像添加到新的PDF页面
这里是Bruno Lowagie关于在iText 7上使用TIFF的说明:如何避免出现异常导入TIFF文件时是什么?
Here is a note from Bruno Lowagie on using TIFF with iText 7: How to avoid an exception when importing a TIFF file?
我看到您可能需要完整的代码.在这里,您去了:
I see you probably want fully working code. Here you go:
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更加干净地实现此目的,但这足以解决您的问题.
Some might suggest you use the high level API to achieve this a little more cleanly but this should be sufficient for your question.
这篇关于iText7:使用iText从TIFF多页图像创建PDF的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!