2013-04-09 47 views
0

我使用iTextSharp的(LGPL/MPL)4.1.6取一個頁面範圍從現有的PDF流,壓縮它,並把它保存到一個新文件:爲什麼不是iTextSharp PdfWriter.CompressionLevel設置器更改值?

private static void CreateFile(Stream stream, string filename, int first, int last) 
{ 
    RandomAccessFileOrArray raf = new RandomAccessFileOrArray(stream); 
    PdfReader reader = new PdfReader(raf, null); 
    reader.SelectPages(string.Format("{0}-{1}", first, last)); 
    char version = reader.PdfVersion; // == '4' 
    using (FileStream fs = new FileStream(filename, FileMode.Create)) 
    { 
     PdfStamper stamper = new PdfStamper(reader, fs, PdfWriter.VERSION_1_5); 
     PdfWriter writer = stamper.Writer; 
     writer.SetPdfVersion(PdfWriter.PDF_VERSION_1_5); 
     writer.CompressionLevel = PdfStream.BEST_COMPRESSION; 
     // this will always be true - why? 
     if (PdfStream.DEFAULT_COMPRESSION == writer.CompressionLevel) 
     { 
      var help = "what am I doing wrong?"; 
     } 
     for (int i = 1; i <= reader.NumberOfPages; i++) 
     { 
      reader.SetPageContent(i, reader.GetPageContent(i)); 
     } 
     stamper.SetFullCompression(); 
     stamper.Close(); 
    } 
    reader.Close(); 
    raf.Close(); 
} 

壓縮線是新的。但是我注意到在壓縮代碼被添加之前和之後幾乎沒有文件大小的差異。在調試模式下逐步完成時,我看到CompressionLevel始終爲-1(默認值),即使我明確將其設置爲9(最佳)。

如何將壓縮級別設置爲最佳並讓其保持不變?

+0

報告錯誤,然後 – Xaqron 2013-04-09 21:28:36

回答

1

如果比較4.1.6 codecurrent code,你會看到他們的內部compressionLevel變量而不是財產的value執行範圍檢查。

4.1.6

public int CompressionLevel { 
    set { 
     if (compressionLevel < PdfStream.NO_COMPRESSION || compressionLevel > PdfStream.BEST_COMPRESSION) 
      compressionLevel = PdfStream.DEFAULT_COMPRESSION; 
     else 
      compressionLevel = value; 
    } 
    get { 
     return compressionLevel; 
    } 
} 

5.4.0

public int CompressionLevel { 
    set { 
     if (value < PdfStream.NO_COMPRESSION || value > PdfStream.BEST_COMPRESSION) 
      compressionLevel = PdfStream.DEFAULT_COMPRESSION; 
     else 
      compressionLevel = value; 
    } 
    get { 
     return compressionLevel; 
    } 
} 

4.x的系列已經不再支持,但你可以download the source你自己並作出改變。

+0

這樣做!國旗絕對改變了。但是,由此產生的分割文件大小與以前大致相同。我想我正在使用的原始文檔已經被壓縮了。 D'哦!謝謝。 – 2013-06-06 19:44:47

相關問題