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



我想将pdf文件保存到数据库中,如果pdf文件超过5Mb,那么数据库将变得沉重或负担更大。因此,我想尽可能减少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();

无损压缩的关键在于,压缩数据的量是无限的。当将文件视为容器并对其应用通用压缩算法时,您不会对文件进行太多压缩,因为默认情况下,它们已经以最佳方式保存。

非常简单:PDF文件通常只有在包含许多未使用(嵌入)的对象(如字体和表单字段以及未优化的图像)时才能变得更小。你找到的任何优化器都会简单地删除未使用的对象,并通过将它们保存为每英寸更少的点("较小的分辨率")、每像素更少的位("更小的位深度")或两者兼有来缩小这些图像。

因此,通过将PdfStream.BEST_COMPRESSION传递给PdfStamper,您已经在尽您所能。您根本无法像PdfStamper那样对PDF进行琐碎而显著的压缩。

然而,从你的评论和编辑来看,你只是担心这会在未来损害你的数据库(尽管它是为包含数据而设计的,而且包含很多数据)。但这种担忧还不够具体,我们无法帮助您。

因此,请参阅之前关于是否应该这样存储数据的许多讨论:

  • BLOB与文件系统
  • 程序员:在数据库中存储大文件(10MB)是不是一种糟糕的做法
  • MS研究:去BLOB还是不去BLOB:数据库或文件系统中的大型对象存储(PDF)
  • DBA.SE:文件-是否在数据库中

还有很多其他的。

最新更新