我正在尝试使用PDFBox将多页tiff转换为pdf,但一直没有成功。由于apache imaging-commons不是一个稳定版本,因此我无法在公司中使用它。
问题:无法读取多页tiff并将其写入pdf。
目前的解决方案:只有第一页被写入并保存到pdf中。当tiff只有一页时,它可以工作。
以下是代码:
以下是代码:
PDDocument doc = new PDDocument();
log.info("Read Image");
log.info("Process Image parts");
//Get the number of pages
int pages = 0;
try(ImageInputStream imageInputStream = ImageIO.createImageInputStream(new File("src/main/resources/output/testpdf.tiff"))) {
if (imageInputStream != null && imageInputStream.length() != 0) {
Iterator<ImageReader> iteratorIO = ImageIO.getImageReaders(imageInputStream);
if (iteratorIO != null && iteratorIO.hasNext()) {
ImageReader reader = iteratorIO.next();
reader.setInput(imageInputStream);
pages = reader.getNumImages(true);
log.info("Number of pages in the tiff is " + pages);
}
}
}
//需要为不同页面添加阅读器吗?
for (int i=0; i<pages; i++) {
BufferedImage bimage = ImageIO.read(file);
PDPage page = new PDPage();
doc.addPage(page);
PDPageContentStream contentStream = new PDPageContentStream(doc, page);
try {
// the .08F can be tweaked. Go up for better quality,
// but the size of the PDF will increase
PDImageXObject image = JPEGFactory.createFromImage(doc, bimage, 0.08f);
Dimension scaledDim = getScaledDimension(new Dimension(image.getWidth(), image.getHeight()),
new Dimension((int) page.getMediaBox().getWidth(), (int) page.getMediaBox().getHeight()));
contentStream.drawImage(image, 1, 1, scaledDim.width, scaledDim.height);
} finally {
contentStream.close();
}
}
doc.save("src/main/resources/output/testpdf.pdf");
doc.close();
我需要自己编写一个ImageIO没有提供的阅读器吗?
或者我需要将tiff多页文件拆分为单独的页面,然后写入pdf吗?
我在图像处理方面没有太多经验,但是非常欣赏ImageIO在转换过程中提供的质量水平!
谢谢
CCITTFactory.createFromFile(PDDocument document, File file, int number)
函数。 - Tilman Hausherr