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. 파일의 압축 여부를 보여 주어야합니다.
polemon

1
@polemon : 감사합니다! 그렇지 않습니다. 의 아웃 풋 $file 3.pdf입니다3.pdf: PDF document, version 1.4
모든 StackExchange

참고 개별 스트림 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 파일의 일부 (또는 "스트림")는 이미 어떤 방식으로 (압축 / 필터링 할 때 표시됨) 압축되고 다른 일부는 압축되지 않습니다. PDF가 압축되었는지 여부에 대한 YES / NO 답변이 없습니다.
이를 극복하는 한 가지 방법은 -cgrep에 옵션 을 추가하는 것입니다.이 옵션은 발생 횟수를 반환하므로 압축률이 비교적 어느 정도인지 알 수 있습니다 . 예를 들어 10보다 작은 값을 반환 하면 압축되지 않은 것입니다.strings "large.pdf" | grep -c /Filter

PDF의 크기와 관련된 또 다른 속성은 wikipedia 에서 인용 할 수 있도록 "최적화 된"PDF의 크기가 더 큰 빠른 액세스에 최적화되었는지 여부입니다 .

PDF 파일에는 비선형 ( "최적화되지 않은") 및 선형 ( "최적화 된")의 두 가지 레이아웃이 있습니다. 비선형 PDF 파일은 선형 파일보다 적은 디스크 공간을 소비하지만 문서 페이지를 구성하는 데 필요한 데이터 부분이 PDF 파일 전체에 흩어져 있기 때문에 액세스 속도가 느립니다. 선형 PDF 파일 ( "최적화 된"또는 "웹 최적화 된"PDF 파일이라고도 함)은 파일이 디스크에 기록되기 때문에 전체 파일이 다운로드 될 때까지 기다리지 않고 웹 브라우저 플러그인에서 읽을 수있는 방식으로 구성됩니다. 선형 (페이지 순서대로) 방식. PDF 파일은 Adobe Acrobat 소프트웨어 또는 QPDF를 사용하여 최적화 될 수 있습니다.

를 사용하여 PDF가 최적화되었는지 확인할 수 있습니다 pdfinfo your.pdf.


감사! (1) qpdf를 사용한 결과는 pdftk를 사용하는 것과 비슷합니다. 압축하면 크기가 실제로 약간 커지고 (이상한) 압축되지 않으면 크기가 훨씬 커져 거의 두 배가됩니다. (2) pdftk와 gpdf는 압축 및 압축 해제 옵션을 사용하여 동일한 것을 달성하려고합니까?
3

@Tim : (죄송합니다.) (1)에 대해 설명했듯이 PDF는 이미 부분적으로 압축되어 있으므로 (아마도) 압축이 너무 많이 저장되지 않는 이유입니다 (압축을 해제하면 압축 된 스트림이 모두 압축 해제되므로 압축이 훨씬 커집니다 ). (2) 대부분의 아마 qpdfpdftk압축에 대한 다소간 같은 일을하지만, qpdf너무 (및 더 많은 것)를 최적화 할 수 있습니다.
Philomath

10

pdftk 는 압축 / 압축 해제와 같은 PDF 파일에 대한 일부 작업을 수행하는 도구입니다.

$ pdftk test.pdf output compressed_test.pdf compress

감사! pdf 파일이 이미 압축되어 있는지 확인하는 방법이 궁금합니다.
모든 StackExchange for

1
@Tim : pdfinfo file.pdfPDF가 최적화 되었는지 알려줍니다 . 그러나 그것이 압축 을 의미하는지 여부는 확실 하지 않습니다.
nico

1
@uloBasEI : 압축을 위해 pdftk를 사용하여 명령을 시도했지만 크기는 거의 변하지 않았습니다. 압축을 풀면 파일 크기가 두 배가됩니다. 원본 파일, 압축 파일 및 압축되지 않은 파일의 속성은 모두 최적화되지 않은 것으로 표시합니다.
모든 StackExchange for

@ 니코 : 감사합니다! 위의 의견과 업데이트를 참조하십시오. 압축과 최적화가 서로를 암시하지 않는 것 같습니다.
모든 StackExchange for


1

pdf 파일에서 압축 방법을 찾았습니다. 텍스트 편집기로 PDF를 엽니 다. 찾을 수 없으면 검색 또는 찾기 입력 CCITT를 실행하고 JPEG, Flate, JBIG2, LZW, RLE, ZIP을 입력하십시오.
그것보다 더 나쁜 소리! 데이터 스트림의 압축 방법을 매우 쉽게 찾을 수 있습니다.


이것은 오히려 iffy입니다. grep -E "(CCITT | JPEG | Flate | LZW | RLE | ZIP)"uncompressed.pdf에서 와 같이 grep 을 사용하여 압축되지 않은 PDF (qpdf로 압축되지 않은) 파일을 확인하는 방법을 사용 하여이 메시지가 Binary file uncompressed.pdf라는 메시지를 표시 합니다. 일치 합니다. LZW 및 RLE 패턴을 모두 포함하는 uncompressed.pdf 파일을 감지하는 것 같습니다.
user91822

-1

속성을 확인하십시오. 파일이 압축되었는지 여부를 알려줍니다.


문제 Heidi는 특히 스크립트 가능한 명령 줄 기반 프로그램에서 속성을 확인하는 프로그램이라고 생각합니다.
Caleb

> 속성을 ​​확인하십시오. 그러나 어떤 [오픈 소스] 프로그램이이를 수행 할 수 있습니까?
Maxim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.