도구로 선호되는 PDF 파일을 어떻게 검사 할 수 있습니까?
사용 사례 : iText를 사용하여 프로그래밍 방식으로 PDF 파일을 생성하려고합니다. 특정 레이아웃을 달성하는 데 문제가 있지만 원하는 방식으로 레이아웃 된 텍스트가있는 PDF 파일 (Word에서 생성됨)이 있습니다. 리버스 엔지니어링을하고 싶습니다.
PDF Inspector 는 좋은 것 같지만 Windows 용을 찾고 있습니다.
도구로 선호되는 PDF 파일을 어떻게 검사 할 수 있습니까?
사용 사례 : iText를 사용하여 프로그래밍 방식으로 PDF 파일을 생성하려고합니다. 특정 레이아웃을 달성하는 데 문제가 있지만 원하는 방식으로 레이아웃 된 텍스트가있는 PDF 파일 (Word에서 생성됨)이 있습니다. 리버스 엔지니어링을하고 싶습니다.
PDF Inspector 는 좋은 것 같지만 Windows 용을 찾고 있습니다.
no main manifest attribute, in PDF Document Inspector.jar
답변:
Adobe Acrobat에는 PDF 파일을 검사 할 수있는 매우 멋지지만 숨겨진 모드가 있습니다. https://blog.idrsolutions.com/2009/04/viewing-pdf-objects/에 블로그 기사를 작성했습니다.
다른 답변에서 언급 된 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.py
과 pdf-parser.py
pdfid.py
그리고 pdf-parser.py
두 가지 디디에 스티븐스에 의해 PDF 도구 파이썬으로 작성된이.
그들의 배경은 또한 악성 PDF를 탐색하는 데 도움이 되지만, 무해한 PDF 파일의 구조와 내용을 분석하는 것도 유용합니다.
다음은 PDF 객체 번호의 압축되지 않은 스트림을 추출하는 방법의 예입니다. 5를 * .dump 파일로 변환 :
pdf-parser.py -o 5 -f -d obj5.dump my.pdf
PDF 내부의 일부 바이너리 부분은 PDF 내부에 기본 형식으로 포함되고 사용되기 때문에 압축 할 수없는 부분 (또는 사람이 읽을 수있는 ASCII 코드로 디코딩 할 수 있음)이 아닐 수도 있습니다. 이러한 PDF 부분은 JPEG 이미지, 글꼴 또는 ICC 색상 프로필입니다.
당신이 도구와 주어진 명령 줄 예제보다 비교하면, 당신은 그들이 할 수 있음을 발견 할 것입니다 NOT 모두 동일한 출력을 생성한다. 차이점 자체를 비교하는 노력은 PDF 구문 및 파일 형식의 특성을 더 잘 이해하는 데 도움이 될 수 있습니다.
내가 사용 iText를 RUPS 리눅스 (읽기 및 업데이트 PDF 구문). Java로 작성되었으므로 Windows에서도 작동합니다. PDF 파일의 모든 개체를 트리 구조로 찾아 볼 수 있습니다. 또한 Flate 인코딩 된 스트림을 즉석에서 디코딩하여보다 쉽게 검사 할 수 있습니다.
다음은 스크린 샷입니다.
java -jar itext-rups-5.5.6.jar
-> Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/itextpdf/text/Version
-이걸 어떻게 실행해야하나요? 편집 : 그것을 알아 냈습니다. SourceForge에서 제공하는 기본 파일을 다운로드해서는 안되며 종속성이 포함 된 .jar를 다운로드해야합니다.
O2 Solutions의 PDFXplorer는 내부를 표시하는 뛰어난 작업을 수행합니다.
http://www.o2sol.com/pdfxplorer/overview.htm
(하단에 무료, 산만 한 배너).
저는 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());
Acrobat의 개체 뷰어는 좋지만 Windjack Solution의 PDF Canopener를 사용하면 페이지에서 개체를 선택하기 위해 스포이드로 더 잘 검사 할 수 있습니다. 또한 PDF를 수정할 수 있습니다.
PDF Analyzer 는 PDFXplorer 와 유사 하지만 더 많은 옵션이 있습니다. 단일 등록 후 무료입니다.
Python 내에서 프로그래밍 방식으로 작업하려면 pdfminer 가 좋은 옵션입니다. 개체 계층 구조로 메모리의 PDF 구조를 사용하거나 XML로 직렬화 할 수 있습니다.
내 제안은 Foxit PDF Reader 로 pdf 파일에 대한 중요한 텍스트 편집 작업을 수행하는 데 매우 유용합니다.