通过iTextSharp创建的pdf文件大小很大

时间:2013-11-20 21:25:29

标签: c++ visual-studio itext

我正在使用iTextSharp创建PDF文件,我已经添加了这些代码:

 .....................................................
 PdfWriter writer = PdfWriter.GetInstance(document, filestream);
 writer.SetPdfVersion(PdfWriter.PDF_VERSION_1_5);
 writer.CompressionLevel = PdfStream.BEST_COMPRESSION;
 writer.SetFullCompression();
 .....................................................

文件大小为106M,然后我从Acrobat打开并保存,该文件的大小只有5M。

更新1: 我的代码的主要部分如下所示:

for (var chart in charts.records)
{                  
   Stream kpistream = Assembly.GetExecutingAssembly().GetManifestResourceStream("KPIInfo." + "kpi.pdf");
   PdfReader kpireader = new PdfReader(kpistream);
   MemoryStream ms = new MemoryStream();
   PdfStamper stamper = new PdfStamper(kpireader, ms);

   //some code here to insert a image to stamper      
   stamper.FormFlattening = true;
   AcroFields acrofileds = stamper.AcroFields;
   acrofileds.SetField("ID", chart.KPIId.Trim());
   // a couple of lines here to set the other acro fields
   stamper.Close();
   MergePages(document, writer, ms.ToArray());// this line is for adding this new created page to main pdf file
   ms.Close();
 }

更新2:

public static void MergePages(Document document, PdfWriter writer, byte[] bytes)
{
  PdfReader reader = new PdfReader(bytes);
  for (int index = 1; index <= reader.NumberOfPages; index++)
  {
     document.NewPage();

     PdfImportedPage page = writer.GetImportedPage(reader, index);
     PdfContentByte content = writer.DirectContent;
     content.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
  }
}

有谁知道为什么?

1 个答案:

答案 0 :(得分:3)

有两件事会影响PDF文件的大小:字体和图像,通常都嵌入在文件中,程序如何处理它们会对最终文件大小产生很大影响。例如,如果您在PDF文件中具有重复10次的相同图像,则一个应用程序可能会选择在PDF文件中保留同一图像的10个副本,而另一个程序可能会发现这10个图像实际上是相同的,只保留一份。字体数据可能会出现同样的问题。

压缩通常会影响文件大小,但不大可能在5M到106M之间变化。有一种情况确实会发生这种情况,即高分辨率图像显然比低分辨率图像占用更多空间。因此,例如,如果PDF文件中有1200 dpi图像,则工具可以打开它并将分辨率降低到120 dpi,从而大大减小文件大小。虽然1200 dpi是一个非常高的分辨率,120 dpi一点也不差,但仍然可以在屏幕上看起来很好。这就是所谓的“PDF压缩器”确实使文件显着缩小但没有“可见”的质量损失。换句话说,他们并没有真正压缩任何东西,他们只是丢掉了90%的图像细节。 :)

要找出问题所在,您可能需要尝试其他PDF库并查看其中的内容。这是一个体面的(但不是免费的)你可以尝试:

http://www.essentialobjects.com/Products/EOPdf/Default.aspx

您可以使用试用版查看它是否会为您提供相同的结果,这可能有助于您了解正在发生的事情。