Рецепты PostgreSQL: преобразование из HTML в PDF

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Для приготовления преобразования из HTML в PDF нам понадобится сам postgres и его расширение pg_html2pdf. (Я дал ссылки на свой форк postgres, т.к. делал некоторые изменения, которые пока не удалось пропихнуть в оригинальный репозиторий. Можно также воспользоваться готовым образом.)

Для начала устанавливаем расширение командой

CREATE EXTENSION pg_html2pdf

Ну а результат генерации можно, например, отправлять на почту с помощью pg_curl так

create or replace function send(url text, username text, password text, subject text, "from" text, "to" text, data text, type text) returns text language sql as $body$
with s as (select
    curl.pg_curl_easy_init(),
    curl.pg_curl_easy_reset(),
    curl.pg_curl_easy_setopt('CURLOPT_VERBOSE', 1),
    curl.pg_curl_easy_setopt('CURLOPT_URL', url),
    curl.pg_curl_easy_setopt('CURLOPT_USERNAME', username),
    curl.pg_curl_easy_setopt('CURLOPT_PASSWORD', password),
    curl.pg_curl_recipient_append("to"),
    curl.pg_curl_header_append('Subject', subject),
    curl.pg_curl_header_append('From', "from"),
    curl.pg_curl_header_append('To', "to"),
    curl.pg_curl_mime_data(data, type:=type),
    curl.pg_curl_mime_data('Тест 3', file:='=?utf-8?B?'||encode('Проверка 3.txt', 'base64')||'?=', type:='text/plain; charset=utf-8', code:='base64'),
    curl.pg_curl_mime_file(array['/data/Проверка.txt', '/data/Проверка 2.txt'], file:=array['=?utf-8?B?'||encode('Проверка.txt', 'base64')||'?=', '=?utf-8?B?'||encode('Проверка 2.txt', 'base64')||'?='], type:=array['text/plain; charset=utf-8', 'text/plain; charset=utf-8'], code:=array['base64', 'base64']),
    curl.pg_curl_mime_data(html2pdf('<p style="background-color: #c11">Здравствуй, мир!</p>'), file:='=?utf-8?B?'||encode('Проверка 2.pdf', 'base64')||'?=', type:='application/pdf', code:='base64'),
    curl.pg_curl_header_append('Connection', 'close'),
    curl.pg_curl_easy_perform(),
    curl.pg_curl_easy_getinfo_char('CURLINFO_HEADERS'),
    curl.pg_curl_easy_cleanup()
) select pg_curl_easy_getinfo_char from s;
$body$;

И всё это можно выполнять асинхронно в фоне с помощью планировщика.
Источник: https://habr.com/ru/post/458986/


Интересные статьи

Интересные статьи

Кто бы что ни говорил, но я считаю, что изобретение велосипедов — штука полезная. Использование готовых библиотек и фреймворков, конечно, хорошо, но порой стоит их отложить и создать ...
В самом сердце проекта Actual, который предназначен для управления персональными финансами, лежит система синхронизации данных собственной разработки. Недавно я реализовал в проекте п...
Используете для создания приложений Vue, React, Angular или Svelte? Я использую, и если вы тоже, и уверен, что вам уже давно не приходилось писать приложение, которое выводит информацию без эти...
В прошлый раз мы познакомились с устройством одного из важных объектов разделяемой памяти, буферного кеша. Возможность потери информации из оперативной памяти — основная причина необходимости сре...
Одной из «киллер-фич» 12й версии Битрикса была объявлена возможность отдавать статические файлы из CDN, тем самым увеличивая скорость работы сайта. Попробуем оценить практический выигрыш от использова...