7

PDF ファイルから複数回埋め込まれたフォントを削除する方法はありますか?

これは私のシナリオです:

1) プログラムは、複数の 1 ページの PDF レポートを生成します (DB にクエリを実行し、Excel テンプレートに情報を配置し、フォーマットされた情報を PDF にエクスポートします)。

2) pdftk は、単一ページの PDF を 1 つのファイルにマージします。

すべて正常に動作しますが、結果の pdf のサイズが非常に大きくなります。実際、フォントが複数回埋め込まれていることに気付きました (ページ数と同じ回数: すべてのページは同じ Excel テンプレートから開始して生成されます)。フォントは単一の pdf ファイルに埋め込まれ、pdftk は pdf を接着するだけです)。各埋め込みフォントのコピーを 1 つだけ保持する方法はありますか?

Excel->pdf からエクスポートしているときに、最初のページだけにフォントを埋め込もうとしました。ファイルのサイズは劇的に減少しますが、他のページは埋め込まれたフォントにアクセスできないようです。

ありがとう、アレッサンドロ

4

2 に答える 2

7

Ghostscript を使用して pdftk 連結 PDF を「修復」することもできます (ただし、9.05 などの最新バージョンを使用してください)。多くの場合、Ghostscript は多くのサブセット化されたフォントをより少ないフォントにマージできます。

コマンドは次のようになります。

gswin32c.exe ^
    -o output.pdf ^
    -sDEVICE=pdfwrite ^
    -dPDFSETTINGS=/prepress ^
     input.pdf

確認する

pdffonts.exe  output.pdf
pdffonts.exe  input.pdf 

各ファイルに含まれるさまざまなフォント サブセットのインスタンスの数 (コマンドライン ツールの小さなパッケージの一部としてここpdffonts.exeから入手できます)。

しかし、このプロセスの「遅い」ことについて文句を言わないでください -- Ghostscript はすべての PDF 入力ファイルを完全に解釈してそのタスクを達成しますが、pdftk ファイルの連結ははるかに単純なプロセスです...


アップデート:

代わりに、pdftkGhostscript を使用して入力 PDF ファイルをマージできます。これにより、pdftk でマージされたファイルの事後的な Ghostscript の「修復」で発生していた問題を回避できる可能性があります。これは、「ダム」 pdftk merge よりもはるかに遅くなることに注意してください。ただし、特にフォント処理とファイル サイズに関しては、結果の方が気に入る場合があります。

これは可能なコマンドです:

gswin32c.exe ^
    -o output.pdf ^
    -sDEVICE=pdfwrite ^
    -dPDFSETTINGS=/prepress ^
     input.pdf

マージおよび最適化プロセスをより細かく制御するために、Ghostscript CLI にさらにオプションを追加できます。

最終的には、両極端の間で決定する必要があります。

  • 大規模な出力ファイルを「高速」pdftkに生成することと、
  • gswin32c.exe無駄のない出力ファイルを生成する「遅い」 (Ghostscript)。

多くのマージプロセスの両方の方法の結果(実行時間と結果のファイルサイズ)を投稿していただければ幸いです...


更新 2: 申し訳ありませんが、以前のバージョンにはタイプミスが含まれていました。
そうではありません-sPDFSETTINGS=...が、そうでなければなりません-dPDFSETTINGS=...( s の代わりにd )。


更新 3:

ソース ファイルはテンプレートから作成された Excel シートであるため (通常、多くの異なるフォントを使用することはありません)、Ghostscript がすべての将来的に使用されるフォントの必要なすべてのグリフを確実に持つようにするためのトリックを使用することができます。マージ後の PDF:

  • 各フォントと書体 (標準、斜体、太字、太字-斜体)について、印刷領域の左上にあるテンプレート シートにテーブル セルを追加します。
  • この表のセルに、ASCII アルファベットのすべての印刷可能な文字と句読点を入力します: 0123456789ABCD...XYZabc...xyzなど:-_;°%&$§")({}[]
  • 全体のレイアウトを妨げないように、セル (およびフォントサイズ) を必要なだけ小さくします。白を使用してセル内の文字を書式設定します (最終的な PDF で文字が見えないようにします)。

この方法により、各 PDF が同じグリフのサブセットを使用するようになることが期待されます。これにより、Ghostscript を使用してファイルをマージするときに観察された問題が回避されます。(注意: fe Arial と Arial-Italic を使用する場合、そのようなセルを 2 つ作成する必要があります。1 つは標準の Arial 書体で書式設定され、もう 1 つは斜体で書式設定されます

于 2012-05-17T09:28:32.070 に答える
3

通常、フォントは PDF ファイルの作成時にサブセット化されるため、必要なグリフのみが含まれます。さらに、使用される最初のグリフには文字コード 1 が割り当てられ、2 番目のグリフには文字コード 2 が割り当てられるように、エンコードが変更されます。

その結果、最初の PDF ファイルには、0x01 = A、0x02 = スペース、0x03 = t、0x04 = e、および 0x05 = s のフォントが含まれる場合があります。2 番目のファイルには、0x01 = T、0x02 = e、0x03 =s、0x04 = t のフォントが含まれている可能性があります。

混乱を避けるために、ドキュメント内のフォントの名前に接頭辞が追加されています。このプレフィックスは、フォントの埋め込みを表示するときに Acrobat によって取り除かれるため、同じフォントのインスタンスが複数あるように見えます。ただし、実際には異なるフォントであり、簡単に組み合わせることができません。

これが事実であると仮定すると(そして、私はあなたのファイルを確認する必要があります)、これを回避することは可能です. フォントをサブセット化しないように PDF 作成ソフトウェアを設定すると、pdftk は同じフォントを複数回含めることなくドキュメントをマージできる場合があります。私はこれを明らかにテストしていませんが、うまくいくかもしれません。もう 1 つのオプションは、レポートが最初に複数ページのドキュメントとして生成されるようにワークフローを変更することです。

于 2012-05-17T07:25:30.080 に答える