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

时间:2015-04-22 03:48:29

标签: java pdf itext tiff

当我尝试使用tiffpdf文件转换为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文件,因此它有效。

2 个答案:

答案 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);