PDF 파일의 구조?
작은 프로젝트의 경우 pdf 파일을 구문 분석하고 특정 부분 (간단한 문자 체인)을 가져와야합니다. 나는 이것을하기 위해 파이썬을 사용하고 싶다. 그리고 나는 내가 원하는 것을 어떤 방식 으로든 할 수있는 여러 라이브러리를 발견했다.
하지만 몇 번의 연구 끝에 pdf 파일의 실제 구조가 무엇인지 궁금합니다. 온라인에 사양이나 설명이 있는지 아는 사람이 있습니까? 어도비에서 링크를 찾았지만 죽은 링크 인 것 같습니다.
다음은 Adobe의 참조 자료에 대한 링크입니다.
http://www.adobe.com/devnet/pdf/pdf_reference.html
PDF는 구조가 아니라 프레젠테이션에 관한 것입니다. 파싱은 쉽지 않을 것입니다.
GNU Introduction to PDF 가 구조를 이해하는 데 도움이된다는 것을 알았습니다 . 여기에는 자세히 설명 하는 쉽게 읽을 수있는 예제 PDF 파일 이 포함되어 있습니다 .
기타 유용한 링크 :
- PDF 간결하게 책 은 더 길고 유용한 그림이 있습니다.
- PDF 내부 소개 는 심층적이지는 않지만 빠른 개요를 제공하고 많은 그림이있는 프레젠테이션입니다.
처음 PDF 작업을 시작했을 때 PDF 참조 를 탐색하기가 매우 어려웠습니다. 파일 구조의 개요는 구문에서 찾을 수 있으며 Adobe에서 문서 구조라고 부르는 것은 파일 구조가 아니라 개체 구조라는 것을 아는 데 도움이 될 수 있습니다. 구문에서도 찾을 수 있습니다. 연산자에 대한 설명은 부록 A에 숨겨져 있으며 콘텐츠 스트림에서 일어나는 일을 이해하는 데 매우 유용합니다. 색 공간으로 작업하는 데 어려움이 있다면 그래픽에 숨겨진 것을 찾을 수 있습니다! 이 포인터가 내가 한 것보다 더 빨리 물건을 찾는 데 도움이되기를 바랍니다.
창을 사용하는 경우 pdftron CosEdit를 사용하면 개체 구조를 탐색하여 이해할 수 있습니다. 파일을 검사 할 수는 있지만 저장할 수는없는 무료 데모가 있습니다.
다음 은 PDF 1.7 의 원시 참조 이며, PDF 파일 의 구조를 설명 하는 기사 입니다. Vim을 사용하는 경우 pdftk 플러그인 은 훨씬 적은 원시 형식으로 문서를 탐색하는 좋은 방법이며 pdftk 유틸리티 자체 (및 GPL 소스)는 문서를 구분하는 좋은 방법입니다.
나는 거의 같은 일을하려고 노력하고 있습니다. PDF 참조는 읽기가 매우 어려운 문서입니다. 이 튜토리얼 은 더 나은 시작이라고 생각합니다.
이것은 약간의 빛을 비추는 데 도움이 될 수 있습니다 : (PDF32000.book의 11 페이지에서)
PDF 구문은 그림 1과 같이 네 부분으로 간주하면 가장 잘 이해됩니다.
• 사물. PDF 문서는 기본적인 데이터 개체의 작은 집합으로 구성된 데이터 구조입니다. 7.2 절, "어휘 규약"은 객체와 기타 구문 요소를 작성하는 데 사용되는 문자 집합을 설명합니다. 하위 절 7.3, "객체"는 객체의 구문과 필수 속성을 설명합니다. 하위 절 7.3.8, "스트림 객체"는 가장 복잡한 데이터 유형 인 스트림 객체에 대한 완전한 세부 사항을 제공합니다.
• 파일 구조. PDF 파일 구조는 객체가 PDF 파일에 저장되는 방법, 액세스 방법 및 업데이트 방법을 결정합니다. 이 구조는 객체의 의미와 무관합니다. 하위 조항 7.5, "파일 구조"는 파일 구조를 설명합니다. 하위 절 7.6, "암호화"는 문서의 내용을 무단 액세스로부터 보호하기위한 파일 수준 메커니즘을 설명합니다.
• 문서 구조. PDF 문서 구조는 페이지, 글꼴, 주석 등 PDF 문서의 구성 요소를 나타내는 데 사용되는 기본 개체 유형을 지정합니다. 하위 절 7.7, "문서 구조"는 전체 문서 구조를 설명합니다. 이후 절은 구성 요소의 자세한 의미를 다룹니다.
• 콘텐츠 스트림. PDF 컨텐츠 스트림에는 페이지 또는 기타 그래픽 엔티티의 모양을 설명하는 일련의 지침이 포함되어 있습니다. 이러한 명령은 개체로도 표시되지만 개념적으로 문서 구조를 나타내는 개체와 구분되며 별도로 설명됩니다. 하위 절 7.8, "콘텐츠 스트림 및 리소스"에서는 PDF 콘텐츠 스트림 및 관련 리소스에 대해 설명합니다.
PDF 파일을 탐색하는 데 약간의 노력이 필요한 것 같습니다.
Python을 사용하여 PDF를 구문 분석하려면 PDFMINER를 참조하십시오 . 이것은 날짜까지 PDF 파일을 구문 분석하는 가장 좋은 라이브러리입니다.
Didier에는 PDF를 구문 분석하는 도구가 있습니다.
http://didierstevens.com/files/software/pdf-parser_V0_4_3.zip
또는 여기 :
http://blog.didierstevens.com/programs/pdf-tools/ 여기에는 몇 가지 관련 pdf 분석 도구를 카탈로그 화했습니다.
또 다른 도구는 다음과 같습니다.
PDF는 레이아웃 지향 구조를 가지고 있기 때문에 PDF에서 텍스트를 추출하는 것은 어려운 문제입니다. CPAN에서 거의 성공하지 못한 시도 의 문서와 소스 코드 를 볼 수 있습니다 (내 구현은 Perl에 있음). PDF 데이터 구조는 매우 멋지고 잘 설계되었지만 읽는 것보다 쓰기가 쉽습니다.
단서를 얻는 한 가지 방법은 빈 페이지로 구성된 PDF 파일을 만드는 것입니다. 컴퓨터에 CutePDF Writer가 있고 한 페이지의 빈 워드 패드 문서를 만들었습니다. .pdf 파일로 인쇄 한 다음 메모장을 사용하여 .pdf 파일을 엽니 다.
그런 다음이 파일의 복사본을 사용하여 관심이있을 수있는 줄이나 텍스트 블록을 제거한 다음 Acrobat Reader에서 다시로드합니다. 작동하는 한 페이지 PDF 문서를 만드는 데 필요한 정보가 얼마나 적은지 놀랄 것입니다.
코드에서 PDF 양식을 만들기 위해 스프레드 시트를 만들려고합니다.
PDF 파일의 세부 사항 및 구조에 대해 읽기 시작하려면 PDF 참조 설명서가 필요합니다. 버전 1.7부터 시작하는 것이 좋습니다.
Windows에서는 무료 도구 PDF Analyzer 를 사용하여 PDF 파일의 내부 구조를 확인했습니다. 이것은 참조 매뉴얼을 읽을 때 이해하는 데 도움이 될 것입니다.
(저는 PDF Analyzer와 제휴하고 있으며 홍보 할 의사가 없습니다)
PDF에서 텍스트를 추출하려면 Linux, BSD 등 컴퓨터에서이 작업을 시도하거나 Windows의 경우 Cygwin을 사용하십시오.
pdfinfo -layout some_pdf_file.pdf
A plain text file named some_pdf_file.txt is created. The simpler the PDF file layout, the more straightforward the .txt file output will be.
Hexadecimal characters are frequently present in the .txt file output and will look strange in text editors. These hexadecimal characters usually represent curly single and double quotes, bullet points, hyphens, etc. in the PDF.
To see the context where the hexadecimal characters appear, run this grep command, and keep the original PDF handy to see what character the codes represent in the PDF:
grep -a --color=always "\\\\[0-9][0-9][0-9]" some_pdf_file.txt
This will provide a unique list of the different octal codes in the document:
grep -ao "\\\\[0-9][0-9][0-9]" some_pdf_file.txt|sort|uniq
To convert these hexadecimal characters to ASCII equivalents, a combination of grep, sed, and bc can be used, I'll post the procedure to do that soon.
참고 URL : https://stackoverflow.com/questions/88582/structure-of-a-pdf-file
'programing tip' 카테고리의 다른 글
| Ansible을 사용한 SSH 에이전트 전달 (0) | 2020.11.24 |
|---|---|
| 값 검색 (0) | 2020.11.24 |
| 파이썬을 말하는 방법 (0) | 2020.11.24 |
| 생성자가 비어 있거나 생성자가 없음 (0) | 2020.11.24 |
| 동일한 네임 스페이스를 가진 두 개의 다른 DLL (0) | 2020.11.24 |
