ドキュメント&知識ベース · daymade/claude-code-skills

pdf-creator

適切な中国語フォントのサポート、テーマシステム、および視覚的なセルフチェック機能を備え、MarkdownファイルをプロフェッショナルなPDFドキュメントに変換します。Markdown → PDF、印刷用Markdownドキュメント、および印刷やモバイル閲覧用に整形されたMarkdownに使用します。手動のpandoc/Chromeコマンドよりも、このツールのCJKタイポグラフィ、ヘッダー/フッター抑制、視覚的検証を推奨します。スコープはMarkdown → PDFのみです。原稿の抜粋やレイアウト修復を含む既存のWord/WPS → PDFはdaymade-docs:docx-creatorにルーティングしてください。正式なWord原稿をMarkdown経由で往復変換しないでください。Word出力もdocx-creatorにルーティングされます。

L4 高権限 · 段階的認可と監査V1 コミット固定コマンド実行データ外部送信ネットワーク通信ファイル書き込みDual-pass Audit
Author daymadeGitHub daymade/claude-code-skills ↗Stars 1385License MIT(仓库根 LICENSE;Copyright (c) 2025 daymade;GitHub API spdx MIT)Commit d5c4678cb5
管理レベルは Skill の能力と推奨統制措置を示すものであり、品質や安全性の認証、利用可否の判定ではありません。使用の可否はユーザーおよび管理者が決定します。Agent 環境によって制約が異なるため、自動保護を仮定しないでください。第三者製 Skill の著作権は原著作者に帰属し、利用リスクは利用者が負います。

1仕組みと動作原理

パイプラインは pandoc(md→HTML) + CSSテーマ + weasyprint/headless-Chrome レンダリング + poppler セルフチェックで構成され、スクリプトが自動的にCJKフォントスタックと組版パッチを補完します。中核は md_to_pdf.py(813行)にあります。

daymade-docs/pdf-creator/scripts/md_to_pdf.py
result = subprocess.run( ["pandoc", "-f", "markdown", "-t", "html"], input=md_content, capture_output=True,
Chromeバックエンドには `--no-pdf-header-footer` を渡してデフォルトのヘッダー/フッターを防止します(SKILLアンチパターン表にある手動pandoc+Chromeの失敗パターンに対応)。weasyprintバックエンドは `HTML(string).write_pdf` を直接呼び出します。

バックエンドの選択は中国語の有無ではなく「コンテンツ×テーマのフォントスタック」に応じて自動ルーティングされます。default/cjk-auto(Songti/Heiti CID TrueType)はweasyprintへ、PingFang系テーマはChromeへルーティングされます。weasyprintがPingFang SCのサブセットをmacOS PreviewやAdobeで読み込めないCID Type 0Cとして埋め込んでしまうためです。

daymade-docs/pdf-creator/SKILL.md
**CJK + a Songti/Heiti theme** (`default`, `cjk-auto`) → **weasyprint**. These themes embed CID TrueType, which every reader renders, so Chrome buys nothing and costs the clip described below.
ルーティングは tests/test_backend_routing.py で厳密に固定されています。明示的な `--backend` 引数は常に自動検出を上書きします。これはフォント埋め込み形式(PDFリーダー互換性)の知見をエンジニアリング化したものです。

テーマは独立したCSSファイル(themes/*.css)であり、5つの組み込みテーマが公式文書/研修用/モバイル閲覧をカバーします。新規テーマ作成は default.css をコピーして名前を変更するだけです。

daymade-docs/pdf-creator/SKILL.md
To create a new theme: copy `themes/default.css`, modify, save as `themes/your-theme.css`.
mobileテーマ(148×210mm)はWeChat/モバイル閲覧専用です。warm-terra-menuはメニューの長文折り返しを強化したバリアントです(Menloのunicode-rangeでインラインコード内のCJK欠落グリフを修正)。

CJK組版の2層防御:Layer 1ではCSSパッチ(`table-layout: fixed`、`keep-all`、`th nowrap` など)を自動注入(ユーザーのソースファイルは変更しません)。Layer 2ではレンダリング後に `pdftotext -layout` を使用し、「中文文案排版指北」に沿って孤立文字や括弧の泣き別れなどのアンチパターンをスキャンし警告します。

daymade-docs/pdf-creator/SKILL.md
The patch: - `table { table-layout: fixed; width: 100% }` — equal column widths prevent weasyprint auto-layout from squeezing one column to ~10% width when an adjacent column has 5x more content
Layer 2は警告のみを行い、自動修正はしません。CLAUDE.mdの「暗黙的な動作の禁止」に則りSKILLで明記されています。Markdownをサイレントに書き換えると、ソース自体の問題が覆い隠されてしまうためです。

Chromeのクリッピング不具合はピクセルレベルまで調査され、2形態の検査を備えています。Chromeの `@page` clip path はコンテンツボックスを超える表の右枠線(538.90pt vs 545.18pt)を切り落としますが、オブジェクトはPDF内に残るためプレビューや座標を見るだけでは発見できません。check_table_borders.py はink検査と `--reference` 照合の2形態を提供し、後者のみがChromeレンダリングに対する有効な判定基準となります。

daymade-docs/pdf-creator/SKILL.md
It takes two forms, and for a Chrome-rendered PDF only the second one is a verdict.
スクリプトのdocstringには実測例が記載されています:'a table styled with vertical rules and no cell fills, rendered through Chrome past the clip, loses its right border from the object layer entirely; the ink check then reports 5/5 promised rules painted — PASS'——これは「なぜ目視で検出できないのか」のメカニズムを検査ロジックとして落とし込んだものです。

視覚的セルフチェックの義務化:生成ごとに `pdftoppm` が各ページのPNGを自動出力し(システム一時ディレクトリに保存され、作業ツリーを汚染しません)、全ページを目視確認(Read)するよう促すチェックリストを出力します。表を含むファイルは境界線チェックを通過しない限り完了と見なされません。

daymade-docs/pdf-creator/SKILL.md
Converts each page to PNG via `pdftoppm` (poppler-utils) into a `<pdf-name>/` subdirectory under the **system temp dir** (NOT next to the PDF — previews are a throwaway self-check artifact and must never linger in your working tree / git repo).
`--no-preview` はPNG生成を無効化するだけで義務は解除されません。バッチモードでは出力に対して再度 check_table_borders.py を実行することが求められます。

2コア機能

01Markdown → プロフェッショナルなPDF(中国語組版 + テーマシステム)、単一ファイルまたはバッチ処理
025つの組み込みテーマ(default/cjk-auto/warm-terra/warm-terra-menu/mobile)およびカスタムテーマ機能
03weasyprint/Chromeデュアルバックエンドの自動ルーティング(コンテンツ×テーマフォントスタック)と明示的な上書き
04自動CJK組版パッチ + レンダリング後組版リント(孤立文字/括弧の泣き別れ/約物の行頭行末違反)
05Chromeクリッピング検出:ink検査 + `--reference` デュアルバックエンド照合(Chromeに対する唯一の有効な判定形態)
06視覚的セルフチェックの強制:ページ別PNG + チェックリスト(一時ディレクトリ使用で作業ツリーを汚染しない)

3外部依存関係

KindDependency / Endpoint
clipandoc(markdown→HTML)
packageweasyprint(uv run --with weasyprint / pip install)
cliGoogle Chrome(headless --print-to-pdf 后端)
clipoppler:pdftoppm(预览 PNG)/ pdftotext / pdfinfo(排版 lint)
packagepdfplumber / pillow / numpy(check_table_borders,uv --with)

4推奨統制措置と判定根拠

安全運用のための推奨統制措置
Agent 向け
段階的・都度認可、サンドボックス推奨
管理者向け
承認フロー、ロールバック可能、全履歴監査
判定根拠(ファイルパスと抜粋)
  • scripts/: ローカルスクリプトまたはコマンドの実行: `python md_to_pdf.py`(ローカル: pandocサブプロセス、weasyprintインポート、またはheadless Chromeサブプロセス)
  • 外部端点: ローカルコンテンツやセッションのサードパーティクラウドストレージへの外部送信
  • 本地工作目录: ファイルの読み書きと成果物の出力: 入力ファイルと同じ場所または指定された出力パスにPDFを生成。プレビューPNGはシステム一時ディレクトリ `pdf-creator-previews/<stem>/` に書き込み(古いページは自動クリーンアップ)
監査ノート: 純粋なローカルツールチェーン(pandoc/weasyprint/Chrome/poppler)であり、実行時のネットワーク外部送信や認証情報読み取りは一切ありません。書き出されるのはユーザー指定のPDFとシステム一時ディレクトリ内のセルフチェック用PNGのみです。注:初回使用時はuv/pipでweasyprint/pdfplumberなどを取得する必要があります(公式PyPIであり想定内)。DYLD_LIBRARY_PATH はプロセス内でのみ追加されます。

5二重目の独立検証

  • [ok] pandoc→HTML→渲染器管线 — md_to_pdf.py subprocess.run(["pandoc","-f","markdown","-t","html"]) + _render_weasyprint/_render_chrome 均存在。
  • [ok] 后端按内容×主题路由 — _detect_backend 中 _WEASYPRINT_SAFE_CJK_THEMES={'default','cjk-auto'} 与 SKILL 路由表一致;test_backend_routing.py 存在。
  • [ok] Chrome clip 缺陷数字 — SKILL 与 check_table_borders.py docstring 均载 538.90pt/545.18pt 与 '5/5 promised rules painted — PASS' 反例,跨文件一致。
  • [ok] 预览进 temp dir 而非工作树 — 代码 preview_dir = Path(tempfile.gettempdir()) / 'pdf-creator-previews' / pdf_path.stem;SKILL 同述。
  • [ok] Layer1 CSS 补丁 / Layer2 lint 不隐改源 — _TYPOGRAPHY_CSS_PATCH 注入与 pdftotext -layout 扫描代码均在;无对用户 md/css 的写回路径。
  • [ok] 无网络无凭证 — 代码扫描零 curl/requests/API key;env 读取仅 DYLD_LIBRARY_PATH(进程内)。
  • [ok] 元数据 — GitHub API:MIT / 1385 stars / pushed 2026-09-09T12:33:29Z;本地 HEAD==pin d5c4678。

6結論

  • 中国語PDFの品質ゲートが万全:フォント埋め込み形式の互換性(CID TrueTypeルーティング)、組版リント、Chromeクリッピング検出のすべてがスクリプトとテストで保護されています。
  • 「なぜ手動プロセスが失敗するのか」のメカニズムを徹底的に研究し(クリップされたオブジェクト層は存在するがインクが塗られない)、単なる注意喚起ではなく実行可能な検査として実装しています。
  • テーマシステムにより研修用/公式/モバイル閲覧用など一度にマルチバージョンへ変換可能で、CSSのみによるカスタムの敷居も低いです。
  • 衛生面と規律:セルフチェックの生成物が作業ツリーに残らず、元のMarkdownをサイレントに書き換えることもないため、チームのパイプラインへの組み込みに最適です。
  • 最適な用途: 中国語のMarkdownを公式/研修用/モバイル閲覧用PDFに変換したい個人やチーム(契約書、講義ノート、シラバス、WeChat共有ドキュメントなど)に適しています。pandoc + weasyprint または Chrome + poppler がインストールされており、1ページごとの目視確認を実施できる環境を前提とします。
    不向きな用途: 既存のWord/WPSの正式原稿をPDF化する用途には不向きです(それは docx-creator のword-to-pdfフローであり、Markdownとの往復変換は禁止されています)。中国語フォントがない環境やオフライン環境には適しません。ピクセル単位の厳密な版面制御(ページごとの正確なレイアウト)はCSSレンダリングの能力を超えています。
    Install Agent-Ready
    ① Verified Mirror 2026-09-09
    Option A · Direct DownloadDownload pdf-creator.tar.gz
    sha256: 77a0f5b23369e727…
    Option B · Copy Guide for Agent
    install.json
    Agent はこの JSON ガイドから自動的にダウンロードして検証します。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit d5c4678cb5.