압축은 내용이 아니라 중복을 없앱니다

PDF는 페이지를 그리기 명령으로 담습니다. 글꼴이 붙은 텍스트 런, 정해진 해상도의 이미지, 벡터 경로, 구조 트리가 그것입니다. 압축기가 없앨 수 있는 중복은 세 가지입니다. 표시될 때보다 높은 해상도로 저장된 이미지, 일부 글자만 쓰는데 통째로 삽입된 글꼴, 편집 후 아무도 참조하지 않는 객체.

없앨 수 없는 것은 내용입니다. 모든 페이지가 600 dpi로 스캔한 사진이라면 파일을 줄이는 유일한 방법은 픽셀을 버리는 것이고, 그것은 최적화가 아니라 품질에 관한 결정입니다.

파일이 커지는 세 가지 경우

결과가 원본보다 큰 경우는 거의 항상 다음 중 하나입니다.

  • 이미 최적화된 파일이었다. 글꼴 서브셋과 이미지 다운샘플을 이미 거친 파일에 한 번 더 손대면 재인코딩만 하게 되고, 비슷한 품질로 JPEG를 다시 인코딩하면 디테일은 그대로인 채 용량만 늘어납니다.
  • 원본이 JPEG로 저장된 스캔본인데, 압축기가 무손실 형식으로 바꾸거나 다시 감쌌다. 무손실은 정의상 더 큽니다.
  • 내보내는 과정에서 선형화, 서명, 암호화가 붙었다. 객체 스트림, 서명 사전, 증분 업데이트는 각각 페이지와 무관한 바이트를 더합니다.

대신 무엇을 할까

쓸모 있는 질문은 “이걸 어떻게 압축하지”가 아니라 “무엇이 공간을 차지하고 있나”입니다. 설정을 건드리기 전에 두 가지 사실이 범위를 좁혀 줍니다.

  • 페이지에서 텍스트를 선택해 보세요. 선택된다면 텍스트 레이어가 있고, 무게는 페이지 스캔이 아니라 글꼴과 이미지에 있습니다.
  • 파일 크기를 페이지 수와 비교하세요. 텍스트 문서는 보통 페이지당 수십 킬로바이트, 스캔본은 페이지당 수백 킬로바이트에서 몇 메가바이트입니다.
  • 스캔본이라면 해상도를 낮추고, 내용이 허락한다면 회색조로 바꾸세요. 메가바이트가 있는 곳이 거기입니다.
  • 페이지당 이미 작다면 그대로 두세요. 300KB짜리 텍스트 PDF를 다시 압축해 250KB 아래로 내려가는 일은 드물고, 오히려 커지는 경우가 많습니다.

“목표 용량까지 압축”에 대하여

일부 도구는 “이 파일을 2MB로 만들어라” 같은 목표 용량을 제공합니다. 그것은 다른 작업입니다. 추정치가 맞을 때까지 이미지 해상도와 품질을 낮추고, 페이지를 읽을 수 없게 되어도 용량이 맞을 때까지 계속합니다. 업로드 한도가 빡빡한 양식에 올릴 때는 쓸모가 있지만, 그냥 더 작은 파일을 원하는 것이라면 품질을 고정하는 쪽이 안전합니다.