私はしばらくhtmldocを使用していますが、かなり深刻な制限に直面しています。 Linuxボックスで動作するための最終ソリューションが必要です。このライブラリ/ユーティリティ/アプリケーションをPerlアプリから呼び出すので、Perlインターフェースはボーナスです。
PrinceXML は私が見た中で最高のものです(通常のHTMLとXML/XHTMLを解析します)。どのように最高ですか? まあ、それはacid2テストに合格します 私はかなり印象的だと思った
しかし、それは非常に高価です
この古い投稿を発掘してすみませんが、最高のHTML/PDF変換ツールの検索で最初に出てきました。 Linuxでは、 wkhtmltopdf は非常に優れており(特にCSSを考慮に入れて)、GPLです。
WeasyPrint は、選択可能なテキストとハイパーリンクを持つNice PDFを作成します。
weasyprint input.html output.pdf
代わりにwkhtmltopdf
を使用する場合は、次のオプションを試してください。
wkhtmltopdf --margin-bottom 20mm --margin-top 20mm --minimum-font-size 16 ...
2019-05を更新
ありがたいことに、プロセス全体はTheCodingMachineによってdockerイメージにパックされています。 https://github.com/thecodingmachine/gotenberg
これにより、プロダクション環境でのchromeベースのpdf生成のメンテナンスと使用が非常にスムーズになります。
Chrome59。以来、新しいヘッドレスモードがあります。他のすべてのソリューションは、フレックスボックスなどの新しい(またはそれほど新しいものではない)CSS機能と実際に苦労しているため、適切なPDF=出力。
ローカルhtmlファイルからPDFを作成するには、次のコマンドを使用します:chrome --headless --disable-gpu --print-to-pdf file:///path/to/myfile.html
。
Mac OSの場合、chrome
を/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
に置き換えます。
私がこれまで気づいた唯一の欠点は、(現在)標準入力経由でhtmlを渡すことができないことですが、一時ファイルの作成はそれほど問題ではありません。
詳細については、 https://developers.google.com/web/updates/2017/04/headless-chrome#create_a_pdf_dom をご覧ください。
更新:判明したように、chrome guysはこのタスクに何らかの種類のノードモジュールを提供する可能性が高く、最終的にはヘッドレスモードを廃止します( https:// bugs。 chroma.org/p/chromium/issues/detail?id=719921 )。
https://developers.google.com/web/updates/2017/04/headless-chrome#node で文書化されているpuppeteerモジュールを使用したノードベースのアプローチを使用するのが最善の策ですPage.printToPDFコマンドを使用したページ。これにより、追加の構成も可能になります。
もちろん、ノード以外の環境(つまりPHPスクリプト)からデバッグコンソールwebsocketに接続することもできます。
私はあなたのために少しグーグルをして、2つのオプションを思いつきました。さらに、Googleの戦略は「webkitコマンドラインpdf」と「geckoコマンドラインpdf」を試して、基本的にコマンドラインレンダラーに2つの人気のあるオープンソースレンダリングエンジンを組み込むコマンドラインプログラムを探すことでした。ここに私が見つけたものがあります:
Firefoxコマンドラインプリンター -pdfおよびpngへの出力
wkpdf -これはMac用ですが、おそらくかなり移植性があります。
ここで回答されていない代替ソリューションは、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にあります
http://phantomjs.org/ をご覧ください
変換は小さなスクリプトで行うことができます rasterize.js
phantomjs rasterize.js 'http://en.wikipedia.org/w/index.php?title=Jakarta&printable=yes' jakarta.pdf
無料のCalibreをインストールして、ebook-convert
コマンドラインユーティリティ。多くのhtmlドキュメントを単一のepubまたはpdfに変換します。
https://manual.calibre-ebook.com/generated/en/ebook-convert.html
アイデアが来る ここから
私はそれを使用していませんが、 このnpmモジュール は、このプロセスを次のbashスクリプトのようにラップしますが、おそらくもっと良いです;-)
私にとって、私のMacでは、次のbashスクリプトを使用して、ローカルのhtml WebサイトをPDFに変換します。
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
これは完全にやり過ぎですが、ダウンロードしてインストールできます mirth 。メッセージルーティングエンジンですが、htmlをpdfに変換する機能があるため、フォルダー内のhtmlファイルを取得し、pdfに変換し、同じフォルダーまたは他のフォルダーにpdfをドロップするように設定できます。私が言ったように、やり過ぎ、少し学習曲線ですが、それは無料で、Javaので、必要に応じてLinuxで実行できます。 htmlをファイルに。
Electroshot が最新のCSS機能、特にレイアウトをサポートしていることがわかりました。これは CSS3のようなものをサポートしていない でその年齢を示すwkhtmltopdfに苦労した後のものでした。
Electroshotの機能の説明から:
Electroshotは、Chrome(数年前のものではなく)の最新の安定バージョンを提供するElectronを使用します。これは、ページがブラウザで表示されるようにレンダリングされることを意味します...
Bootstrap 4を使用してページを設計し、Electroshotを使用してPDF HTML/CSSに非常によく似ています。