PDF 翻訳タスクを引き渡す前に、急いでフォントを変更するのではなく、まずフォントを確認してください。
デフォルトのフォント リストは、full=True によって返されるタプルとは長さが異なります。次に、最初の 6 つの項目を読み取り、extract_font によって返されたフォント バイトが空かどうかを確認します。 Base14 フォント参照は、フォントがプログラムに埋め込まれていることを意味するものではありません。また、サブセットフォントもエラーとみなされるべきではありません。
多くの人が翻訳対象の PDF を入手したとき、最初に考えるのは、それを Siyuan Heibo または Arial に直接変更することです。これにより、配信中に問題が発生することがよくあります。たとえば、数学記号が四角になったり、表の番号がずれたり、特定のリーダーで翻訳が開けなかったりすることがあります。この記事は、PDF 翻訳のタスクを引き継ぐ必要がある開発者およびドキュメント所有者を対象に書かれています。これを読むと、PyMuPDFを使用してフォントのインベントリを作成する方法、返された結果を解釈する方法、コード出力だけではどのような結論を導き出すことができないかがわかります。
フォント インベントリの目的は、技術的な編集可能性とレンダリングの安定性を確認することであり、法的遵守監査を実施することではありません。デフォルトのフォントリストは、full=True によって返されるタプルの長さと異なります。読み取り時には、最初の 6 つの項目を取得し、extract_font によって返されたフォント バイトが空かどうかを確認する必要があります。 Base14 フォント参照は、フォントがプログラムに埋め込まれていることを意味するものではなく、フォントのサブセット化を常にエラーとして扱う必要はありません。
一文の結論
まずフォントの一覧を作成してから、翻訳パスを決定します。テキストを抽出する前にフォントをグローバルに変更しないでください。
| あなたの状況 | 推奨される実践方法 | 理由 |
|---|---|---|
| フォントプログラムが空です | レコードはエンベッダーに抽出されず、ページの状況を確認します | Base14 参照は埋め込まれたフォントと等しくありません |
| サブセットフォントに遭遇 | フォントのアイデンティティを維持する | サブセットフォントは破損と同等ではありません |
| フォントリストが空です | ページ内容を確認する | ページは画像またはその他の描画されたパスである可能性があります |
| 実際のファイルを処理する必要がある | 最初に減感作サンプルで確認してください | サンプルコードは実際のすべてのファイルへの影響を表すものではありません |
フォントをグローバルに直接置き換えることができないのはなぜですか?
フォントを直接置き換えると、次のような典型的な問題が発生します。
- 原文の数学記号は正方形になります。
・表中の数値の等幅配置は無効です。
- 制限されたフォントが埋め込まれているため、一部のリーダーでは翻訳が開かなくなります。
したがって、テキストの抽出または植字の再構築を開始する前に、ドキュメントのフォント インベントリを実行してください。`get_page_fonts()`は PyMuPDF が提供する基礎となるプローブで、各ページで実際にどのフォント リソースが参照されているか、完全に埋め込まれているかどうか、およびエンコード タイプを知ることができます。この情報により、今後 OCR、直接置換、または手動再配置のいずれを使用する必要があるかが決まります。
フォント情報を読み取る際のポイント
- デフォルトのフォント リストは、最初の 6 項目として読み取られる、
full=Trueによって返されるタプルとは長さが異なります。 - フォント プログラムが空の場合は、埋め込まれたフォント バイトが抽出されないことを意味します。
・サブセットフォントはフォント識別子を保持するだけでよく、直接エラーと判断する必要はありません。
合成テスト: メモリの構築とアサーションの検証
この例を分離して実行できるようにするために、完全に自己完結型のテスト ケースを構築しました。外部ファイルに依存する代わりに、スクリプトは PyMuPDF を使用して標準フォントを含む PDF をメモリ内に作成し、それに対して即座にフォント インベントリを実行します。これにより、再現性が確保されるだけでなく、著作権やプライバシーのリスクも回避されます。
import pymupdf
with pymupdf.open() as doc:
page = doc.new_page()
page.insert_text((72, 72), "Font sample", fontname="helv")
fonts = doc.get_page_fonts(0, full=True)
assert fonts
report = []
for item in fonts:
xref, ext, kind, basefont, name, encoding = item[:6]
extracted_name, extracted_ext, extracted_type, data = doc.extract_font(xref)
report.append({"name": basefont, "font_program_present": bool(data),
"xref": xref, "encoding": encoding})
assert report[0]["name"] == "Helvetica"
assert report[0]["font_program_present"] is False
assert report[0]["xref"] > 0
このテストには明確な境界があります。「破損した」または「埋め込まれていない」合成フォント オブジェクトは、外部フォント ファイルを取り込まない限りメモリ内に構築できません。したがって、このテストは 2 つのことに焦点を当てています。1 つは通常の埋め込みフォントの解析精度の検証、もう 1 つは無効なページ番号に対する関数の防御的な処理です。例外ブランチは個別にテストする必要があります。デモ コードは隔離された環境で実行されますが、これはすべての実際のファイルや製品のパフォーマンスを保証するものではありません。
受け入れ基準と手動レビューの境界
コードから出力される「安全」または「警告」は単なる技術的な信号であり、翻訳の実現可能性と直接同等に考えることはできません。スクリプトは埋め込みステータスを正確に報告できますが、フォントにターゲット言語の対応するグリフがあるかどうかを判断したり、ライセンスで埋め込みの変更が許可されているかどうかを評価したりすることはできません。これらの決定は、プロジェクトのコンテキスト内で人々が行う必要があります。
特定の例外処理の決定
| 観察する | 何をするか | 推測すべきではない |
|---|---|---|
| フォントプログラムが空です | レコードがエンベッダーにフェッチされませんでした | Base14 の引用は埋め込みと等しくありません |
| サブセットフォント | フォントのアイデンティティを維持する | ダメージを直接判断することはできません |
| リストが空です | ページ内容を確認する | 画像またはその他の描画されたパスの可能性があります |
重要な書類を処理する前に、原本を保管し、上記の境界および受理項目に従って確認してください。
🎯 どの方法があなたに適していますか?
翻訳対象の PDF を受け取ったばかりの場合
どのパスを選択するかを決定する前に、まずフォントの在庫を確認してください。急いでフォントを置き換えないでください。
検出の結果、フォントプログラムが空であることが示された場合
これを文書化してページのコンテンツを確認し、埋め込みが完了したかのように扱わないでください。
ドキュメント内にサブセット フォントがある場合
フォントロゴをそのままにして、直接エラーと判断せず、正常な状態として扱います。
実際のファイルで検証する必要がある場合
アップロード許可のある減感作サンプルを使用し、この記事のチェックリストを使用して結果を再確認してください。
❓ よくある質問 (FAQ)
1. Base14 フォント参照は、フォントが埋め込まれていることを意味しますか?
いいえ。 Base14 フォント参照は、フォント プログラムが埋め込まれていることを意味するものではありません。 extract_font によって返されたフォント バイトが空かどうかを確認する必要があります。
2. サブセットフォントに問題がありますか?
不確かな。サブセットフォントをすべてエラーと判断すべきではありません。フォントロゴだけを保存し、直接破損していると判断しないでください。
3. フォント リストが空の場合は、ページに問題があることを意味しますか?
不確かな。リストが空の場合は、まずページのコンテンツを確認する必要があります。ページは画像またはその他の描画パスである場合があります。
4. スクリプトの「安全な」結果は、翻訳の決定に直接使用できますか?
できません。コード出力は単なる技術信号であり、ターゲット言語のグリフが利用可能かどうか、またはライセンスで埋め込みの変更が許可されているかどうかを知ることはできません。
📝 概要
フォント インベントリは、PDF 翻訳前の基本的な手順です。これは、ドキュメントの編集可能性とレンダリングの安定性を判断するのに役立ちます。ファイルを取得したら、まずフォントを確認し、次にパスを選択します。翻訳後も、タイトル、本文、凡例の対応を確認する必要があります。


