Наскоро имах ситуация, в която исках бързо да експортирам данни от източник на база данни в PDF файлове. Исках да създам документ за всеки доброволец, където те могат да проверят информацията си и други подробности. Можех да разреша това със скрипт Node.js или с JVM библиотека, но реших да опитам нещо ново за мен: възможностите на стандартен офис пакет. Предпочитайки FOSS, LibreOffice беше логичният избор. Бях изненадан колко лесно и плавно върви всичко и определено ще обмисля това за подобни бъдещи проекти.

Голямо предимство на използването на това пред пакети като pdfkit, html-pdf и lx-pdf е, че получавате пълните възможности на текстов процесор. Помага много, ако имате стандартен шаблон, към който трябва да се придържате: перфектното пресъздаване на такъв шаблон в HTML или инструкции може да отнеме много време.

Зависимости

Ще ви трябват LibreOffice Writer и LibreOffice Base.

sudo apt-get install libreoffice-base libreoffice-writer

JDBC драйвер

Имаме нужда от драйвер, за да се свържем с Postgres от LibreOffice.

sudo apt-get install libreoffice-sdbc-postgresql

Можете също така ръчно да инсталирате разширението LibreOffice. Вижте тук за повече информация. Може да се наложи да затворите всички приложения на LibreOffice, за да приложите напълно разширението.

Настройка на връзката към базата данни

Отворете LibreOffice Base. Ще се свържем с нашата съществуваща база данни Postgres. За да направите това, изберете Connect to an existing database и изберете PostgreSQL. Ако PostgreSQL не е в списъка, не сте инсталирали успешно разширението LibreOffice. Може да се наложи да затворите всички приложения на LibreOffice, за да приложите напълно разширението.

В следващия екран въведете низа за връзка. Трябва да изглежда като postgresql://host:port/database_name. Не предоставяте потребителско име или парола в низа за връзка, можете също да направите това в следващата стъпка.

Сега можете да предоставите подробности за удостоверяване за базата данни. Можете също да тествате връзката тук.

По време на последната стъпка можете да запазите създадената от вас база данни. Не забравяйте да проверите Yes, register the database for me, това ще регистрира базата данни, така че да имате достъп до нея от други приложения на LibreOffice. Проверих и Open the database for editing, само за да проверя дали всичко работи.

Създаване на шаблон

Сега отворете LibreOffice Writer. Отидете на View > Data Sources или натиснете F4, за да отворите прозореца Източници на данни. Изберете вашата база данни и отворете изгледа Tables. Ще намерите вашите таблици чак надолу, с префикс public. (освен ако не сте използвали друга схема).

Вече можете да създадете шаблонен файл. Ако искате да използвате променливо поле, можете да плъзнете колона от изгледа Data Sources. Например, за да получа първото име, плъзнах колоната first_name в документа. Кликнете върху името на колоната (в примера first_name) и плъзнете каретката в текста.

Създаване на получените документи

Имам 36 реда в таблицата, която искам да използвам. Вече мога да избера да ги експортирам в един документ (резултатът ще бъде един документ с 36 страници) или в отделни документи (резултатът ще бъде 36 отделни документа). Тъй като ще изпратя получените документи на отделни хора, ще създам индивидуални документи.

Можете да експортирате документа, като отворите диалоговия прозорец за печат (File > Print... или Ctrl+P). Когато направите това, LibreOffice Writer ще ви попита Your document contains address database fields. Do you want to print a form letter?. Изберете Yes.

В следващия диалогов прозорец можете да изберете записите, които трябва да се използват, и да контролирате изходните настройки. Ще извеждаме във файл, а не да печатаме, така че изберете File за Output. Отивам за отделни документи, чието име е персонализирана колона в заявка, която написах. Можете също така да използвате колона от база данни.

След експортиране ще получите отделни документи. След като експериментирах, избирам да експортирам в PDF. Файловете вече могат да се изпращат на отделни хора, за да проверят данните си.