コマンドラインでMac OSのPDFを完全にフラット化するにはどうすればよいですか?


16

Mac OS X Snow Leopardを使用しています。フォームフィールド、注釈、およびスタンプを含むPDFがあります。フォームフィールドを変更できず、注釈/スタンプが編集できないように、そのPDFをフリーズ(または「フラット化」)したいと思います。私はこれらのPDFの多くを実際に持っているので、コマンドラインでこれを自動的に行いたいと思います。

私が試した/考えたいくつかの事柄とその成功度:

  • プレビューで開き、ファイルに印刷します。これにより、ファイルサイズを変更せずに完全にフラットなPDFが作成されます。しかし、自動化する唯一の方法は、私が避けようとしてきた、派手なUIベースのAppleScriptを書くことです。
  • Acrobat Proで開き、JavaScript関数を使用してフラット化します。繰り返しますが、コマンドラインでこれを自動化する方法がわかりません。
  • オプションpdftkとともに使用しflattenます。ただし、これはフォームフィールドのみを平坦化し、スタンプやその他の注釈は平坦化しません。
  • 使用cupsfilter多くのファイル形式からPDFを作成することができます。pdftkこのようにフォームフィールドのみをフラット化しました。
  • cups-pdfMacのプリントサーバーに接続して、印刷の代わりにPDFファイルを保存するために使用します。私はmacportsバージョンを使用しました。結果のファイルはフラットですが、巨大です。これを8MBファイルで試しました。平坦化されたPDFは358MBでした!おそらく、Ubuntuのようにghostscript呼び出しと組み合わせることができます。ヒント:コマンドラインからPDFファイルのサイズを縮小する方法

他の提案をいただければ幸いです。


1
Automator.appには、いくつかの組み込みのPDF処理オプションがあります。おそらく、それらの1つが直接役立つか、上記のアクションの1つと組み合わされる可能性があります。
カッシムドーセル

これらの要素を含むPDFサンプルドキュメントを提供できますか?
ダニエルベック

私はそう思う。現在、私のすべてのサンプルは学生のクイズですので、私は何かを模擬する必要があります。
マシューレインガン

回答:


11

連続して使用pdf2psps2pdfてみてください。少し面倒ですが、30MBのドキュメントを17MBに減らすことができました。好きなほどではありませんが、それでもなお良いです。私は、この方法を使用してPDFのパスワード許可を取り除いた友人からこのアイデアを得ました。

pdf2ps your_pdf_file.pdf your_pdf_file.ps
ps2pdf your_pdf_file.ps your_pdf_file_from_ps.pdf

お役に立てば幸いです!


3
GhostScript FTW!パイプを使用して、1行にまとめましたpdf2ps file.pdf - | ps2pdf - file_flat.pdf。ファイルは300Kから500Kに増加しcups-pdfました。これは大きな割合の増加ですが、メソッドがもたらす4400%の増加に匹敵します。
マシューレインガン

実際、私は幸運に恵まれましたpdf2ps -q -sOutputFile=- file.pdf | ps2pdf - file_flat.pdf
マシューレインガン14

4
MacにGhostscriptをインストールすると、上記のコマンドをhomebrewで使用できるようになりますbrew install ghostscript
ニック

5

だから、これは私が最近使用しているものです。機能的にはと同じことをしていると思いますが、私にとってはうまく機能してpdf2ps file.pdf - | ps2pdf - file_flat.pdfいるようです。

gs -sDEVICE=pdfwrite -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -sOutputFile=<newfile> <oldfile>

私にとってps2pdfソリューションは失敗しました。これは、明らかにPDFのフォントのインデックスを再作成することで機能しました。
チャフィンク

これらのコマンドはどちらも平坦化されません。プレビューを使用して基礎となるレイヤーをコピーすると、元のコンテンツが表示されます。
アランオディア

1

それはサブオプションかもしれませんが、pdftkまたはcupsfilterでcups-pdfを連鎖させることを検討しましたか?前述のように、cups-pdfはフラットなpdfファイルを生成し、それをpdftkまたはcupsfilterに渡して許容可能なサイズに下げますか?

または、/System/Library/Printers/Libraries/convert 次のようなことをすることができるはずです

/System/Library/Printers/Libraries/convert -f input_file.pdf -o output_file.pdf -j "application/pdf"

私のMacにはありません/System/Library/Printers/Libraries/convert。試しましたcupsfilter。PDFからPDFに変換するときに、ファイルに変更は加えられませんでした。PDFからPSに変換してからPDFに変換すると、注釈が失われました。
マシューレインガン

1

警告:gsおよびpdf2ps | ps2pdfはPDFを統合しません!

gsまたはpdf2psに続いてps2pdfを使用すると、注釈付きのコンテンツが元の形式で存在するマルチレイヤー PDF が生成されます。プレビューでこの問題を確認するには、[すべて選択]、[コピー]、[テキスト編集]ウィンドウに貼り付け(リッチテキストモード)を使用します。たとえば、墨消し注釈の下にテキストまたはグラフィックが表示されます。そのコンテンツを出力から削除することが法的に必要な場合、これは明らかに非常に悪いことです。

実用的なソリューション

ImageMagickは、次のコマンドを使用して、各ページのラスターを使用して、構成可能な品質のマルチページ、単一レイヤーのフラットPDFを作成できます。

convert -density 150 document_original.pdf document_flat.pdf

このコマンドはdocument_original.pdfをラスタライズし、150 DPIで各ページのピクセルベースの画像を作成し、結果をdocument_flat.pdfとして出力します。

画質に関する注意

ラスタライズにより、スケーラブルではないPDFが生成されます(ズームすると、テキストまたは元のベクター画像がピクセル化されます)。元のファイルに100万ポイントの散布図のような非常に複雑なベクトルコンテンツがない限り、ファイルサイズは大きくなります。

密度を変更することにより、より大きなファイルサイズと高解像度の出力を交換できます。

すべてのテキストは、各ページ画像で生のピクセルに変換されます。テキストダイアグラムとベクトルダイアグラムの影響が最も大きいため、使用可能な出力ファイルが得られるまでDPIを試してください。


1
この回答にご協力いただきありがとうございます。5年前、私が書いた解決策は私のために働いていました。しかし、次にこれをしなければならないとき(実際にはすぐに)、あなたの答えを試してみます。
マシューレインガン

それは理にかなっている。アノテーションのフラット化に関してGhostscriptの動作が変わったと思います。-PreserveAnnots = falseを追加しようとしましたが、まだ機能しませんでした。内部では、PDF処理にGhostscriptを使用して変換します。Acrobatの機能を実行したいのです。アノテーションを保持し、その背後にあるコンテンツを削除し、カバーされていないベクター画像を保持します。しかし、新しいAcrobatを備えたDocument Cloudの作品は、機密データにそれを使用するのが本当に不安です。
アランオディア

0

Applescriptは、おそらくコマンドラインへの最良/最も速い方法です。動作したら、アプリケーションとして保存し、コマンドシェルでエイリアスを作成して実行できます。その後、コマンドラインでエイリアスを入力します。


しかし、AppleScriptでPDFをフラット化する最も簡単な方法は何ですか?ファイルへの印刷を模倣するUIのスクリプトは作成しません。それは気味悪くて遅いようです。
マシューレインガン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.