Вам доступно несколько вариантов. То, что вы выберете, будет зависеть от того, сколько времени и денег вы готовы инвестировать. Чем больше вы готовы инвестировать, тем лучше вы получите отчеты
Выполните поиск в Google по сценариям / исполняемым файлам, которые возьмут текстовый файл и преобразуют в PDF. Примеры включают в себя txt2pdf. Они работают с любыми текстовыми файлами и поэтому не зависят от 4gl. Вы изменили бы свой код 4gl, чтобы выполнить его через RUN сразу после ОТЧЕТА О ФИНИСЕ
Напишите библиотеки 4gl для создания правильного вывода PDF. Это включает в себя чтение руководств в формате PDF, чтобы увидеть структуру, необходимую в файле PDF. Первая строка полученного файла будет начинаться с «% PDF». Это большая работа, я сделал это 15-20 лет назад, я бы не стал делать это снова, если бы вы не хотели контроля и независимости, которые это дает вам.
Использование такого продукта, как FourJs Genero, который позволит вам использовать существующий код 4gl для непосредственного создания отчетов в формате PDF. В самом простом случае это включает добавление пары строк перед вашим START REPORT и оставление оператора REPORT без изменений. В отчете будет использоваться моноширинный шрифт, который будет выглядеть как существующий отчет, только это PDF-файл, а не TXT-файл.
IF fgl_report_loadCurrentSettings(NULL) THEN -- simple compatibility mode
CALL fgl_report_selectDevice("PDF") -- indicates PDF
... -- optional calls to indicate filename, paper, printer and other options if required
LET grw = fgl_report_commitCurrentSettings()
START REPORT report-name TO XML HANDLER grw
При использовании этого параметра доступно несколько дополнительных параметров конфигурации, таких как добавление водяных знаков / логотипов на каждую страницу, которую бесплатные инструменты, которые вы обнаружите, могут не обеспечить
Более многофункциональная опция с использованием FourJs Genero Report Writer включает в себя извлечение любой информации о макете из кода 4gl и разработку макета отчета в конструкторе WYSIWYG. Ваш код 4gl, который собирает данные из базы данных и функции, которые формулируют вывод, остается нетронутым. Для оператора REPORT больше не требуется информация макета, такая как COLUMN 10, SKIP TO TOP OF PAGE, и ее можно удалить. WYSIWYG-дизайн отчета управляет макетом, включая полный набор свойств, таких как шрифт, атрибуты шрифта, расположение, разрывы страниц, нумерация страниц, изображения. Таким образом, ваш код 4gl становится
-- Report
-- No layout information in report, only need to gather and formulate data
REPORT report-name ...
BEFORE GROUP OF invoice
PRINT invoice.*
ON EVERY ROW
PRINT invoice_line.*
AFTER GROUP OF invoice
LET invoice_total.net = GROUP SUM(...)
PRINT invoice_total.*
END REPORT
...
-- Produce report
IF fgl_report_loadCurrentSettings("reportdesign.4rp") THEN -- load the WYSIWYG design
CALL fgl_report_selectDevice("PDF") -- indicates PDF
... -- calls to indicate filename, paper, printer and other options if required
LET grw = fgl_report_commitCurrentSettings()
START REPORT report-name TO XML HANDLER grw
Как показано, вам доступно несколько вариантов. От того, что вы должны делать, зависит от вашей цели и того, сколько времени и денег вы готовы инвестировать для достижения этой цели.