PDFファイルが圧縮されているかどうかを確認し、それを(圧縮解除する)方法


18

PDFファイルを圧縮してディスクサイズを削減できることを知りました。

  1. PDFファイルがすでに圧縮されているかどうかを知る方法を疑問に思っていましたか?
  2. PDFファイルを圧縮または圧縮解除するために使用できるアプリケーション/コマンドは何ですか?

私の環境はLinux Ubuntu 10.10です。


いくつかの試みでは満足のいく結果が得られません。

  1. 試行の結果はpdftk次のとおりです。

    $ pdftk 3.pdf output 5.pdf uncompress 
    $ pdftk 3.pdf output 3comp.pdf compress 
    $ ls -l 3.pdf 3comp.pdf 5.pdf
    -rwxrwx--- 1 root plugdev  8652269 2011-07-30 12:27 3comp.pdf
    -rwxrwx--- 1 root plugdev  8652319 2011-07-29 22:15 3.pdf
    -rwxrwx--- 1 root plugdev 16829828 2011-07-30 12:27 5.pdf
    

    ファイルのプロパティは、それらのすべてが最適化されていないことを示しています。

  2. psに変換してからpdfに戻した結果:

    $ pdf2ps 3.pdf 3.ps
    $ ps2pdf 3.ps 3c.pdf
    $ ls -l 3.pdf 3.ps 3c.pdf
    -rwxrwx--- 1 root plugdev   8808946 2011-07-30 13:14 3c.pdf
    -rwxrwx--- 1 root plugdev   8652319 2011-07-29 22:15 3.pdf
    -rwxrwx--- 1 root plugdev 122375966 2011-07-30 13:14 3.ps
    

私は手で圧縮されたPDFを持っていますが、しようとしないので、私は、今、それをテストすることはできませんfile。ファイルが圧縮されているかどうかを示す必要があります。
ポレモン

1
@polemon:ありがとう!そうではありません。出力$file 3.pdf3.pdf: PDF document, version 1.4
ティム

PDFファイル内の個々のストリームは圧縮できることに注意してください。そのため、「PDFファイル全体が圧縮されている」という質問は間違った質問です(多くの場合、すべて、またはほとんどのストリームは圧縮または非圧縮のいずれかです)。
Dirkt

回答:


30

要するに:

既に圧縮されているかどうかを知るには:

strings your.pdf | grep /Filter

PDFを(圧縮解除)するには、QPDFを使用します

qpdf --stream-data=compress your.pdf compressed.pdf
qpdf --stream-data=uncompress compressed.pdf uncompressed.pdf  

説明:

PDFファイル内の「Filter」キーワードは、使用される圧縮方法の指標です。それらのいくつかは次のとおりです。

CCITT G3 / G4 –モノクロ画像に使用
JPEG – 画像に使用される非可逆アルゴリズム
JPEG2000 – JPEGのより新しい代替。画像の圧縮にも使用
Flate –テキストと画像の圧縮に使用
JBIG2 –モノクロ画像のCCITT圧縮
LZW –テキストおよび画像の圧縮に使用されますが、Flate
RLEに置き換えられます
– モノクロ画像ZIPに使用–グレースケールまたはカラー画像に使用

ここからコピー)。

ただし、PDFの複雑なファイル構造を考えると、ほとんどの場合、PDFの一部(または「ストリーム」)は何らかの方法ですでに圧縮され(grepを実行すると表示されます)、他の一部は圧縮されないため、 PDFが圧縮されているかどうかの質問に対するYES / NO回答はありません。
これを克服する1つの方法-cは、grepにオプションを追加することです。grepはオカレンスの数を返すので、比較的圧縮率が高いことがわかります。たとえば、返される値が10未満の場合、かなり圧縮されていません。strings "large.pdf" | grep -c /Filter

PDFのサイズに関連するもう1つの特性は、ウィキペディアから引用するために、「最適化された」PDFのサイズが大きくなり、クイックアクセス用に最適化されているかどうかです。

PDFファイルには、非線形(「最適化されていない」)と線形(「最適化された」)の2つのレイアウトがあります。ノンリニアPDFファイルはリニアドキュメントよりもディスクスペースを消費しませんが、ドキュメントのページを組み立てるのに必要なデータの一部がPDFファイル全体に散在しているため、アクセスが遅くなります。リニアPDFファイル(「最適化」または「ウェブ最適化」PDFファイルとも呼ばれます)は、ファイル全体がダウンロードされるのを待たずにWebブラウザプラグインで読み取れるように構築されます。線形(ページ順)ファッション。PDFファイルは、Adobe AcrobatソフトウェアまたはQPDFを使用して最適化できます。

を使用してPDFが最適化されてpdfinfo your.pdfいるかどうかを確認できます。


ありがとう!(1)qpdfを使用した結果は、pdftkを使用した場合と同様です。compressを使用すると、サイズが実際に少し大きくなり(ストレンジ)、uncompressを使用すると、サイズがはるかに大きくなり、ほぼ2倍になりました。(2)pdftkとgpdfは、compressおよびuncompressオプションを使用して同じことを達成しようとしますか?
ティム

@ティム:(すみません、私はここにいませんでした)。(1)は、私が説明したように、PDFがすでに部分的に圧縮されているため(ほとんどの場合)、圧縮があまり保存されない理由です(そして、圧縮解除はすべての圧縮ストリームを圧縮解除するため、圧縮をはるかに大きくします)。(2)おそらくqpdfpdftk圧縮に関して、多かれ少なかれ、同じことを行うが、qpdfあまりにも(プラスより多くのもの)を最適化することができます。
フィロマス

10

pdftkは、圧縮/解凍など、PDFファイルに対していくつかの操作を実行するツールです。

$ pdftk test.pdf output compressed_test.pdf compress

ありがとう!pdfファイルがすでに圧縮されているかどうかを知る方法を知りたいですか?
ティム

1
@Tim:pdfinfo file.pdfPDFが最適化されているかどうかを示します。ただし、それが圧縮を意味するかどうかはわかりません。
ニコ

1
@uloBasEI:圧縮にpdftkを使用してコマンドを試しましたが、サイズはほとんど変わりませんでした。解凍すると、ファイルサイズが2倍になります。元のファイル、圧縮ファイル、および非圧縮ファイルのプロパティはすべて、最適化されていないことを示しています。
ティム

@nico:ありがとう!上記のコメントと更新をご覧ください。圧縮と最適化はお互いを暗示していないようです?
ティム


1

pdfファイルで圧縮方法を見つけました。テキストエディターでPDFを開きます。検索または検索の実行-見つからない場合はCCITTを入力し、JPEG、Flate、JBIG2、LZW、RLE、ZIPの順に入力します。
それよりも悪い音!データストリームの圧縮方法を見つけるのは非常に簡単です。


これはかなり不確かです。私が使用して(qpdfで非圧縮)圧縮されていないPDFファイルをチェックするためにあなたの方法を使用するのgrepをのように"(RLE | | LZW | Flateアルゴリズム| | JPEG CCITT ZIP)"はgrep -E uncompressed.pdf、それは、このメッセージを返しバイナリファイルuncompressed.pdfを一致します。uncompressed.pdfファイルを検出して、LZWとRLEの両方のパターンを含むように見えます。
user91822

-1

プロパティを確認するだけです。ファイルが圧縮されているかどうかを示します。


ハイジの質問は、特にスクリプト可能なコマンドラインベースのプログラムで、プロパティをチェックするプログラムです。
カレブ

>ただそのプロパティを確認してください-しかし、どの[オープンソース]プログラムでこれを行うことができますか?
マキシム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.