当我尝试通过使用itextpdf 5.5.5将tiff文件转换为pdf文件时,发生以下异常:
java.lang.RuntimeException: Scanline must begin with EOL code word. at
com.itextpdf.text.pdf.codec.TIFFFaxDecoder.readEOL(TIFFFaxDecoder.java:1303)
at
com.itextpdf.text.pdf.codec.TIFFFaxDecoder.decode2D(TIFFFaxDecoder.java:811)
at
com.itextpdf.text.pdf.codec.TiffImage.getTiffImage(TiffImage.java:223)
at
com.itextpdf.text.pdf.codec.TiffImage.getTiffImage(TiffImage.java:315)
at
com.itextpdf.text.pdf.codec.TiffImage.getTiffImage(TiffImage.java:303)
at 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)
at
com.minstone.convert.DocConverter$ConvertWork.king2pdf(DocConverter.java:143)
at
com.minstone.convert.DocConverter$ConvertWork.run(DocConverter.java:99)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138) at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
我可以在任何图像查看器中打开tiff文件,因此它是有效的。
尝试将getInstance()方法与布尔值" recoverFromImageError"一起使用。 如果这样不起作用,请尝试将"直接"布尔值设置为true来实例化TiffImage对象。 如果那不起作用,请分享tiff。
感谢您的回答,我只是将getInstance()方法与布尔值" recoverFromImageError"一起使用并对其进行修复!
@MichalDemey您应该做出一个答案。
处理无效或损坏的Tiff文件时,iText具有一些后备功能。默认情况下,不使用这些后备,如果您希望iText尝试解析无效的Tiff文件(例如,http:// api),则需要显式地使用getinstance()方法之一,并将recoverFromImageError标志设置为true . / itext / com / itextpdf / text / Image.html#getInstance%28byte [],%20boolean%29)
如果此布尔值设置为true,则iText仅在用尽所有选项时才会抛出错误。这应该是检查您的TIFF文件的标志...
另一个解决方法是使用TiffImage并完全绕开Image类。 TiffImage还使用recoverFromImageError标志,但是它还有一个称为"直接"的附加标志,这也可能解决您的问题。 (/itext/com/itextpdf/text/pdf/codec/TiffImage.html)
由于没有可用的代码段,我想您正在使用下面的代码读取图像。
Image tiffImg=TiffImage.getTiffImage(randomAccessFileOrArrayObj, pageNum);
如果是这样,请将其更改为(添加为true以尝试恢复文件)
Image tiffImg=TiffImage.getTiffImage(randomAccessFileOrArrayObj, true, pageNum);