GAミント至上主義

Web monomaniacal developer@株式会社ビズオーシャン

Headless Chromeを使ったPDF変換サーバーをGitHubにあげた

以前から開発していたのが、だいぶ形になってきたのと、他のプロジェクトでも使っているので、共有も含めてGitHubにあげた。

github.com

Dockerで動いて、URLを渡すとそのページをA4のPDFに変換して返してくれるシンプルなやつ。

起動時にChrome本体とページを起動し、以降のリクエストではそれを使いまわすため、2回目以降のリクエストは結構はやい。

自社の開発サーバーでlocalhost内の簡単なページで60ms程度で生成できる(リクエスト周りは含まず)。高速化には基本的に通常のChromeと同じようなHTMLの書き方が必要となる。

外部への直接公開は考えない分、エラー処理とか超雑なおかげで140行以下のためカスタマイズはしやすいかも。

今のところPDFをA4以外にする等のオプションは必要がないので、ソースに書いてしまっているが必要になったらリクエストごとに変えられるようにしたいと思う。プルリ、要望も募集中です。

これからも書式関連のサービスを作っていくbizoceanでは、書式を共有したり印刷するのを考えるとPDFは絶対必要になるので、メンテはちゃんとやるはず。


コードの整理以外にも、GETでURLを渡してPDFを返すほかに、POSTでHTMLを送ってPDFを返すのも実装してある。
PDFサーバーからURLへのリクエストが減らせる分早くなるけど、外部ファイルの読み込みをURL込みで書かなきゃいけなかったり。
もっと早くしようと思うと、前述したとおり通常のWEBページの高速化と同じで、cssもjsもhtml内に展開したりして、外部へのリクエスト数を0に近づけた方がいいなと思ったり、速度を追及するとなかなか面倒。


過去記事はこちら
Headless Chrome + puppeteerを使ったHTML→PDF変換サーバーを作る puppeteer編 - 仕事中の問題と解決メモ。

ヘッドレスChromeを使ったHTML→PDF変換サーバーを作る 改善編 - 仕事中の問題と解決メモ。

ヘッドレスChrome + Node.js + express + DockerでPDF生成サーバーを作る - 仕事中の問題と解決メモ。

Headless ChromeはPDF以外にも今後スクリーンショットとか、テスト用にも使えるし、node.jsも使わざるを得ない状況になり、いい勉強になるのでオヌヌメ

Nodeクックブック

Nodeクックブック