В списке новшеств FastReport VCL 5 значится "В PDF-экспорт улучшено встраивание шрифтов: вместо целого шрифта встраивается только используемое в отчёте подмножество символов шрифтов. Это позволяет значительно сократить размер файла". В своих программах я часто работаю с документами в PDF-формате, поэтому вопрос размера документа, экспортированного из FastReport в PDF-файл меня интересует.
Много лет тому назад я делал программу, которая при добавлении записи в базу данных генерировала документ в FastRepot, экспортировала его в PDF-файл и отправляла по электронной почте. Из-за использования электронной почты передо мной стояла задача минимизации размера PDF-файла. Для этого я провел тестирование различных вариантов экспорта документа из FastReport в PDF-формат:
Для того, чтобы текст в PDF-документе выглядел одинаково на различных устройствах существует возможность встроить используемый шрифт в PDF-файл как ресурс. Если шрифт не встроен в PDF-документ, то Acrobat Reader попробует найти его на компьютере. Если шрифт найти не удалось, то Acrobat Reader попробует эмулировать его и текст будет читаемый, но документ будет выглядеть по-другому. Большинство программ для просмотра и печати документов в формате PDF этого делать не умеют. Поэтому единственная возможность всегда корректно отобразить PDF-документ - это встроить в него используемые шрифты. Единственным недостатком встраивания шрифта является существенное увеличение размера PDF-файла.
TfrxPDFExport тоже умеет встраивать используемые шрифты в PDF-файл. Для этого у него есть свойство "EmbeddedFonts". Если оно True, то, согласно документации к FastReport 4, "все шрифты, использованные в отчете, будут также помещены в выходной файл PDF для корректного отображения файла на компьютере, где этих шрифтов может не быть, размер выходного файла значительно увеличивается". Не зря автор документации выделил слова "значительно" жирным шрифтом. Экспорт в PDF со встроенными шрифтами в FastReport 3-4 увеличивал размер файла в десятки, а то и сотни раз (в зависимости от используемых шрифтов и их количества), сводя возможность его использования к нулю.
После экскурса в теорию и историю, проверим как обстоят дела с размером файла у экспорта в PDF сейчас. Для этого я использовал три версии FastReport:
Размер полученного файла очень сильно зависит от встраиваемого шрифта. Например, если в этом шаблоне "Arial" заменить на "Times New Roman", то размер PDF-файла вырастет на 1%, а если "Arial" заменить на "Forte", то уменьшится в 10 раз.
А вот результаты экспорта одностраничного документа, шаблон которого содержит MasterData с десятью MemoView, у каждого из которых установлен свой шрифт (размер файла в байтах):
Видно, что от версии к версии размер получаемого PDF-файла без встраивания шрифтов почти не меняется. Чего не скажешь о размере PDF-файла со встроенными шрифтами. Экспорт в FastReport 4.11 справляется с этим значительно хуже новой версии. Но почему у версий 4.15 и 5.04 получился такой похожий результат? оО Сравнив содержимое frxExportPDF.pas этих версий легко убедиться, что они почти совпадают. Оказывается, "по просьбам трудящихся" разработчики FastReport включили экспорт в PDF из первого релиза FastReport VCL 5 в последнюю версию FastReport VCL 4.
Итак, новый экспорт документов из FastReport в формат PDF, разработанный для FastReport VCL 5, создает файлы меньшего размера, чем экспорт предыдущих версий. Если при экспорте в PDF без встраивания шрифтов, эта разница еле заметна, то при экспорте в PDF со встраиванием шрифтов файлы получаются меньше в 6,5 раз для документа с одним шрифтом и более чем в 13 раз для документа, содержащего в себе 10 шрифтов.
Много лет тому назад я делал программу, которая при добавлении записи в базу данных генерировала документ в FastRepot, экспортировала его в PDF-файл и отправляла по электронной почте. Из-за использования электронной почты передо мной стояла задача минимизации размера PDF-файла. Для этого я провел тестирование различных вариантов экспорта документа из FastReport в PDF-формат:
- экспорт с помощью библиотеки экспорта от сторонних производителей (например, RareFind FastReport Export Filters);
- экспорт с помощью входящего в FastReport класса TfrxPDFExport;
- экспорт с использованием библиотек для работы с PDF-файлами (например, llPDFLib).
Для того, чтобы текст в PDF-документе выглядел одинаково на различных устройствах существует возможность встроить используемый шрифт в PDF-файл как ресурс. Если шрифт не встроен в PDF-документ, то Acrobat Reader попробует найти его на компьютере. Если шрифт найти не удалось, то Acrobat Reader попробует эмулировать его и текст будет читаемый, но документ будет выглядеть по-другому. Большинство программ для просмотра и печати документов в формате PDF этого делать не умеют. Поэтому единственная возможность всегда корректно отобразить PDF-документ - это встроить в него используемые шрифты. Единственным недостатком встраивания шрифта является существенное увеличение размера PDF-файла.
TfrxPDFExport тоже умеет встраивать используемые шрифты в PDF-файл. Для этого у него есть свойство "EmbeddedFonts". Если оно True, то, согласно документации к FastReport 4, "все шрифты, использованные в отчете, будут также помещены в выходной файл PDF для корректного отображения файла на компьютере, где этих шрифтов может не быть, размер выходного файла значительно увеличивается". Не зря автор документации выделил слова "значительно" жирным шрифтом. Экспорт в PDF со встроенными шрифтами в FastReport 3-4 увеличивал размер файла в десятки, а то и сотни раз (в зависимости от используемых шрифтов и их количества), сводя возможность его использования к нулю.
После экскурса в теорию и историю, проверим как обстоят дела с размером файла у экспорта в PDF сейчас. Для этого я использовал три версии FastReport:
- 4.11 - была установлена у меня на момент релиза FastReport VCL 5;
- 4.15 - последняя версия FastReport VCL 4 на текущий момент;
- 5.04 - текущая версия FastReport VCL 5.
Версия FastReport | EmbeddedFonts=False | EmbeddedFonts=True | Увеличение в, раз |
4.11 | 2 367 | 520 294 | 220 |
4.15 | 2 357 | 80 933 | 34 |
5.04 | 2 351 | 77 905 | 33 |
А вот результаты экспорта одностраничного документа, шаблон которого содержит MasterData с десятью MemoView, у каждого из которых установлен свой шрифт (размер файла в байтах):
Версия FastReport | EmbeddedFonts=False | EmbeddedFonts=True | Увеличение в, раз |
4.11 | 13 316 | 9 762 210 | 733 |
4.15 | 13 386 | 750 136 | 56 |
5.04 | 13 307 | 730 183 | 55 |
Итак, новый экспорт документов из FastReport в формат PDF, разработанный для FastReport VCL 5, создает файлы меньшего размера, чем экспорт предыдущих версий. Если при экспорте в PDF без встраивания шрифтов, эта разница еле заметна, то при экспорте в PDF со встраиванием шрифтов файлы получаются меньше в 6,5 раз для документа с одним шрифтом и более чем в 13 раз для документа, содержащего в себе 10 шрифтов.
А ещё при встраивании шрифтов у них были утечки памяти. Жаль, что у нас пока нет FR5
ОтветитьУдалитьСпасибо за тест! Значит не зря я обновился на последнюю 4.15
ОтветитьУдалить1) Что касается встраивания шрифтов в pdf: У меня довольно много отчетов экспортируются в pdf, но встраивания шрифтов я не делаю, так как считаю, что если в отчете используются только стандартные шрифты (например Arial или Times New Roman) которые есть на компах большинства юзеров, то и pdf будет на большей части ПК выглядеть одинаково.
ОтветитьУдалитьЕсли я не прав, то поправьте меня ...
2) А вот один недостаток в экспорте в pdf у FR5 имеется, причем тянется он еще с FR3: Экспорт мемок с включенной опцией AllowHTMLTags делается в виде картинки вместо того, что бы использовать соответствующие pdf-тэги.
Кстати говоря, экспорт этих же мемок в rtf делается нормально, без использования картинок.