web-dev-qa-db-ja.com

PDFのすべてのフォントグリフを、アウトライン形状に変換して置き換えます

'outline' PDFファイル内のすべてのテキスト/フォント、つまり曲線に変換する方法を探しています。

PDFをPostScriptに変換したり、元に戻したりせずにこれを実行したいと思います。また、コマンドラインから自動化できる無料の軽量クロスプラットフォームツールを使用したいと思います。 GhostscriptまたはMuPDF。

17
Szabolcs

はい、Ghostscriptを使用して目的を達成できます。

I.9.14までのGhostscriptバージョンの場合

次の2つの手順を実行する必要があります。

  1. PDFをPostScriptファイルに変換しますが、比較的未知のパラメーターの副作用を使用します。これは-dNOCACHEと呼ばれます。これにより、使用されるすべてのフォントがアウトライン形状に変換されます。

    gs -o somepdf.ps -dNOCACHE -sDEVICE=pswrite somepdf.pdf
    
  2. PSをPDFに戻す(そして、おそらく中間PSを再度削除する)):

    gs -o somepdf-with-outlines.pdf -sDEVICE=pdfwrite somepdf.ps
    
    rm somepdf.ps
    

Ghostscript開発者は、-dNOCACHEが将来のバージョンに存在しない可能性があると述べているため、この方法は長期的には信頼できません。

注:結果のPDFは元の値よりも大きくなる可能性が非常に高いです。プラス、追加のコマンドラインパラメータがないと、元のPDFのすべての画像も、Ghostscriptの組み込みのデフォルトに従って処理される可能性があります。これにより、望ましくない副作用が発生する可能性があります。これらの副作用は、次の方法で回避できます。それ以外の場合は、コマンドラインパラメータを追加します。


II。 Ghostscriptバージョン9.15以降

Ghostscriptバージョン9.15(2014年9月にリリース)は、新しいコマンドラインパラメーターをサポートします。

 -dNoOutputFonts

これにより、出力デバイスpdfwriteps2write、およびeps2write "は、(フォントを書き込むのではなく、 'グリフを'基本的な 'マーキング操作に'フラット化 'します。出力へ) "

つまり、9.15より前のGSバージョンで説明した2つの手順を回避できます。目的の結果は、次の1つのコマンドで実現できます。

 gs -o file-with-outlines.pdf -dNoOutputFonts -sDEVICE=pdfwrite file.pdf

注:パートIですでに述べたのと同じ警告が当てはまります。PDF =画像が含まれている場合、上記の単純なコマンドラインによって望ましくない副作用が発生する可能性があります。これらを回避するには、より具体的なパラメータを追加する必要があります。

32
Kurt Pfeifle

これ commit 新しいスイッチを追加します-dNoOutputFontsすべてのグリフがテキストではなくベクトルとして作成されたPDFファイル(または選択したデバイスによってはPostScript))を生成するGhostscriptpdfwriteおよびps2writeデバイスに。

この機能を利用するには、少なくともバージョン9.15のGhostscriptが必要です。 PDFファイルはほぼ確実に大きくなり、コピー/貼り付け/検索は(明らかに)機能しないことに注意してください。

8
KenS