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

  • Tutorial
Для приготовления преобразования из HTML и URL в PDF и PS нам понадобится сам nginx, генератор htmldoc и плагин ngx_http_htmldoc_module. (Я дал ссылки на свои форки, т.к. делал некоторые изменения, которые пока не удалось пропихнуть в оригинальный репозитории. Можно также воспользоваться готовым образом.)

Для преобразования из HTML и URL в PDF и PS
location =/file2pdf { file2pdf "file.html"; } # преобразуем FILE в PDF
location =/file2ps { file2ps "file.html"; } # преобразуем FILE в PS
location =/file2pdf { file2pdf "file1.html" "file2.html"; } # преобразуем несколько FILE в PDF
location =/file2ps { file2ps "file1.html" "file2.html"; } # преобразуем несколько FILE в PS

location =/html2pdf { html2pdf "Здравствуй, мир!"; } # преобразуем HTML в PDF
location =/html2ps { html2ps "Здравствуй, мир!"; } # преобразуем HTML в PS
location =/html2pdf { html2pdf "Здравствуй, мир!" "До свидания, мир!"; } # преобразуем несколько HTML в PDF
location =/html2ps { html2ps "Здравствуй, мир!" "До свидания, мир!"; } # преобразуем несколько HTML в PS

location =/url2pdf { url2pdf "https://google.com"; } # преобразуем URL в PDF
location =/url2ps { url2ps "https://google.com"; } # преобразуем URL в PS
location =/url2pdf { url2pdf "https://google.com" "https://google.ru"; } # преобразуем несколько URL в PDF
location =/url2ps { url2ps "https://google.com" "https://google.ru"; } # преобразуем несколько URL в PS
  • +12
  • 4,6k
  • 8
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 8

    0

    А в две колонки текст разбивает корректно? С «правильной» нарезкой по страницам?

      0
      ну, это уже, скорее всего вопрос к wt и libharu
      0

      Попробуйте печать в PDF с помощью chromium-browser:


      exec('chromium-browser --headless --disable-sync --disable-gpu --no-first-run --hide-scrollbars --enable-automation --password-store=basic'
              .' --run-all-compositor-stages-before-draw'
          . ' --window-size=1920,1080 --no-sandbox'
          .' --print-to-pdf='.escapeshellarg($pdfPath).' --no-margins'
          .' '.escapeshellarg('file://'.$htmlFile), $output, $exitcode);
        +1
        Вооще да, раньше такое было принято пилить отдельно от процесса энжинкса и просто передавать запрос на соответствующий бекенд для процессинга. Да, не фильтр, но можно же сложить содержимое ответа в файл, а потом отдать его хедером в бекенд на той же машине. Может это всё уже старо как мир и энжинкс стал таки сервером приложений.
        +1

        Я все таки не понял, что не так с wkhtmltopdf? Сишный демон зависает если процес больше минуты ждёт io? Тогда как нджинкс решает данную проблему? Тем что там готовый плагин компилится?)
        Мы у себя как раз взяли wkhtmltopdf и сворганили на go обёртку микросервис для http api — https://github.com/opsway/documents работает как часы.

          0
          Мы у себя как раз взяли wkhtmltopdf и сворганили на go обёртку микросервис для http api — github.com/opsway/documents работает как часы.
          Дак у вас используется обёртка над консольным wkhtmltopdf!
          Т.е. при каждой генерации запускается новый процесс wkhtmltopdf.

          К тому же, в nginx и так уже есть готовый плагин для запуска внешних программ, с помощью которого не составит труда запускать в том числе и консольный wkhtmltopdf.
            0
            Пока из опыта работы с wkhtmltopdf я столкнулся только с одной проблемой — при генерации протоколов с количеством страниц более 300 демон умирает на этапе установки нижних колонтитулов. Без колонтитулов нормально, формируется… но если их включить то он уже не может отработать.

            Так-же есть проблема с формированием документа если в ячейске таблицы текста больше чем может вместиться в 1 станицу. В таком случае часть теста переходит на другую страницу и идет наложение на текст следующей ячейки.
              0
              Тогда надо, наверное, уже использовать latex, вот только я что-то не могу найти c-библиотеку для него: очень не хотелось бы просто запускать команду!

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое