Часто бывает нужно объединить несколько документов в один (например PDF). Это могут быть несколько глав документации, разделы каталогов и т.д. Строго говоря, это бывает нужно сделать не только для PDF, просто сам по себе формат не предполагает редактирования и “склеивания” без спецсредств, потому лучше бы его сразу “готовить правильно”.
Сегодня я расскажу, как это сделать в FastReport VCL и FMX. В нашем случае на входе будут несколько отчётов - а на выходе - один файл.
Итак, я полагаю, проект, использующий FastReport у нас уже есть, сами шаблоны подготовлены. В нашем примере это файлы, лежащие на диске, но ничего не мешает брать их из базы или каких-то ещё источников. Теперь осталось собрать из двух (или более) отчётов - один, но большой.
Для этого в FastReport есть средства, позволяющие “пристроить” новый отчет в дополнение к уже существующему. Метод TfrxReport.PrepareReport имеет один необязательный параметр ClearLastReport: Boolean, по умолчанию он равен True. Этот параметр определяет, надо ли очищать страницы ранее построенного отчета. Следующий пример показывает, как построить пакет из двух отчетов:
Pascal: | |
1 2 3 4 5 |
frxReport1.LoadFromFile('1.fr3'); frxReport1.PrepareReport; frxReport1.LoadFromFile('2.fr3'); frxReport1.PrepareReport(False); frxReport1.ShowPreparedReport; |
C++: | |
1 2 3 4 5 |
frxReport1->LoadFromFile("1.fr3"); frxReport1->PrepareReport(true); frxReport1->LoadFromFile("2.fr3"); frxReport1->PrepareReport(false); frxReport1->ShowPreparedReport(); |
Мы загружаем первый отчет и строим его, не показывая на экране. Затем загружаем второй отчет в этот же объект TfrxReport и строим его с параметром ClearLastReport = False. При этом отчет добавляется к ранее построенному.
Предпоследние две строчки, очевидно, мы можем повторять с целью добавить ещё какие-то отчёты в наш “композитный комплексный отчёт”. И эта часть возможна только из кода.
А, когда мы все построили - можем увидеть объединенные отчеты в предпросмотре и через него легко сохранить в любой формат и место.
После того, как нам удалось совместить два отчета в один, просто экспортируем его в PDF формат (да в принципе, в любой формат), например, RTF-DOC-ODT или табличные не настолько проблематично объединить уже после экспорта, а для PDF это актуально Тут можно дать волю пользователю выбрать формат сохранения и настройки:
Кликаем в предпросмотре на значок сохранения.
Выберем нужный формат - PDF.
У нас высветилось окно с параметрами экспорта.
Настраиваем все, что нам требуется.
Подробнее о создании и настройке можно узнать в статье:
А, когда закончили нажимаем ОК!
Ну или как-то так “frxReport1.Export(frxPDFExport1);”
Подробнее параметры сохранения в различные форматы из кода Delphi, Lazarus, С++ Builder я расписывал в предыдущих статьях.
После создания можем открыть созданный документ. Открыв, увидим последовательное отображение наших отчетов в одном PDF документе.
Объединение двух отчетов PDF из Delphi, Lazarus, С++ Builder не так сложно, как казалось бы.