インフォグラフィックPDFのローカライゼーション(アートワーク維持)
デザインPDFの翻訳版を生成します。元の文書と同一の外観を保ちつつ、すべての本文テキストが対象言語に置き換えられます。ページをラスタライズし、ソーステキストを消去した上で、翻訳を同じ座標に合成します。アートワーク(写真、チャート、グラデーション、アイコン、ロゴ)は再生成されません。
このパイプラインの理由(最初にお読みください)
デザインエクスポートされたPDFは、通常表示テキストがベクターアウトライン(テキスト→カーブ)またはType3グリフとして保存されています。これは編集可能なテキストではなく、「テキストを置き換える」クリーンな方法はありません。しかし、これらのPDFにはほとんどの場合、検索可能なテキストレイヤーが隠されており、そのワードボックスは表示テキストとピクセル単位で位置が合っています。このレイヤーは正確な位置とサイズを無料で提供します。したがって、テキストを編集しようとせず、生成画像モデルで背景を「再描画」しないでください。アートワークが変更され、ピクセル忠実性が失われます。代わりに、カバー&オーバーレイ方式を使用します。各ソースグリフの連なりを消去し、翻訳をその場に再描画します。背景はバイトレベルで忠実に保たれます。詳細な根拠と失敗モードについては references/pipeline.md を参照してください。
ワークフロー(スキルの scripts/ からスクリプトを順番に実行)
作業ディレクトリを選択します(デフォルト loc_work)。すべてのスクリプトは SOURCE.pdf [OUTDIR] [PAGE] を受け取ります。
-
分析 —
01_analyze.py SOURCE.pdf OUTDIRテキストの保存方法を確認し、埋め込み画像をリストアップし、ページをレンダリングします。レンダリング結果を確認し、チャート/ロゴ/写真画像に焼き付けられたテキスト(テキストレイヤーに含まれないため、manual_labelsで処理する必要があります)に注意してください。 -
抽出 —
02_extract.py SOURCE.pdf OUTDIR(環境変数LOC_KEEP='brandA|brandB'でソース言語の文字列をより多く保持できます)。units.json(物理的なテキスト行ごとに1エントリ、bbox/色/サイズを含む)とtranslator_source.txt(読みやすいID付きペイロード)+half_*.pngを生成します。 -
翻訳 — 翻訳エージェントを起動します。
translator_source.txtとhalf_0/1.pngを渡します。エージェントはOUTDIR/translation.json = {"<id>":"译文", ...}を書き込む必要があります。すべてのIDをカバーし(KEEP-AS-IS IDはそのままエコーします)。references/agent-prompts.mdのプロンプトを使用してください。 -
オーバーライド(必要な場合のみ) — 自動エンジンでは認識できない文書固有の部分に対して
OUTDIR/overrides.jsonを書き込みます。画像に焼き付けられたテキスト(manual_labels)、細いストロークのコントロール(ピル/バッジなど)内のテキスト(solid_fill_labels)、中央揃えのラベルゾーン(centered_id_ranges)、およびdrop_ids。スキーマと座標の測定方法:references/overrides.md。ほとんどのシンプルなフライヤーではオーバーライドは不要です。チャートが多いものでは数個必要になる場合があります。 -
合成 —
03_compose.py SOURCE.pdf OUTDIR→final_zh.png。これは決定論的なエンジン(背景の再構築 + サイズ統一の再描画)です。文書ごとの調整は不要です。 -
PDFと切り抜き —
04_pdf.py SOURCE.pdf OUTDIR OUT.pdf→ PDFとQA用のzh_L/zh_R.png。 -
レビューと反復 — レビューアエージェントを起動し、
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のスキーマとチャート/ピルの座標の測定方法。