Я использую iTextSharp для создания PDF-файла, и я уже добавил этот код:
.....................................................
PdfWriter writer = PdfWriter.GetInstance(document, filestream);
writer.SetPdfVersion(PdfWriter.PDF_VERSION_1_5);
writer.CompressionLevel = PdfStream.BEST_COMPRESSION;
writer.SetFullCompression();
.....................................................
Размер файла составляет 106 МБ, а затем я открываю из Acrobat и сохраняю, размер файла становится только 5 МБ.
Обновление 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 могут сильно влиять две вещи: шрифт и изображения, обычно оба встроены в файл, и то, как программа их обрабатывает, может оказать большое влияние на конечный размер файла. Например, если у вас есть одно и то же изображение, которое повторяется 10 раз в вашем файле PDF, то одно приложение может сохранить 10 копий одного и того же изображения в файле PDF, а другая программа может выяснить, что эти 10 изображений действительно одинаковы и держите только одну копию. Та же проблема может возникнуть для данных шрифта.
Сжатие обычно может влиять на размер файла, но вряд ли оно колеблется между 5М и 106М. Существует случай, когда это действительно может произойти, когда изображение с высоким разрешением, очевидно, занимает больше места, чем изображение с низким разрешением. Так, например, если в вашем файле PDF есть изображение с разрешением 1200 т / д, инструмент может открыть его и уменьшить разрешение до 120 т / д, что значительно уменьшает размер файла. в то время как разрешение 1200 точек на дюйм — очень высокое разрешение, разрешение 120 точек на дюйм — совсем неплохо, и все равно может хорошо выглядеть на экране. Это то, что делает так называемый «компрессор PDF», чтобы сделать файл значительно меньше, но без «видимой» потери качества. Другими словами, они на самом деле ничего не сжимают, они просто выбрасывают 90% деталей изображения. 🙂
Чтобы выяснить, в чем проблема, вы можете попробовать другую библиотеку PDF и посмотреть, что с ними получится. Вот достойный (но не бесплатный), который вы можете попробовать:
http://www.essentialobjects.com/Products/EOPdf/Default.aspx
Вы можете просто использовать пробную версию, чтобы увидеть, дает ли она тот же результат, и это может помочь вам выяснить, что происходит.
Других решений пока нет …