Hi All,

I have been working on a printing issue for a while.  I currently use
iText to convert scanned .tiff documents to PDFs for a large paperless
application here at Sun.  The problem that I have encountered is that
the PDF that iText created from tiffs are not printable, I get a
typecheck-restore error.  I have tried from many versions of Acrobat,
and even tried with Ghostscript.  If I use Ghostscript to convert the
PDF's to PS the postscript will not print however, if I use ghostscript
to "convert" a pdf to a pdf using the following command:

gs -q -dNOPAUSE -dBATCH  -sDEVICE=pdfwrite -sOutputFile=./itext-gs.pdf
./itext.pdf

the PDF becomes printable from Acroread or Ghostscript.  I have looked
at the contents of the two PDFs and don't see any significant
differences.  The encoding is the same..

I have attached example PDFs, one that doesn't print - itext.pdf
(created from iText) and the same PDF after the ghostscript command has
been run on it and it is printable - itext-gs.pdf.  If someone can take
a look at these and give me an idea where to start or if it is a
limitation of iText, please let me know as I have about 9000 documents a
day that go through this process and need to fix it soon before I have
to run the gs command on hundreds of thousands of PDFs.

Thank you!!
Jared

Also, here is the code that converts the tiffs to PDFs:

public boolean tiffToPdf(String theTiffFile, String theOutFile)
    {
     Document document = null;

        try {
            // creation of the different writers

            File file = new File(theTiffFile);
            SeekableStream s = new FileSeekableStream(file);
            TIFFDirectory dir = new TIFFDirectory(s, 0);
            long IFDOffset = dir.getIFDOffset();
             Watermark watermark = null;
            PdfWriter writer = null;
            PdfContentByte cb = null;


            while (IFDOffset != 0L) {
                dir = new TIFFDirectory(s, IFDOffset, 0);
                IFDOffset = dir.getNextIFDOffset();
                long h =
dir.getFieldAsLong(TIFFImageDecoder.TIFF_IMAGE_LENGTH);
                long w =
dir.getFieldAsLong(TIFFImageDecoder.TIFF_IMAGE_WIDTH);

                if (document == null)
                {
                    if((int)w > 1800)
                    {
                    watermark = new
Watermark(Image.getInstance(ConverterProperties.WATERMARKLOC),0,-150);
                    document = new Document(PageSize.A4.rotate(), 50,
50, 50, 50);
                    }
                    else
                    {
                       watermark = new
Watermark(Image.getInstance(ConverterProperties.WATERMARKLOC),0,0);
                        document = new Document(PageSize.A4, 50, 50, 50,
50);
                    }
                    writer = PdfWriter.getInstance(document, new
FileOutputStream(theOutFile));
                    cb = writer.getDirectContent();
                    document.add(watermark);

                    document.open();
                }
                else
                {
                    if((int)w > 1700)
                    {
                        document.setPageSize(PageSize.A4.rotate());
                    }
                    else
                    {
                        document.setPageSize(PageSize.A4);
                    }
                }
                long offset =
dir.getFieldAsLong(TIFFImageDecoder.TIFF_STRIP_OFFSETS);
                long size =
dir.getFieldAsLong(TIFFImageDecoder.TIFF_STRIP_BYTE_COUNTS);
                boolean reverse = false;
                if (dir.isTagPresent(TIFFImageDecoder.TIFF_FILL_ORDER))
                    reverse =
(dir.getFieldAsLong(TIFFImageDecoder.TIFF_FILL_ORDER) == 2L);
                int compression =
(int)dir.getFieldAsLong(TIFFImageDecoder.TIFF_COMPRESSION);
                switch (compression) {
                    case TIFFImage.COMP_FAX_G3_1D:
                        compression = Image.CCITTG3_1D;
                        break;
                    case TIFFImage.COMP_FAX_G3_2D:
                        compression = Image.CCITTG3_1D;
                        if
(dir.isTagPresent(TIFFImageDecoder.TIFF_T4_OPTIONS)) {
                            if
(((int)dir.getFieldAsLong(TIFFImageDecoder.TIFF_T4_OPTIONS) & 1) != 0)
                                compression = Image.CCITTG3_2D;
                        }
                        break;
                    case TIFFImage.COMP_FAX_G4_2D:
                        compression = Image.CCITTG4;
                        break;
                    default:
                        throw new Exception("Compression type " +
compression + " not supported");
                }
                byte im[] = new byte[(int)size];
                s.seek(offset);
                s.readFully(im);
                Image img = Image.getInstance((int)w, (int)h, reverse,
compression, 0, im);

                img.scalePercent(72f / 200f * 100);
                img.setAbsolutePosition(0, 0);




                cb.addImage(img);


                document.newPage();
            }
            document.close();
            return true;
        }
        catch (Exception de) {
            de.printStackTrace();
            createErrorPDF(theTiffFile, theOutFile);
            return false;
        }






    }

Attachment: itext-gs.pdf
Description: Adobe PDF document

Attachment: itext.pdf
Description: Adobe PDF document

Reply via email to