HTML / draw.io to PDF converter for Document Manager (headless Chromium, no network access).
398
HTML-to-PDF conversion service for Document Manager. Renders HTML / Markdown / MHTML documents with headless Chromium into a single long PDF page that looks like the on-screen preview, and draw.io diagrams into one PDF page per diagram page. Used for "Download as PDF" and for exporting documents to Miro boards. Document scripts are never executed and nothing but the document itself is loaded. Documentation below is in Japanese.
Document Manager の「PDFでダウンロード」のための
変換サービスです。HTML・Markdown・MHTML の文書を、プレビューで見たままの1枚の長いPDFにします。
draw.io の図(.drawio)は、図の1ページを紙1枚にしたPDFにします。
HTML をメールに添付すると相手の環境では文字の羅列として出てしまうことがあるため、人に渡すための形として
用意しています。
Miro への書き出しでも使います。 Document Manager から Miro のボードへ資料を書き出すとき、
HTML・Markdown・MHTML・draw.io の文書は、このサービスで PDF にしてから出します。
このサービスが無い環境では、それらの文書は Miro に書き出せません(PDF・画像はそのまま出せます。
Office 文書は、もう一つの変換サービス earce9000/document-manager-converter で作った PDF を出します)。
単体で使うものではありません。 Document Manager 本体から、内部ネットワーク経由で呼び出します。 認証を持たないので、ポートを外へ公開しないでください。
フォントは BIZ UDゴシック / BIZ UD明朝で描きます(文書が指定する游ゴシック・メイリオ等は再配布できない ため入っていません)。字幅が少し違うので、行の折り返し位置が画面とずれることがあります。 外部に置かれた画像・フォント・CSS は入りません(変換時に外部へ接続しないため)。
draw.io の図は、Document Manager の画面と同じ版の draw.io 公式ビューア(このイメージに同梱)で描きます。 紙の大きさはページごとに図の大きさに合わせ、回路図の記号などの拡張図形も描けます。
Document Manager の HTML_PDF_URL に、このサービスのURLを渡します。
services:
app:
image: earce9000/document-manager:latest
environment:
HTML_PDF_URL: "http://pdf-converter:3000"
# (ほかの設定は Document Manager の説明を参照)
networks:
- default
- pdf
pdf-converter:
image: earce9000/document-manager-pdf-converter:latest
restart: always
read_only: true
tmpfs:
- /tmp:rw,size=512m
security_opt:
- no-new-privileges:true
mem_limit: 1g
networks:
- pdf
networks:
pdf:
internal: true
| 環境変数 | 既定値 | 説明 |
|---|---|---|
CONVERT_MAX_BYTES | 52428800 (50MB) | 受け付けるHTMLの上限 |
CONVERT_TIMEOUT_SECONDS | 60 | 1件あたりの打ち切り(通常は1秒かかりません) |
PDF_VIEWPORT_WIDTH | 1280 | 画面として描く幅(px) |
LISTEN_PORT | 3000 | 待ち受けるポート |
DRAWIO_DISABLED | (未設定) | 1 で draw.io の変換を止めます(下の「安全面」) |
他人が作ったHTMLをブラウザのエンジンで開くので、何重にも閉じてあります。
そのうえで、上の例のように外へ出られないネットワーク(internal: true)に置いてください。
Chromium 自身のサンドボックスは切っています。 権限を絞ったコンテナの中では立ち上げられないためです。 スクリプトを動かさず通信も断っているので攻撃の入口は狭いですが、描画そのものの欠陥に対する守りは コンテナの隔離だけになります。そのためイメージを毎週作り直しています(Chromium のセキュリティ修正を 取り込むため)。定期的に取得し直してください。
draw.io の図では、スクリプトを動かします。 図を描くのに draw.io のビューア(JavaScript)が要るためです。
動くのはイメージに同梱したビューアだけで、図に仕込まれたスクリプトは CSP(script-src 'self')で止め、
通信の遮断も HTML と同じです。それでも守りは HTML より一段弱くなるので、「スクリプトは一切動かさない」
構成にしたい場合は DRAWIO_DISABLED=1 で draw.io の変換だけを止めてください。
latest: 最新YYYYMMDD.HHMM: ビルドした日時(JST)。直近3世代を残していますamd64 のみです。
仕組み・実測値・テストは GitHub の pdf-converter/README.md にあります。ライセンスは MIT です。
Content type
Image
Digest
sha256:00daf181c…
Size
399.9 MB
Last updated
about 13 hours ago
docker pull earce9000/document-manager-pdf-converter