В комментариях к статье "Создание 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 :-)
ОтветитьУдалить