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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:08:15