Communitygithub.com

sulipapa/localize-infographic-pdf

アートワークを維持したPDFローカライゼーション(例:EN→ZH)— デザインエクスポートされたインフォグラフィック/ワンページャー向けのClaude Codeスキルで、ベクター/Type3のソーステキストを消去し、翻訳をその場に再描画します。

localize-infographic-pdf とは?

このスキルは、デザインツールからエクスポートされたPDF(インフォグラフィックやワンページャーなど)のアートワークを維持しながらテキストのみを翻訳するためのものです。通常、デザインPDFはテキストがベクターアウトラインやType3グリフとして保存されており、編集が困難です。しかし、本スキルは隠された検索可能なテキストレイヤーを利用して正確な位置を特定し、元のテキストを消去した上で翻訳テキストを同じ座標に合成します。これにより、写真やチャート、グラデーション、アイコン、ロゴなどのアートワークは一切変更されず、ピクセル単位で忠実な結果が得られます。対応プラットフォームはClaude Codeで、Pythonスクリプトを使用して動作します。ワークフローは分析、抽出、翻訳、オーバーライド、合成、PDF出力、レビューの7ステップで構成され、翻訳エージェントとレビューアエージェントが協調して高品質なローカライゼーションを実現します。

対応✓Claude Code~Codex CLI~Cursor
npx skills add sulipapa/localize-infographic-pdf

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

インフォグラフィックPDFのローカライゼーション(アートワーク維持)

デザインPDFの翻訳版を生成します。元の文書と同一の外観を保ちつつ、すべての本文テキストが対象言語に置き換えられます。ページをラスタライズし、ソーステキストを消去した上で、翻訳を同じ座標に合成します。アートワーク(写真、チャート、グラデーション、アイコン、ロゴ)は再生成されません。

このパイプラインの理由(最初にお読みください)

デザインエクスポートされたPDFは、通常表示テキストがベクターアウトライン(テキスト→カーブ)またはType3グリフとして保存されています。これは編集可能なテキストではなく、「テキストを置き換える」クリーンな方法はありません。しかし、これらのPDFにはほとんどの場合、検索可能なテキストレイヤーが隠されており、そのワードボックスは表示テキストとピクセル単位で位置が合っています。このレイヤーは正確な位置とサイズを無料で提供します。したがって、テキストを編集しようとせず、生成画像モデルで背景を「再描画」しないでください。アートワークが変更され、ピクセル忠実性が失われます。代わりに、カバー&オーバーレイ方式を使用します。各ソースグリフの連なりを消去し、翻訳をその場に再描画します。背景はバイトレベルで忠実に保たれます。詳細な根拠と失敗モードについては references/pipeline.md を参照してください。

ワークフロー(スキルの scripts/ からスクリプトを順番に実行)

作業ディレクトリを選択します(デフォルト loc_work)。すべてのスクリプトは SOURCE.pdf [OUTDIR] [PAGE] を受け取ります。

  1. 分析 — 01_analyze.py SOURCE.pdf OUTDIR テキストの保存方法を確認し、埋め込み画像をリストアップし、ページをレンダリングします。レンダリング結果を確認し、チャート/ロゴ/写真画像に焼き付けられたテキスト(テキストレイヤーに含まれないため、manual_labels で処理する必要があります)に注意してください。

  2. 抽出 — 02_extract.py SOURCE.pdf OUTDIR(環境変数 LOC_KEEP='brandA|brandB' でソース言語の文字列をより多く保持できます)。units.json(物理的なテキスト行ごとに1エントリ、bbox/色/サイズを含む)と translator_source.txt(読みやすいID付きペイロード)+ half_*.png を生成します。

  3. 翻訳 — 翻訳エージェントを起動します。translator_source.txt と half_0/1.png を渡します。エージェントは OUTDIR/translation.json = {"<id>":"译文", ...} を書き込む必要があります。すべてのIDをカバーし(KEEP-AS-IS IDはそのままエコーします)。references/agent-prompts.md のプロンプトを使用してください。

  4. オーバーライド(必要な場合のみ) — 自動エンジンでは認識できない文書固有の部分に対して OUTDIR/overrides.json を書き込みます。画像に焼き付けられたテキスト(manual_labels)、細いストロークのコントロール(ピル/バッジなど)内のテキスト(solid_fill_labels)、中央揃えのラベルゾーン(centered_id_ranges)、および drop_ids。スキーマと座標の測定方法:references/overrides.md。ほとんどのシンプルなフライヤーではオーバーライドは不要です。チャートが多いものでは数個必要になる場合があります。

  5. 合成 — 03_compose.py SOURCE.pdf OUTDIR → final_zh.png。これは決定論的なエンジン(背景の再構築 + サイズ統一の再描画)です。文書ごとの調整は不要です。

  6. PDFと切り抜き — 04_pdf.py SOURCE.pdf OUTDIR OUT.pdf → PDFとQA用の zh_L/zh_R.png。

  7. レビューと反復 — レビューアエージェントを起動し、zh_L/zh_R.png を half_0/1.png と比較します(プロンプトは references/agent-prompts.md)。overrides.json / translation.json を編集して問題を修正し、03→04を再実行します。クリーンになるまで繰り返します。一般的な問題とその修正方法は references/pipeline.md にリストされています。

3ロールループ(翻訳者 → コンポジター → レビューア)は人間のローカライゼーションチームを反映しています。レビューアを1~2回実行することで、長尾の問題(残留ソーステキスト、サイズが合っていないブロック)をキャッチします。

エンジンが自動的に処理するもの(設定不要)

  • 明るい背景に暗いテキスト AND 暗い背景に明るいテキストのパネル(適切な背景色を選択します)。
  • フラットパネル、スムーズなグラデーション、写真背景(領域ごとに塗りつぶしとインペイントを選択)。
  • 表示グリフがない「ゴースト」テキストレイヤーエントリ(自動スキップ — 描画されません)。
  • 箇条書きで、最初の行のボックスに吸収された箇条書き記号(自動再調整)。
  • フォントサイズ:元のサイズ、ブロックごとに統一されるため、折り返された段落や引用文が不揃いになりません。

デフォルトと要件

  • Python:pymupdf (fitz)、numpy、opencv-python (cv2)、Pillow。
  • CJKフォントのデフォルト Hiragino Sans GB.ttc(macOS;W3 レギュラー idx 0 / W6 ボールド idx 2)。他の言語/フォントの場合は overrides.json の "font" でオーバーライドします。
  • レンダリングスケールのデフォルト 6.0(≈432 dpi)。反復中は速度のために 4 に下げ、印刷用に上げます。
  • デフォルトでソース言語に保持:URL、メールアドレス、ブランド/製品の商標、ロゴの焼き付けテキスト、裸の数字/単位、固有名詞。翻訳者が判断します。KEEP正規表現が明らかなものを事前にフラグ付けします。

参考ファイル

  • references/pipeline.md — 根拠、削除戦略の決定木、および一般的な視覚的欠陥とその正確な修正方法(スジ、残留物、壊れたピル、サイズ崩壊)のカタログ。
  • references/agent-prompts.md — コピー&ペースト可能な翻訳者およびレビューアエージェントのプロンプト。
  • references/overrides.md — overrides.json のスキーマとチャート/ピルの座標の測定方法。

関連スキル