gpt4 book ai didi

c++ - 通过 iTextSharp 创建的 pdf 文件很大

转载 作者:行者123 更新时间:2023-11-30 02:50:49 25 4
gpt4 key购买 nike

我正在使用 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);
}
}

谁知道为什么?

最佳答案

有两件事会极大地影响 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

您可以只使用试用版看看它是否给您相同的结果,这可能会帮助您找出发生了什么。

关于c++ - 通过 iTextSharp 创建的 pdf 文件很大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20107354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com