В комментариях к статье "Создание PDF файла в Windows и Linux" читатели рассказали о использовании для создания документов в формате PDF генератора отчетов FastReport. У меня уже был подобный опыт, и я даже писал об этом 10 лет тому назад. Сейчас я не стал приводить пример с FastReport, так как моя статья была написана еще до выхода FastReport FMX версии 2.8, в которой была добавлена поддержка FmxLinux. Сегодня я сделал несколько первых экспериментов с FastReport FMX под Ubuntu Desktop 20.04. Он действительно работает под Linux! Запускать мой тест экспорта в PDF я решил, как и в прошлой статье, не под Ubuntu Desktop, а под Ubuntu Server.
Беглый взгляд на исходный текст модуля FMX.frxExportPDF позволяет сделать вывод, что класс TfrxPDFExport рассчитан на экспорт наследников класса TfrxView. Класс TfrxView является базовым для объектов, которые можно разместить на странице шаблона FastReport. Это значит, что использовать TfrxPDFExport отдельно от генератора отчетов не получится.
Сделаем тестовый шаблон для FastReport (для этого я воспользовался демо-программой из инсталлятора FastReport). И напишем небольшую программу, которая загрузит тестовый шаблон, сгенерирует отчет и экспортирует его в файл формата PDF.
Беглый взгляд на исходный текст модуля FMX.frxExportPDF позволяет сделать вывод, что класс TfrxPDFExport рассчитан на экспорт наследников класса TfrxView. Класс TfrxView является базовым для объектов, которые можно разместить на странице шаблона FastReport. Это значит, что использовать TfrxPDFExport отдельно от генератора отчетов не получится.
Сделаем тестовый шаблон для FastReport (для этого я воспользовался демо-программой из инсталлятора FastReport). И напишем небольшую программу, которая загрузит тестовый шаблон, сгенерирует отчет и экспортирует его в файл формата PDF.
program frPdf; {$APPTYPE CONSOLE} uses System.SysUtils, FMX.frxClass, FMX.frxExportPDF; procedure Test; var frxReport: TfrxReport; frxPDFExport: TfrxPDFExport; begin frxReport := TfrxReport.Create(nil); try frxReport.ShowProgress := False; if frxReport.LoadFromFile('test.fr3') and frxReport.PrepareReport then begin frxPDFExport := TfrxPDFExport.Create(nil); try frxPDFExport.ShowDialog := False; frxPDFExport.ShowProgress := False; frxPDFExport.EmbeddedFonts := True; frxPDFExport.FileName := 'test.pdf'; frxReport.Export(frxPDFExport); finally frxPDFExport.Free; end; end; finally frxReport.Free end; end; begin ReportMemoryLeaksOnShutdown := True; try test except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end.Проверяем ее работоспособность под Windows. Затем компилируем версию под Linux, запускаем на Ubuntu Server и получаем ошибку: Не работает. Но зато мы узнали, что FastReport под Linux для графического интерфейса пользователя использует GTK 3. Устанавливаем GTK 3:
Запускаем программу и получаем еще больше ошибок: Теперь FastReport хочет Window. Точнее X Window. Воспользуемся Xvfb (X virtual framebuffer). Xvfb – это виртуальный X11-сервер, который реализует поддержку протокола X Window и выполняет все графические операции в памяти без вывода на экран. С точки зрения GUI-клиента он ничем не отличается от обычного X11-сервера. Устанавливаем Xvfb:sudo apt-get install libgtk-3-dev
Запускаем программу с использованием Xvfb-сервераsudo apt-get install xvfb
и получаем PDF-файл Для меня вывод очевиден. Если поставленная задача позволяет представить необходимый документ в виде шаблона, то вместо специальной библиотеки для создания документов в формате PDF, удобнее использовать генератор отчетов FastReport. Тем более, что теперь он кроссплатформенный и поддерживает Windows, Linux и MacOS.xvfb-run ./frPdf
Для полной кроссплатформенности у FastReport не хватает Android и iOS :-)
ОтветитьУдалить