将tiff文件转换为pdf文件时出现异常(使用iText)

3
当我使用itextpdf 5.5.5将一个tiff文件转换成pdf文件时,出现以下异常:

java.lang.RuntimeException: 扫描行必须以EOL代码字开头。 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文件,所以它是有效的。

2
尝试使用带有布尔值“recoverFromImageError”的getInstance()方法。如果这不起作用,请尝试使用“direct”布尔值设置为true的TiffImage对象进行实例化。如果这仍然无法解决问题,请分享tiff文件。 - Michaël Demey
谢谢您的回答,我只是使用了一个带有布尔值“recoverFromImageError”的getInstance()方法并修复了它! - hecatcat
@MichaëlDemey,你应该把它作为一个答案。 - Bruno Lowagie
2个回答

3

iText在处理无效或损坏的Tiff文件时会出现一些问题。默认情况下,这些后备方案不会被使用,您需要显式地使用其中一个带有recoverFromImageError标记设置为true的getinstance()方法,才能让iText尝试解析无效的Tiff文件(例如http://api.itextpdf.com/itext/com/itextpdf/text/Image.html#getInstance%28byte[],%20boolean%29)。

如果将此布尔值设置为true,则iText仅在耗尽所有选项后才会引发错误。这应该是检查您的TIFF文件的信号...

另一个解决方法可能是完全绕过Image类,而是使用TiffImage。 TiffImage也使用recoverFromImageError标志,但它还具有一个名为“direct”的附加标志,该标志也可能解决您的问题。(http://api.itextpdf.com/itext/com/itextpdf/text/pdf/codec/TiffImage.html)


0

由于没有可用的代码片段,我猜想您正在使用以下代码读取图像。

Image tiffImg=TiffImage.getTiffImage(randomAccessFileOrArrayObj, pageNum);

如果是这样,请将其更改为(尝试恢复文件,请添加 true )。
Image tiffImg=TiffImage.getTiffImage(randomAccessFileOrArrayObj, true, pageNum);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接