当我尝试使用tiff
将pdf
文件转换为itextpdf 5.5.5
文件时,会发生以下异常:
java.lang.RuntimeException:Scanline必须以EOL代码字开头。在 com.itextpdf.text.pdf.codec.TIFFFaxDecoder.readEOL(TIFFFaxDecoder.java:1303) 在 com.itextpdf.text.pdf.codec.TIFFFaxDecoder.decode2D(TIFFFaxDecoder.java:811) 在 com.itextpdf.text.pdf.codec.TiffImage.getTiffImage(TiffImage.java:223) 在 com.itextpdf.text.pdf.codec.TiffImage.getTiffImage(TiffImage.java:315) 在 com.itextpdf.text.pdf.codec.TiffImage.getTiffImage(TiffImage.java:303) 在com.itextpdf.text.Image.getInstance(Image.java:308)at com.itextpdf.text.Image.getInstance(Image.java:242)at com.itextpdf.text.Image.getInstance(Image.java:365)at com.minstone.convert.PicConvertor.convertPicToPdf1(PicConvertor.java:81) 在 com.minstone.convert.DocConverter $ ConvertWork.king2pdf(DocConverter.java:143) 在 com.minstone.convert.DocConverter $ ConvertWork.run(DocConverter.java:99) 在 java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:303) 在java.util.concurrent.FutureTask.run(FutureTask.java:138)在
java.util.concurrent.ThreadPoolExecutor中的$ Worker.runTask(ThreadPoolExecutor.java:886) 在 java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:908) 在java.lang.Thread.run(Thread.java:619)
我可以在任何图片查看器中打开tiff
文件,因此它有效。
答案 0 :(得分:3)
iText在处理无效或损坏的Tiff文件时有一些后备。默认情况下,这些回退未被使用,如果您希望iText尝试解析无效的Tiff文件,您需要显式使用其中一个getinstance()方法并将recoverFromImageError标志设置为true(例如{ {3}})
如果此布尔值设置为true,则iText只会在其耗尽所有选项时抛出错误。这应该是检查您的TIFF文件的标志......
另一种解决方法可能是使用TiffImage并完全绕过Image类。 TiffImage也使用recoverFromImageError标志,但它还有一个名为" direct"这也可能解决你的问题。 (http://api.itextpdf.com/itext/com/itextpdf/text/Image.html#getInstance%28byte[],%20boolean%29)
答案 1 :(得分:0)
由于没有可用的代码段,我想您正在使用以下代码读取图像。
Image tiffImg=TiffImage.getTiffImage(randomAccessFileOrArrayObj, pageNum);
如果是这样,请将其更改为(添加 true 以尝试恢复文件)
Image tiffImg=TiffImage.getTiffImage(randomAccessFileOrArrayObj, true, pageNum);