web-dev-qa-db-ja.com

HTMLからPDFへの変換を自動化するにはどうすればよいですか?

私はしばらくhtmldocを使用していますが、かなり深刻な制限に直面しています。 Linuxボックスで動作するための最終ソリューションが必要です。このライブラリ/ユーティリティ/アプリケーションをPerlアプリから呼び出すので、Perlインターフェースはボーナスです。

44
lennysan

PrinceXML は私が見た中で最高のものです(通常のHTMLとXML/XHTMLを解析します)。どのように最高ですか? まあ、それはacid2テストに合格します 私はかなり印象的だと思った

しかし、それは非常に高価です

9
Orion Edwards

この古い投稿を発掘してすみませんが、最高のHTML/PDF変換ツールの検索で最初に出てきました。 Linuxでは、 wkhtmltopdf は非常に優れており(特にCSSを考慮に入れて)、GPLです。

65
Alexandre

WeasyPrint は、選択可能なテキストとハイパーリンクを持つNice PDFを作成します。

weasyprint input.html output.pdf

代わりにwkhtmltopdfを使用する場合は、次のオプションを試してください。

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

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に接続することもできます。

9
Roben

私はあなたのために少しグーグルをして、2つのオプションを思いつきました。さらに、Googleの戦略は「webkitコマンドラインpdf」と「geckoコマンドラインpdf」を試して、基本的にコマンドラインレンダラーに2つの人気のあるオープンソースレンダリングエンジンを組み込むコマンドラインプログラムを探すことでした。ここに私が見つけたものがあります:

Firefoxコマンドラインプリンター -pdfおよびpngへの出力

wkpdf -これはMac用ですが、おそらくかなり移植性があります。

7
bmdhacks

これが「最良の」ソリューションであると主張することはありませんが、私が使用した「a」ソリューションです。

HTML入力-> HTML 2 PS -> PS 2 PDF -> PDF出力

3
Declan Shanaghy

ここで回答されていない代替ソリューションは、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にあります

1
Cyril N.

http://phantomjs.org/ をご覧ください

変換は小さなスクリプトで行うことができます rasterize.js

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

無料のCalibreをインストールして、ebook-convertコマンドラインユーティリティ。多くのhtmlドキュメントを単一のepubまたはpdfに変換します。

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

アイデアが来る ここから

私はそれを使用していませんが、 このnpmモジュール は、このプロセスを次のbashスクリプトのようにラップしますが、おそらくもっと良いです;-)

私にとって、私のMacでは、次のbashスクリプトを使用して、ローカルのhtml Webサイトを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
1
Brad Parks

これは完全にやり過ぎですが、ダウンロードしてインストールできます mirth 。メッセージルーティングエンジンですが、htmlをpdfに変換する機能があるため、フォルダー内のhtmlファイルを取得し、pdfに変換し、同じフォルダーまたは他のフォルダーにpdfをドロップするように設定できます。私が言ったように、やり過ぎ、少し学習曲線ですが、それは無料で、Javaので、必要に応じてLinuxで実行できます。 htmlをファイルに。

1
Jeremy

Electroshot が最新のCSS機能、特にレイアウトをサポートしていることがわかりました。これは CSS3のようなものをサポートしていない でその年齢を示すwkhtmltopdfに苦労した後のものでした。

Electroshotの機能の説明から:

Electroshotは、Chrome(数年前のものではなく)の最新の安定バージョンを提供するElectronを使用します。これは、ページがブラウザで表示されるようにレンダリングされることを意味します...

Bootstrap 4を使用してページを設計し、Electroshotを使用してPDF HTML/CSSに非常によく似ています。

0
Micah Elliott