在C#中压缩PDF到更小的尺寸(即1MB到300kb)

时间:2016-05-31 10:54:07

标签: c# asp.net pdf compression ext.net

如果pdf文件超过5Mb,我想将pdf文件保存到数据库,然后数据库变为重载或负载更多no.of文件。所以我想减少Pdf文件的大小尽可能少... 。 我尝试了以下代码,但没有工作。请帮助将大PDF压缩到更小的尺寸。例如,如果PDF大小为2Mb,它将压缩到700Kb。我尝试了很多例子,但没有得到输出。所以请帮忙..

        PdfReader reader = new PdfReader("D:/User Guid for Artificial Skin.pdf");
        PdfStamper stamper = new PdfStamper(reader, new FileStream("d:/pdfdoccompressed.pdf", FileMode.Create), PdfWriter.VERSION_1_5);
        reader.SetPageContent(1, reader.GetPageContent(1));
        int pageNum = reader.NumberOfPages;
        for (int i = 1; i <= pageNum; i++)
        {
            reader.SetPageContent(i, reader.GetPageContent(i));
        }
        stamper.FormFlattening = true;
        stamper.Writer.CompressionLevel = PdfStream.BEST_COMPRESSION;
        stamper.SetFullCompression();
        stamper.Close();

1 个答案:

答案 0 :(得分:1)

lossless compression的要点是,您可以压缩数据的结果。当将文件视为容器并在其上应用通用压缩算法时,您不会对文件进行太多的缩减,因为默认情况下它们已经非常优化地保存。

非常简化:当PDF文件包含许多未使用(嵌入)的对象(如字体和表单字段)和未优化的图像时,通常只会显着缩小。您找到的任何优化器都会简单地丢弃未使用的对象,并通过将它们保存在每英寸较少的点数(&#34;较小的分辨率&#34;),每像素较少的位数(&#34;较小的bitdepth&#34; ) 或两者。

因此,通过将PdfStream.BEST_COMPRESSION传递给PdfStamper,您已经尽力而为。你不能轻易地和显着地压缩PDF,这比PdfStamper已经做的要多得多。

但是,根据您的评论和编辑,您似乎害怕将来这会损害您的数据库(即使它的设计包含数据,以及很多数据)。但是,这种担忧并不足以让我们帮助你。

因此,请参阅以前许多关于您是否确实应该存储数据的讨论:

还有很多人。