3

pathPDFファイルから すべてのオブジェクトを削除する方法を探しています。

これはおそらくAdobeAcrobatのjavascriptで実行できると思いますが、ghostscriptまたはmupdfツールで実行するためのヒントをいただければ幸いです。

とにかく、どんな実用的な解決策も正解として受け入れられます

4

1 に答える 1

6

Ghostscriptでこれを行うには、pdfwriteデバイスを変更する必要があります。実際、PDFインタープリターについても同様のことをしなければならないでしょう。

'path'オブジェクトをどう思いますか?たとえば、shfill?テキストはどうですか?タイプ3フォント(パスを構成する)を使用したテキストはどうですか?

クリップパスはどうですか?

本当にこれを追求したいのであれば、Ghostscriptを再コンパイルしてもかまわないのであれば、pdfwriteを変更する場所を教えてください。

それはおそらくばかげた質問ですが、なぜあなたはこれをしたいのですか?あなたの問題に別の解決策があるかもしれませんか?塗りつぶされたパス(または実際にストロークされたパス)を削除するだけの場合、1つの解決策は、ファイルをps2writeで実行してPostScriptを取得し、コードを追加して「fill」と「stroke」をno-opsとして再定義してから、 PDFを取得するには、pdfwriteを介してファイルを戻します。

[コメントを読んだ後に追加]

オブジェクトの一種であるXObjectとは異なり、PDFには「path」オブジェクトがありません。パスは、「newpath」、「moveto」、「curveto」、「lineto」などの一連の操作によって作成されます。パスを作成したら、「塗りつぶし」または「ストローク」を使用してパスを操作します。PDFにも「テキスト」オブジェクトタイプがないことに注意してください。

これがあなたのアプローチが機能しない理由です。パスはコンテンツストリームに作成されていないため、「パスオブジェクト」を削除することはできません。Form XObjectを使用して同様のことを行うことができますが、パスの構築はFormコンテンツストリームにあり、それでも個別のオブジェクトではありません。

同じことがPostScriptにも当てはまります。これらは、オブジェクト指向言語ではありません。オブジェクトがないため、どちらの言語でも「パス型のベクトルオブジェクトを検出することはできません」。実際には、画像ではないものはすべてベクターオブジェクトであり、パスから構築されます(クリッピングを使用すると、一部の画像でさえパスと見なされる場合があります)

強調表示したPostScriptの一部は、パスに長方形を追加し(パスは、PDFまたはPostScriptのいずれかで連続している必要はありません)、それを塗りつぶします。PostScriptで通常行われているように、これらはPostScript演算子を直接使用しているのではなく、演算子を使用するプロシージャを実行していることに注意してください。手順はプログラムプロローグで定義されています。

ちなみに、ここではpswriteデバイスを使用したようです(このような小さなサンプルではわかりません)。この場合は、代わりにps2writeから始めたいと考えています。そうしないと、非常に多くのことが小さな塗りつぶされた長方形に縮退することになります(pswriteは多くの画像タイプでこれを行います)

ps2write出力を「復号化」することはお勧めしません(暗号化されておらず、圧縮されています)。

私が提案したのは、PostScriptファイルを作成し、「show」および/または「fill」演算子を再定義して何もしないようにしてから、pdfwriteデバイスを使用してGhostscriptを介して結果のPostScriptプログラムを実行することでした。これにより、すべてのストロークオブジェクトや塗りつぶされたオブジェクトが無視されるPDFファイルが生成されます。

【最終追加】

私はあなたのサンプルファイルを拾い上げて調べました。

あなたが見ているバグは、PDFファイルが/ Separationカラー(確かに長方形を塗りつぶすことはできません)をICCBased代替色で使用し、デバイススペースの色合いが変換されていないことだと思います。その場合、ps2writeの現在のバージョンで問題が解決する可能性があります。(現在、これは変更によるものです)/ Separationカラーを保持せず、代わりにデフォルトのRGBであるデバイスカラーとして出力します。したがって、ファイルをPostScriptに変換してPDFに戻すだけで、問題を完全に解決できる場合があります。

問題が何であるかを知っていれば、私たちに話してくれればもっと早かったでしょう。そもそもその情報と回避策を提供できたはずです。

次に、ps2writeを使用して、ファイルのPostScriptバージョンを作成し(分離色がRGBになっていることに注意してください)、PostScriptプログラムの前に2行を追加しました。

/fill {newpath} bind def
/stroke {newpath} bind def

バイナリを保持するエディタを使用する必要があることに注意してください。次に、pdfwriteデバイスを使用してGhostscriptを介してそのPostScriptプログラムを実行し直すと、問題があると思われる緑色の「装飾」がなくなったPDFファイルが取得されます。

だから、あなたの質問に対する解決策があり、あなたの問題を解決するためのおそらくより良い方法もあります。

于 2013-01-19T15:16:33.310 に答える