2015-04-08 3 views
1

Я использую iTextSharp для преобразования & одностраничных файлов TIF в многостраничный файл PDF. Одностраничные файлы TIF имеют разную битовую глубину и сжатие.Проблемы преобразования некоторых сжатий TIF в PDF с использованием iTextSharp

Вот код-

private void button1_Click(object sender, EventArgs e) 
{ 
    List<string> TIFfiles = new List<string>(); 
    Document document; 
    PdfWriter pdfwriter; 
    Bitmap tifFile; 
    pdfFilename = <file path>.PDF; 
    TIFfiles = <load the path to each TIF file in this array>; 

    //Create document 
    document = new Document(); 

    // creation of the different writers 
    pdfwriter = PdfWriter.GetInstance(document, new System.IO.FileStream(pdfFilename, FileMode.Create)); 

    document.Open(); 
    document.SetMargins(0, 0, 0, 0); 

    foreach (string file in TIFfiles) 
    { 

     //load the tiff image 
     tifFile = new Bitmap(file); 

     //Total number of pages 

     iTextSharp.text.Rectangle pgSize = new iTextSharp.text.Rectangle(tifFile.Width, tifFile.Height); 
     document.SetPageSize(pgSize); 
     document.NewPage(); 

     PdfContentByte cb = pdfwriter.DirectContent; 

     tifFile.SelectActiveFrame(FrameDimension.Page, 0); 
     iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(tifFile, ImageFormat.Tiff); 

     // scale the image to fit in the page 
     img.SetAbsolutePosition(0, 0); 
     cb.AddImage(img); 

    } 

    document.Close(); 
} 

Этот код работает хорошо, и стежки & преобразует TIFs в формате PDF. Проблема связана с временем обработки и размером файла PDF, который он создает при обработке определенных типов TIF.

См., Например,

Оригинальный TIF -> B & Глубина W/бит 1/Сжатие CCITT T.6 -> Более быстрая обработка, размер файла PDF ~ 1,1 раза меньше размера файла TIF.

Оригинальный TIF -> Глубина цвета/бит 8/Сжатие LZW -> Более быстрая обработка, размер файла PDF составляет ~ 1,1 раза больше размера файла TIF.

Оригинал TIF -> Цвет/Разрядность 24/Сжатие JPEG ->Slow обработка, размер PDF файла ~ 12.5x раз размером TIF файл.

Почему не конвертируется глубина цвета/бит 24/Файлы сжатия JPEG приводят к аналогичному результату, как и другие файлы tif?

Кроме того, эта проблема касается только iTextSharp. У меня была проверка коллег одного и того же набора образцов TIF с использованием Java-iText, и полученный PDF был меньшего размера (в 1,1 раза) и имел более быструю обработку.

К сожалению, мне нужно использовать .Net для этого преобразования TIF в PDF, поэтому застрял в использовании iTextSharp. Любые идеи/предложения о том, как получить эти файлы сжатия TIF JPEG для создания PDF-файлов меньшего размера, как и для других сжатий TIF?

Цените свою помощь!

С уважением, AG

+1

Какую версию iTextSharp вы используете. С каждой новой версией мы добавили поддержку более TIFF-версий. –

+0

Я использую v5.5.4.0. Если есть более новая версия, чем это, сообщите мне. Я также могу проверить эту версию. – user4765592

+0

5.5.5.0 является последним, но 5.5.4.0 достаточно недавно для обновлений TIFF. Возможно, это то, что должно быть опубликовано в команде поддержки iText, так как не должно быть существенной разницы между iTextSharp и iText. Где они могут связаться с вами, чтобы получить образец файла TIFF, который воспроизводит проблему? –

ответ

3

Я был в состоянии воспроизвести вашу проблему с кодом, которую вы предоставили, но обнаружил, что проблема ушла, когда я использовал Image.GetInstance вместо растрового изображения, используемого в вашей выборке. При использовании приведенного ниже кода размер файла и время выполнения были одинаковыми между Java и C#. Если у вас есть вопросы по образцу, не стесняйтесь спрашивать.

 List<string> TIFfiles = new List<string>(); 
     Document document; 
     PdfWriter pdfwriter; 
     iTextSharp.text.Image tifFile; 
     String pdfFilename = pdfFile; 
     TIFfiles = new List<string>(); 
     TIFfiles.Add(tifFile1); 
     TIFfiles.Add(tifFile2); 
     TIFfiles.Add(tifFile3); 
     TIFfiles.Add(tifFile4); 
     TIFfiles.Add(tifFile5); 
     TIFfiles.Add(tifFile6); 
     TIFfiles.Add(tifFile7); 

     //Create document 
     document = new Document(); 

     // creation of the different writers 
     pdfwriter = PdfWriter.GetInstance(document, new System.IO.FileStream(pdfFilename, FileMode.Create)); 

     document.Open(); 
     document.SetMargins(0, 0, 0, 0); 
     int i = 0; 
     while (i < 50) 
     { 
      foreach (string file in TIFfiles) 
      { 

       //load the tiff image 
       tifFile = iTextSharp.text.Image.GetInstance(file); 

       //Total number of pages 

       iTextSharp.text.Rectangle pgSize = new iTextSharp.text.Rectangle(tifFile.Width, tifFile.Height); 
       document.SetPageSize(pgSize); 
       document.NewPage(); 

       PdfContentByte cb = pdfwriter.DirectContent; 

       // scale the image to fit in the page 
       tifFile.SetAbsolutePosition(0, 0); 
       cb.AddImage(tifFile); 

      } 
      i++; 
     } 
     document.Close(); 
+0

Отлично! Я внес изменения, которые вы предложили, и это работает и для меня. Благодаря тонну! – user4765592