Я использую htmldoc какое-то время, но я столкнулся с некоторыми довольно серьезными ограничениями. Мне нужно конечное решение для работы с ящиком Linux. Я буду называть эту библиотеку/утилиту/приложение из приложения Perl, поэтому любые интерфейсы Perl будут бонусом.
Как я могу автоматизировать преобразования HTML-to-PDF?
Ответ 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
Я не утверждаю, что это "лучшее" решение, но это "решение", которое я использовал.
Ответ 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 по адресу:
Передав "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 из браузера.