PDF 파일 검사에 가장 적합한 도구는 무엇입니까? [닫은]


94

도구로 선호되는 PDF 파일을 어떻게 검사 할 수 있습니까?

사용 사례 : iText를 사용하여 프로그래밍 방식으로 PDF 파일을 생성하려고합니다. 특정 레이아웃을 달성하는 데 문제가 있지만 원하는 방식으로 레이아웃 된 텍스트가있는 PDF 파일 (Word에서 생성됨)이 있습니다. 리버스 엔지니어링을하고 싶습니다.

PDF Inspector 는 좋은 것 같지만 Windows 용을 찾고 있습니다.


PDF Inspector는 Java 기반이므로 다중 플랫폼입니다.
david.perez apr

2
그래도 Windows에서 실행되지 않는 것 같습니다. 클릭해도 항아리는 아무것도하지 않습니다. 명령 줄에서 전화했을 때 내가 얻을no main manifest attribute, in PDF Document Inspector.jar

1
@ david.perez는 자바 기반이지만 사과 포장되어 있기 때문에 사과 전용 배포입니다. "PDF Document Inspector.app/Contents/Resources/Java/PDF Document Inspector.jar"jar가 있지만 java -jar "PDF Document Inspector.jar"로 시작할 수 없습니다. 또한 com.apple.cocoa. *가 많이 포함되어 있습니다. 플랫폼에 따라 다릅니다. :(
안드레이

나는 이제 성공적으로 iText Rups, 다중 플랫폼 및 Java 기반을 사용하고 있습니다.
david.perez

답변:


18

Adobe Acrobat에는 PDF 파일을 검사 할 수있는 매우 멋지지만 숨겨진 모드가 있습니다. https://blog.idrsolutions.com/2009/04/viewing-pdf-objects/에 블로그 기사를 작성했습니다.


플러그인이 필요한 것 같습니다. 적어도 Linux의 Acrobat Reader 9.5.5에서는 사용할 수 없습니다.
Adam Spiers 2014

3
@AdamSpiers, 프리 플라이트 대화 상자가 어도비 아크로벳하지 어도비 리더의 기능입니다
IPSUS

... 그리고 Acrobat ( 이전의 Acrobat Exchange )은 Linux에서 사용할 수 없습니다.-/
Adam

7
프리 플라이트 대화 상자에는 실제로 Adobe Acrobat Pro가 필요합니다. Adobe Acrobat Standard에서는 사용할 수 없습니다.
Futal

1
그리고 실제로 사용하는 것은 UI 악몽입니다.
Jon

87

다른 답변에서 언급 된 GUI 기반 도구 외에도 원본 PDF 소스 코드를 텍스트 편집기로 (현재 수정 된 파일) 검사 할 수있는 다른 표현으로 변환 할 수있는 몇 가지 명령 줄 도구가 있습니다. 아래의 모든 도구는 Linux, Mac OS X, 기타 Unix 시스템 또는 Windows에서 작동합니다.

qpdf (내가 좋아하는 것)

qpdf 를 사용 하여 (대부분의) 객체 스트림의 압축을 풀고 ObjStm객체를 개별 간접 객체로 분해합니다.

qpdf --qdf --object-streams=disable orig.pdf uncompressed-qpdf.pdf

qpdf"PDF 파일에 대한 구조적, 내용 보존 변환" 을 수행하는 도구로 자신을 설명합니다 .

그런 다음 uncompressed-qpdf.pdf원하는 텍스트 편집기에서 파일을 열고 검사하십시오 . 이전에 압축 된 (따라서 바이너리) 바이트의 대부분은 이제 일반 텍스트가됩니다.

mutool

MuPDF PDF 뷰어 (동일한 회사 Artifex 에서 만든 Ghostscript의 자매 제품) mutool와 함께 제공되는 명령 줄 도구 도 있습니다 . 다음 명령은 스트림의 압축을 풀고 텍스트 편집기를 통해 더 쉽게 검사 할 수 있도록합니다.

mutool clean -d orig.pdf uncompressed-mutool.pdf

podofouncompress

PoDoFo 는 PDF 형식으로 작업 할 수있는 FreeSoftware / OpenSource 라이브러리이며podofouncompress. PDF 스트림을 압축 해제하려면 다음과 같이 사용하십시오.

podofouncompress orig.pdf uncompressed-podofo.pdf

peepdf.py

PeePDF 는 PDF 파일을 탐색하는 데 도움이되는 Python 기반 도구입니다. 원래 목적은 PDF 기반 악성 코드의 조사와 해부 였지만 완전히 무해한 PDF 파일의 구조를 조사하는 것도 유용하다고 생각합니다.

PDF에 포함 된 개체와 스트림을 "찾아보기"위해 대화식으로 사용할 수 있습니다.

여기서는 사용 예제를 제공하지 않고 설명서에 대한 링크 만 제공합니다.

pdfid.pypdf-parser.py

pdfid.py그리고 pdf-parser.py두 가지 디디에 스티븐스에 의해 PDF 도구 파이썬으로 작성된이.

그들의 배경은 또한 악성 PDF를 탐색하는 데 도움이 되지만, 무해한 PDF 파일의 구조와 내용을 분석하는 것도 유용합니다.

다음은 PDF 객체 번호의 압축되지 않은 스트림을 추출하는 방법의 예입니다. 5를 * .dump 파일로 변환 :

pdf-parser.py -o 5 -f -d obj5.dump my.pdf

최종 노트

  1. PDF 내부의 일부 바이너리 부분은 PDF 내부에 기본 형식으로 포함되고 사용되기 때문에 압축 할 수없는 부분 (또는 사람이 읽을 수있는 ASCII 코드로 디코딩 할 수 있음)이 아닐 수도 있습니다. 이러한 PDF 부분은 JPEG 이미지, 글꼴 또는 ICC 색상 프로필입니다.

  2. 당신이 도구와 주어진 명령 줄 예제보다 비교하면, 당신은 그들이 할 수 있음을 발견 할 것입니다 NOT 모두 동일한 출력을 생성한다. 차이점 자체를 비교하는 노력은 PDF 구문 및 파일 형식의 특성을 더 잘 이해하는 데 도움이 될 수 있습니다.


42

내가 사용 iText를 RUPS 리눅스 (읽기 및 업데이트 PDF 구문). Java로 작성되었으므로 Windows에서도 작동합니다. PDF 파일의 모든 개체를 트리 구조로 찾아 볼 수 있습니다. 또한 Flate 인코딩 된 스트림을 즉석에서 디코딩하여보다 쉽게 ​​검사 할 수 있습니다.

다음은 스크린 샷입니다.

iText RUPS 스크린 샷


9
java -jar itext-rups-5.5.6.jar-> Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/itextpdf/text/Version-이걸 어떻게 실행해야하나요? 편집 : 그것을 알아 냈습니다. SourceForge에서 제공하는 기본 파일을 다운로드해서는 안되며 종속성이 포함 된 .jar를 다운로드해야합니다.
Zero3 2015

2
@ Zero3는 방금 똑같은 것을 발견했습니다. 귀하의 의견에 감사드립니다.
Sam

1
@KurtPfeifle 나는 완전히 동의합니다. 불행히도 많은 소프트웨어 (이렇게!)는 관리자가 아직 프로젝트를 다른 곳으로 옮기지 않았기 때문에 SourceForge를 통해서만 사용할 수 있으며, 그렇게하지 않을 수도 있습니다. 요즘 SourceForge에서 무엇이든 다운로드 할 때 정말 조심해야합니다 ...
Zero3

7
예-Windows 사용자의 경우 컴파일 된 jar 및 exe로도 가능합니다. 참조 github.com/itext/rups/releases/latest
Amedee 반 가세

1
@AmedeeVanGasse이 답변의 스크린 샷은 페이지보기 (문서 트리와 외부 참조 탭 사이)를 보여줍니다. Windows의 v5.5.9에서 해당보기를 표시하려면 어떻게해야합니까?
iPDFdev 2013


5

저는 PDFBox 를 성공적으로 사용했습니다. 다음은 제공된 예제 중 하나에서 왔을 가능성이있는 코드의 모양 (버전 0.7.2에서 돌아옴)의 샘플입니다.

// load the document
System.out.println("Reading document: " + filename);
PDDocument doc = null;                                                                                                                                                                                                          
doc = PDDocument.load(filename);

// look at all the document information
PDDocumentInformation info = doc.getDocumentInformation();
COSDictionary dict = info.getDictionary();
List l = dict.keyList();
for (Object o : l) {
    //System.out.println(o.toString() + " " + dict.getString(o));
    System.out.println(o.toString());
}

// look at the document catalog
PDDocumentCatalog cat = doc.getDocumentCatalog();
System.out.println("Catalog:" + cat);

List<PDPage> lp = cat.getAllPages();
System.out.println("# Pages: " + lp.size());
PDPage page = lp.get(4);
System.out.println("Page: " + page);
System.out.println("\tCropBox: " + page.getCropBox());
System.out.println("\tMediaBox: " + page.getMediaBox());
System.out.println("\tResources: " + page.getResources());
System.out.println("\tRotation: " + page.getRotation());
System.out.println("\tArtBox: " + page.getArtBox());
System.out.println("\tBleedBox: " + page.getBleedBox());
System.out.println("\tContents: " + page.getContents());
System.out.println("\tTrimBox: " + page.getTrimBox());
List<PDAnnotation> la = page.getAnnotations();
System.out.println("\t# Annotations: " + la.size());

4

또 다른 옵션이 있습니다. Adobe Acrobat Pro는 PDF의 내부 트리 구조도 표시 할 수 있습니다.

  1. 프리 플라이트 열기
  2. 옵션으로 이동 (오른쪽 상단 모서리)
  3. 내부 PDF 구조

맨 위에 Adobe Acrobat Pro는 또한 PDF에서 문서 글꼴의 내부 구조를 표시 할 수 있습니다. 대부분의 다른 "PDF 트리 구조 뷰어"에는이 옵션이 없습니다.

여기에 이미지 설명 입력


2
이것은 @ mark-stephens가 수락 된 답변에서 설명하는 내용입니다.
koppor

3
@ mark-stephens의 답변은 미래에 사라질 수있는 블로그 게시물에 대한 링크 일뿐입니다 (SO에서는 권장되지 않음). vadimo가 실제로 답을 제공합니다.
Starfish



1

Python 내에서 프로그래밍 방식으로 작업하려면 pdfminer 가 좋은 옵션입니다. 개체 계층 구조로 메모리의 PDF 구조를 사용하거나 XML로 직렬화 할 수 있습니다.


-6

내 제안은 Foxit PDF Reader 로 pdf 파일에 대한 중요한 텍스트 편집 작업을 수행하는 데 매우 유용합니다.


6
Foxit Reader에서 PDF Inspector와 유사한 PDF의 내부 구조를 볼 수있는 방법을 찾을 수 없었습니다 (질문에서 참조 됨)
bmaupin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.