PDFBox 3.0.3添加TIFF到PDF:异常与空白页问题求助
使用PDFBox 3.0.3生成含TIFF图片的PDF时出现空白页(带黑线)问题
使用PDFBox 3.0.3创建包含多张TIFF图片的PDF时,多次尝试均生成仅带有黑线的空白页,以下是具体尝试过程:
尝试1
PDDocument document = new PDDocument(); for (int i=0;i<5;i++) { String sTIFFpath = sRootDir+i; PDPage page = new PDPage(); document.addPage(page); PDPageContentStream contentStream = new PDPageContentStream(document, page); PDImageXObject image = PDImageXObject.createFromFile(sTIFFpath, document); contentStream.drawImage(image, 0, 0); contentStream.close(); }
创建图片对象时抛出异常,但仍生成了图片对象,最终PDF为带黑线的空白页。异常栈如下:
2024-09-29 19:49:26,490 DEBUG PDImageXObject - Reading as TIFF failed, setting fileType to PNG java.io.IOException: First image in tiff is not a single tile/strip at org.apache.pdfbox.pdmodel.graphics.image.CCITTFactory.extractFromTiff(CCITTFactory.java:439) at org.apache.pdfbox.pdmodel.graphics.image.CCITTFactory.createFromRandomAccessImpl(CCITTFactory.java:215) at org.apache.pdfbox.pdmodel.graphics.image.CCITTFactory.createFromFile(CCITTFactory.java:195) at org.apache.pdfbox.pdmodel.graphics.image.CCITTFactory.createFromFile(CCITTFactory.java:173) at org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject.createFromFileByExtension(PDImageXObject.java:236) at org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject.createFromFile(PDImageXObject.java:192)
尝试2
为规避异常,将创建图片的代码替换为以下两行:
BufferedImage biTiff = ImageIO.read(new File(sTIFFpath)); PDImageXObject image = CCITTFactory.createFromImage(document, biTiff);
此操作消除了异常但增加了执行时间,PDF结果仍为带黑线的空白页。
尝试3
尝试另一种方法,替换创建图片的代码为:
ImageInputStream is = ImageIO.createImageInputStream(new File(sTIFFpath)); Iterator<ImageReader> iterator = ImageIO.getImageReaders(is); ImageReader reader = (ImageReader) iterator.next(); iterator = null; reader.setInput(is); int iImgCnt = reader.getNumImages(true); for (int i=0; i < iImgCnt; i++) { BufferedImage biTiff = reader.read(i); PDImageXObject img = CCITTFactory.createFromImage(document, biTiff); // PDImageXObject img = LosslessFactory.createFromImage(document, biTiff); PDPageContentStream contentStream = new PDPageContentStream(document, page); contentStream.drawImage(img, 0, 0); contentStream.close(); page = new PDPage(); document.addPage(page); }
无异常抛出,但生成的PDF依旧是带黑线的空白页。
内容的提问来源于stack exchange,提问作者LostAndConfused
相关产品推荐
相关产品推荐

