2014-12-04 3 views
1

명령 줄 고스트 스크립트를 사용하면 PDF에서 중복 된 포함 된 개체 (이미지)를 제거하고 단일 인스턴스로 바꿀 수 있습니까?ghostscript를 사용하여 PDF에서 중복 객체를 제거하는 방법은 무엇입니까?

배경 이미지가있는 200 개 이상의 PDF와 각 페이지의 작은 로고가 있습니다. 매우 큰 배경 이미지 및 로고 바이너리가 각 페이지에 한 번 포함 된 다음 참조되는 대신 각 개별 페이지에 포함되어 있기 때문에 파일 크기가 매우 큽니다. 나는 PDF의 작성자가 아니기 때문에 문제가 해결 될 수 없다.

(I 축소 또는 이미지 품질이 저하하고 싶지 않아, 나는 완전히 삭제하지 않습니다.)

답변

2

없음 이미지 XObjects 또는 인라인 이미지를 대체하지 않습니다, 고스트 스크립트 (더 구체적으로, pdfwrite 장치) , 그것은 tehy가 동일한지를보기 위해 그것들을 테스트하지 않는다.

이렇게 할 수는 있지만 각 이미지의 모든 바이트를 검사하는 것은 성능면에서 매우 비쌀 수 있으므로 지금은하지 마십시오. 소스 수정을 원한다면 시작할 위치에 대한 제안을 할 수 있습니다.

FWIW 많은 다른 개체는 큰 이미지를 읽고 해시하는 데 걸리는 시간 때문에 단순히 이미지가 아닌 중복 된 것으로 테스트됩니다.

+0

나는 "각 이미지의 모든 바이트를 확인하는 것"*에 대해 어떻게 든 생각하지 않습니다. 이미지 스트림에서 해시를 생성 한 다음 이들을 비교하는 것이 가능하지 않습니까? (해시 생성을 "모든 바이트 검사"로 계산하지 않는 한 어떤 식 으로든 ...) –

+0

예, 이미지의 해시를 '모든 바이트 검사'로 계산합니다. 당신은해야합니다. 현재 pdfwrite는이 목적을 위해 많은 수의 서로 다른 객체 유형에 대한 MD5 해시를 만듭니다. 그러나 일반적으로 상당히 특이한 기능에 대해 여러 메가 바이트의 데이터를 읽는 것이 가치가없는 것으로 간주되어 이미지 용으로 사용하지 않습니다. 내가 말했듯이 누군가가 정말로 그것을하고 싶다면, 해시를 생성하는 위치, 기존의 해시가 일치하는지 확인하는 방법, 그리고 새로운 이미지를 이전의 참조로 대체하는 방법에 대한 지침을 제공 할 수 있습니다. – KenS

+1

누군가가 그러한 도전을 받아들이고 도움으로 구현한다면 정말 좋을 것입니다. OP에서 설명한 이유 때문에 너무 큰 "나쁜"PDF가 많이 있습니다. –

2

고스트 스크립트의 보완 물인 pdfsizeopt은 PDF에서 중복 된 포함 된 객체 (백그라운드 이미지 포함)를 제거하는 데 매우 효과적이며 파일이 고스트 스크립트로 처리되기 전이나 후에 실행할 수 있습니다. 그러나 의존성 때문에 워크 플로에 포함하기가 약간 까다 롭고 많은 임시 파일을 만듭니다. https://github.com/pts/pdfsizeopt (이전 이름 ​​: https://code.google.com/p/pdfsizeopt/)

중복 된 이미지를 제거하면 내 200+ 페이지 문서의 크기가 150MB에서 40MB로 늘어납니다.

관련 문제