Mac OS X Snow Leopardを使用しています。 PDFがあります。これをフリーズ(または「フラット化」)したいPDFフィールドは変更できず、注釈/スタンプは編集できなくなります実際にはこれらのPDFの多くを持っているので、コマンドラインでこれを自動的に実行したいと考えています。
私が試した/検討したいくつかのこと、それらの成功の程度:
pdftk
をflatten
オプションとともに使用します。ただし、これはフォームフィールドを平坦化するだけで、スタンプやその他の注釈は平坦化しません。cupsfilter
を使用すると、多くのファイル形式からPDFを作成できます。pdftk
のように、これはフォームフィールドのみをフラット化しました。cups-pdf
MacのプリントサーバーにフックしてPDF印刷する代わりにファイルを保存します。 macportsバージョン を使用しました。結果のファイルはフラットですが巨大です。私はこれを8MBファイルで試しました;平坦化されたPDFは358MBでした!多分これは buntuのヒント:削減方法PDFコマンドラインからのファイルサイズ 。他の提案はいただければ幸いです。
これは私が最近使用しているものです。機能的にはpdf2ps file.pdf - | ps2pdf - file_flat.pdf
と同じように機能すると思いますが、私にはうまく機能しているように見えました。
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -sOutputFile=<newfile> <oldfile>
pdf2ps
とps2pdf
を続けて使用してみてください。少し面倒ですが、30MBのドキュメントを17MBに減らすのに役立ちました。私が好きだったほどではないが、それでもなお良い。私は、この方法を使用してPDFのパスワード権限を取り除く友人からこのアイデアを得ました。
pdf2ps your_pdf_file.pdf your_pdf_file.ps
ps2pdf your_pdf_file.ps your_pdf_file_from_ps.pdf
お役に立てば幸いです。
Gsまたはpdf2psに続いてps2pdfを使用すると、multi-layerPDF内容が注釈の下にあるオリジナルに存在する) form。この問題は、[すべて選択]、[コピー]、[テキスト編集]ウィンドウに貼り付けて(リッチテキストモードの場合)プレビューで確認できます。たとえば、編集注釈の下にテキストまたはグラフィックが表示されます。明らかに非常に悪いそのコンテンツを出力から削除することが法的に必要な場合。
ImageMagickは、次のコマンドを使用して、構成可能な品質、複数ページ、単一層のフラット化されたPDF各ページのラスターを生成します。
convert -density 150 document_original.pdf document_flat.pdf
このコマンドは、document_original.pdfをラスタライズして、各ページのピクセルベースの画像を150 DPIで作成し、結果をdocument_flat.pdfとして出力します。
rasterization により、拡大縮小できない(ズームすると、テキストまたは元のベクター画像がピクセル化される)PDFが生成されます。元のものが100万点の散布図のような非常に複雑なベクトルコンテンツを持たない限り、ファイルサイズが大きくなる可能性があります。
densityを変更することにより、より大きなファイルサイズをより高い解像度の出力と交換できます。
すべてのテキストは、各ページ画像で未加工のピクセルに変換されます。テキストとベクトル図が最も影響を受けるので、使用可能な出力ファイルが得られるまでDPIを試してください。
それはサブオプションかもしれませんが、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"
Applescriptは、コマンドラインへの最良/最も迅速な方法です。動作したら、それをアプリケーションとして保存し、コマンドシェルでエイリアスを作成して実行できます。その後、コマンドラインでエイリアスを入力するだけです。