Недавно у меня была ситуация, когда я хотел быстро экспортировать данные из источника базы данных в 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. Мы собираемся подключиться к нашей существующей базе данных 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. Файлы теперь можно отправлять отдельным людям, чтобы они проверили свои данные.