【问题标题】:Convert Tiff to Pdf in java using itext使用itext在java中将Tiff转换为Pdf
【发布时间】:2014-07-31 06:36:05
【问题描述】:

我正在使用以下代码将 tiff 转换为 pdf 它适用于尺寸为 850*1100 的 tiff 图像。但是当我尝试提供尺寸的输入 tiff 图像(例如:- 1574*732、684*353 或其他 850*1100)时,我收到以下错误。请帮我如何将不同尺寸的tiff图像转换为pdf。

以下代码发生错误。压缩 JPEG 仅支持单个条带。这张图片有 45 条。

RandomAccessFileOrArray myTifFile = null;
com.itextpdf.text.Document tiffToPDF= null;
PdfWriter pdfWriter = null;
try{
        myTifFile = new RandomAccessFileOrArray(fileName);
        int numberOfPages = TiffImage.getNumberOfPages(myTifFile);
        tiffToPDF = new com.itextpdf.text.Document(PageSize.LETTER_LANDSCAPE);      
        String temp = fileName.substring(0, fileName.lastIndexOf("."));
        pdfWriter = PdfWriter.getInstance(tiffToPDF, new FileOutputStream(temp+".pdf"));
        pdfWriter.setStrictImageSequence(true);
        tiffToPDF.open();
        for(int tiffImageCounter = 1;tiffImageCounter <= numberOfPages;tiffImageCounter++) 
             {
                Image img = TiffImage.getTiffImage(myTifFile, tiffImageCounter);

                img.setAbsolutePosition(0,0);

                img.scaleToFit(612,792);

                tiffToPDF.add(img);

                tiffToPDF.newPage();
            } 

        }

【问题讨论】:

  • 您使用的是哪个 iText 版本?许多 TIFF 已损坏或未完全遵循规范,我最近在 iText 中添加了后备。我看到您在此处的代码示例中使用 com.itextpdf.text.Document,但作为对答案的评论,您似乎使用的是 2.x:“com.lowagie.text.pdf.RandomAccessFileOrArray”。那么它是哪个版本的呢?
  • 在我的代码中我使用的是 itextpdf-5.4.1.jar
  • 你能分享你的 TIFF 吗?可以升级到 5.5.2 吗?
  • 我应该提一下,仅使用 iText 可能无法正常工作。异常消息非常清楚:压缩 JPEG 仅支持单个条带。这张图片有 45 条。
  • [链接]dropbox.com/s/7t469wdoccwayzq/02.tif。我将用最新版本替换 jar 并检查它。

标签: java pdf itext tiff pdfbox


【解决方案1】:

此代码将解释如何将 tiff 转换为 pdf.. 更多信息可以在 herehere 找到

   import com.itextpdf.text.pdf.RandomAccessFileOrArray;
//Read Tiff File, Get number of Pages
import com.itextpdf.text.pdf.codec.TiffImage;
//We need the library below to write the final 
//PDF file which has our image converted to PDF
import java.io.FileOutputStream;
//The image class to extract separate images from Tiff image
import com.itextpdf.text.Image;
//PdfWriter object to write the PDF document
import com.itextpdf.text.pdf.PdfWriter;
//Document object to add logical image files to PDF
import com.itextpdf.text.Document;
public class TiffToPDF {
public static void main(String args[]){
    try{
        //Read the Tiff File
        RandomAccessFileOrArray myTiffFile=new RandomAccessFileOrArray("c:\\java\\test.tif");
        //Find number of images in Tiff file
        int numberOfPages=TiffImage.getNumberOfPages(myTiffFile);
        System.out.println("Number of Images in Tiff File" + numberOfPages);
        Document TifftoPDF=new Document();
        PdfWriter.getInstance(TifftoPDF, new FileOutputStream("c:\\java\\tiff2Pdf.pdf"));
        TifftoPDF.open();
        //Run a for loop to extract images from Tiff file
        //into a Image object and add to PDF recursively
        for(int i=1;i<=numberOfPages;i++){
            Image tempImage=TiffImage.getTiffImage(myTiffFile, i);
            TifftoPDF.add(tempImage);
        }
        TifftoPDF.close();
        System.out.println("Tiff to PDF Conversion in Java Completed" );
    }
    catch (Exception i1){
        i1.printStackTrace();
    }      
    }    
}

【讨论】:

  • 我已经检查了上面的代码,它适用于尺寸为 850*1100 的 tiff 图像。但它对不同尺寸的 tiff 显示错误。 异常转换器:java.io.EOFException
  • 参考链接@byr 和this link
  • 我也检查了链接,仍然存在同样的错误。我在上面的评论中引用了链接,我已经放置了 myTifFile.read();但问题仍然存在。
  • 你能提供错误吗?请编辑您的问题以提供错误。
  • ExceptionConverter: java.io.EOFException at com.lowagie.text.pdf.RandomAccessFileOrArray.readUnsignedShort(Unknown Source) at com.lowagie.text.pdf.codec.TIFFDirectory.getNumDirectories(Unknown Source) at com.lowagie.text.pdf.codec.TiffImage.getNumberOfPages(Unknown Source) at com.viewer.download.DocumentConversion.generatePDFFromTIF(DocumentConversion.java:218) at com.viewer.download.DocumentConversion.main(DocumentConversion.java:271 )
猜你喜欢
  • 2012-09-22
  • 2013-10-30
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-27
  • 2015-06-29
相关资源
最近更新 更多