Подтвердить что ты не робот

Как я могу автоматизировать преобразования HTML-to-PDF?

Я использую htmldoc какое-то время, но я столкнулся с некоторыми довольно серьезными ограничениями. Мне нужно конечное решение для работы с ящиком Linux. Я буду называть эту библиотеку/утилиту/приложение из приложения Perl, поэтому любые интерфейсы Perl будут бонусом.

4b9b3361

Ответ 1

PrinceXML является лучшим из тех, что я видел (он анализирует обычный HTML, а также XML/XHTML). Как это лучше? Ну, он проходит тест acid2, который, как я думал, был довольно пронзительным.

Это, однако, довольно дорого

Ответ 2

Извините, что раскопал это старое сообщение, но он вышел первым в моем поиске лучшего инструмента для преобразования HTML/PDF. В Linux wkhtmltopdf очень хорошо (учитывается, в частности, CSS) и GPL.

Ответ 3

WeasyPrint производит хорошие PDF файлы с выбираемым текстом и гиперссылками.

weasyprint input.html output.pdf

Если вы используете вместо этого wkhtmltopdf, попробуйте следующие варианты:

wkhtmltopdf --margin-bottom 20mm --margin-top 20mm --minimum-font-size 16 ...

Ответ 4

Обновление 2019-05

К счастью, весь процесс был упакован в образ докера TheCodingMachine: https://github.com/thecodingmachine/gotenberg

Это делает обслуживание и использование генерации PDF на основе хрома в производственных средах действительно гладким и без проблем.


Начиная с Chrome 59 появился новый режим безголовых. Поскольку все другие решения действительно борются с более новыми (или уже не такими новыми) функциями CSS, такими как flexbox, в моем случае это было единственное решение для получения правильного вывода PDF.

Чтобы создать PDF файл из локального HTML файла, используйте следующую команду: chrome --headless --disable-gpu --print-to-pdf file:///path/to/myfile.html.

Для Mac OS вместо chrome /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome.

Единственный недостаток, который я заметил до сих пор, это то, что (в настоящее время) вы не можете передать html через stdin, но создание временного файла - не такая уж большая проблема.

Для получения дополнительной информации см. Https://developers.google.com/web/updates/2017/04/headless-chrome#create_a_pdf_dom.

Обновление: Как выясняется, ребята из Chrome, скорее всего, предоставят какой-то узел модуля узла для этой задачи, который в конечном итоге станет устаревшим безголовым режимом (https://bugs.chromium.org/p/chromium/issues/detail?id = 719921).

Лучше всего было бы использовать подход на основе узлов с использованием модуля кукловода, как описано в https://developers.google.com/web/updates/2017/04/headless-chrome#node, и распечатать страницу с помощью Page.printToPDF. команда, которая также включает некоторые дополнительные настройки.

Конечно, вы можете подключиться к веб-сокету отладочной консоли из любой другой среды, кроме узла (например, PHP-скрипт).

Ответ 5

Я немного поработал над вами и предложил два варианта. Может быть и больше, моя стратегия Google заключалась в том, чтобы попробовать "webkit command-line pdf" и "gecko command-line pdf", в основном ищущие программы командной строки, которые встраивают два популярных механизма рендеринга с открытым исходным кодом в средства рендеринга командной строки. Вот что я нашел:

Firefox для командной строки - выходы в pdf и png

wkpdf - в то время как это для mac, это, вероятно, довольно портативно.

Ответ 6

Я не утверждаю, что это "лучшее" решение, но это "решение", которое я использовал.

Ввод HTML → HTML 2 PSPS 2 PDF → Выход PDF

Ответ 7

Это будет полный избыток, но вы можете скачать и установить mirth. Это механизм маршрутизации сообщений, но он имеет возможность конвертировать html в pdf, поэтому вы можете настроить его для поиска html файла в папке, конвертировать в PDF файл и удалить PDF файл в той же или другой папке. Как я уже сказал, overkill, немного кривая обучения, но это бесплатно, и Java, чтобы вы могли запускать ее на Linux, если хотите. И все ваше приложение perl должно будет сделать html в файл.

Ответ 8

Вы должны взглянуть на http://phantomjs.org/

Преобразование может быть выполнено небольшим script rasterize.js, а затем выдача

phantomjs rasterize.js 'http://en.wikipedia.org/w/index.php?title=Jakarta&printable=yes' jakarta.pdf

Ответ 9

Вы можете установить бесплатный Calibre и использовать утилиту командной строки ebook-convert него есть, для преобразования многих html-документов в один epub или pdf.

https://manual.calibre-ebook.com/generated/en/ebook-convert.html

Идея приходит отсюда

Я не использовал его, но этот модуль npm завершает этот процесс, как мой следующий скрипт bash, но, вероятно, лучше ;-)

Для меня на моем Mac я использую следующий скрипт bash для преобразования локального html-сайта в PDF:

convert_html_to_pdf.sh

function show_help()
{
  ME=$(basename $0)
  IT=$(cat <<EOF

  Converts an html file to pdf, epub, mobi or more if you look!

  usage: input.html output.{pdf|epub|mobi}

  e.g. 

  $ME index.html output.pdf 

  Note: Requires Calibre be installed. more info here: https://ebooks.stackexchange.com/a/6285
EOF
  )
  echo "$IT"
  exit
}

if [ "$1" == "help" ]
then
  show_help
fi
if [ "$1" == "--help" ]
then
  show_help
fi

/Applications/calibre.app/Contents/MacOS/ebook-convert $1 $2 --max-levels=1

Ответ 10

Альтернативное решение, на которое еще нет ответа, - это использовать API.

Их преимущество заключается в том, что вы извлекаете ресурсы, необходимые для работы, и получаете современный сервис, который реализует последние функции (нет необходимости обновлять код или устанавливать исправления).

Например, с PDFShift вы можете сделать это с помощью одного запроса POST по адресу:

POST https://api.pdfshift.io/v2/convert/

Передав "source" (либо URL, либо необработанный HTML-код), вы получите PDF файл в двоичном виде. (Отказ от ответственности: я работаю в PDFShift).

Вот пример кода в Python:

import requests

response = requests.post(
    'https://api.pdfshift.io/v2/convert/',
    auth=('user_api_key', ''),
    json={"source": "https://en.wikipedia.org/wiki/PDF", "landscape": False, "use_print": False}
)

response.raise_for_status()

with open('wikipedia.pdf', 'wb') as f:
    f.write(response.content)

И ваш PDF будет находиться по адресу. /wikipedia.pdf

Ответ 11

Я обнаружил, что Electroshot поддерживает современные функции CSS, особенно макет. Это было после борьбы с wkhtmltopdf, показавшей, что он не поддерживает такие вещи, как CSS3.

Из описания функций Электрошота:

Electroshot использует Electron, который предлагает самую последнюю стабильную версию Chrome (а не одну из лет назад); это означает, что страницы отображаются так же, как в браузере...

Я смог использовать Bootstrap 4 для оформления страницы, а затем использовать Electroshot для рендеринга PDF, очень похожего на HTML/CSS.

Ответ 12

Возможно, вы захотите проверить "Службу конвертации документов" в Peernet (в http://www.peernet.com/conversion-software/batch-document-converter/). Это выполняется как служба на компьютере Windows Desktop или Windows Server. Он открывает HTML-документы в веб-браузере, затем распечатывает их через драйвер печати для создания документов PDF, так что созданный документ PDF выглядит точно так же, как если бы вы напечатали документ HTML из браузера.