2014-11-21 4 views
0

사용 recomprise PDF 파일.추출하고이 종이 접기, 내가, PDF 파일을 열을 추출하고 원래의 PDF를 다시 작성하려고 예에 의해 <a href="http://esec-lab.sogeti.com/pages/Origami" rel="nofollow">http://esec-lab.sogeti.com/pages/Origami</a></p> <p>에서 PDF 파일을 탐험을위한 루비 도구에 대한되는 종이 접기

hg clone https://code.google.com/p/origami-pdf/ 
cd origami-pdf/ 
rake 
cd .. 
curl 'http://www.ada.gov/hospcombrprt.pdf' -o hospcombrprt.pdf 
origami-pdf/bin/pdf2ruby -x hospcombrprt.pdf 
mv hospcombrprt.pdf hospcombrprtORIG.pdf 
cd hospcombrprt 
ruby hospcombrprt.rb # THIS STEP PRODUCES ERRORS 
bc hospcombrprt.pdf ../hospcombrprtORIG.pdf || echo FAILED 

을 그러나 이것은 다음과 같은 오류가 발생합니다 : 이것은 내가이 달성하기 위해 사용하는 것을 시도하고 전체 코드입니다

/Users/williamentriken/Developer/origami-pdf/lib/origami/page.rb:75:in `pages': Invalid page tree (Origami::InvalidPDFError) 
    from /Users/williamentriken/Developer/origami-pdf/lib/origami/pdf.rb:689:in `compile' 
    from /Users/williamentriken/Developer/origami-pdf/lib/origami/pdf.rb:233:in `save' 
    from hospcombrprt.rb:189:in `<main>' 

다른 사람이 라이브러리를 사용하여이 작업을 수행에서 성공을했고, 당신은 할 수 누군가 했 공유해 주시겠습니까?

답변

0

원래의 게시물 :

나는 잠시 동안 라이브러리와 함께 놀았지만 오류 및 복제 페이지와 누락 된 페이지와 같은 사소한 버그를 받고 계속 ...

... 당신에게 저자는 Origami 라이브러리 사용의 한계에 대해 언급해야합니다.

저는 combine_pdf 보석을 권장합니다. 병합, 스탬프 찍기 등과 같은 간단한 pdf 조작에 좋습니다.

갱신는 :

나는 특정 PDF 파일을 보았고,이 지원되지 않는 PDF 버전 관련 문제가 될 수 있습니다.

http://www.ada.gov/hospcombrprt.pdf 파일은 PDF 1.5을 시작으로 PDF 표준에 따른 유형 4 암호화, 암호화되어있다 :

"(PDF 1.5) 보안 핸들러가에서 암호화 및 암호 해독의 사용을 정의 문서, CF, StmF 및 StrF 항목에 의해 지정된 규칙을 사용하여. "

암호화는 PDF 1.6 이상 제한 AES의 V.2, 사용

알고리즘 "AESV2 (PDF 1.6)를 사용하여 데이터를 암호화 키에 대한 보안 핸들러를 요청하며 내재적 해독한다 어플리케이션" 1 : RC4 또는 AES 알고리즘을 사용하여 데이터 암호화 ", 16 바이트 블록 크기의 CBC (Cipher Block Chaining) 모드에서 AES 알고리즘을 사용하고 무작위로 생성되어 초기화 벡터가 처음 16 바이트로 배치됩니다 스트림 또는 문자열. " 따라서, 암호 해독 코드를 작성하더라도, 그 코드를 적용하는 방법은 PDF 파일이 구성되는 방식으로 인해 알려진되지 않을 수 있습니다

...

... 그것은 더 나은 것은 시작하는 수도 간단한 PDF 파일을 사용하고 아직 지원되지 않는 항목을 패치합니다.

+0

나는 이미지를 추출하고 PDF 파일을 재구성 할 수있는 무언가를 찾고있다. 그런 다음 중간의 이미지를 편집 할 수 있습니다. Origami는이 기능을 현재 광고하는 유일한 것입니다. –

+0

사실, CombinePDF는 모든 데이터를 해시 형식으로 저장합니다.이 데이터는 루트 객체 ('pdf.objects.select {| o | o [: Subtype] == : Image}')로 액세스하거나 모든 이미지를 가져올 수 있습니다. 페이지의 트리를 탐색하다. (pdf.pages [0] [: Resources] [: referenced_object] [: XObject] .select {| k, v | v [: referenced_object] && v [: referenced_object] [: Subtype] == : 이미지}') ... 당신은 deflated 바이너리 데이터에 직접 액세스 할 수 있습니다 - 만약 당신이 그것을 사용할 수 ...하지만 이것은 기능, 그냥 부산물이 아닙니다 ...더 나은 인플레이션 지원을 놓치고 있습니다. 코드를 해킹하면 아마 우리는 그것을 보석으로 끌어 들일 수 있습니다. – Myst

+0

참고로 여기가 다운 스트림 사용입니다. https://github.com/pornel/ImageOptim/issues/49 –