문서 · PDF 툴킷
PDF 파일 내부: 헤더, 개체, 외부 참조 테이블 및 예고편 설명
· 배경
pdf 파일 구조 pdf-lib
텍스트 편집기에서 PDF을 열면 헤더, 번호가 매겨진 개체, 상호 참조 테이블 및 예고편이 표시됩니다. 이 게시물에서는 각 부분의 기능, 증분 업데이트 및 암호화가 어떻게 적용되는지, 이 구조가 로컬 재작성을 가능하게 만드는 이유를 설명합니다.
바이너리로 보이는 PDF 바이트는 라이브러리에 의해 구문 분석됩니다. 고정 헤더 예제가 어설션되지 않았습니다.
임의의 PDF을 텍스트로 열면 압축 또는 바이너리 데이터와 혼합된 읽을 수 있는 조각이 표시될 수 있지만 툴킷은 텍스트 편집기를 통해 파일을 검사하지 않습니다. 선택한 바이트를 pdf-lib 또는 pdf.js에 전달하고 잘못된 형식의 암호화된 문서 오류를 포착하며 해당 라이브러리가 노출하는 구문 분석된 문서 인터페이스와 작동합니다.
개요는 `%PDF-1.7` 예를 수정하지만 허용된 파일은 다른 유효한 형식을 전달할 수 있으며 소스는 하나의 버전 헤더를 약속하지 않습니다. 유용한 사실은 동작입니다. 서명 확인 및 파서가 PDF을 식별한 다음 전체 바이트 시퀀스를 연결 가능한 텍스트로 처리하는 대신 페이지에 대해 추론합니다.
객체 및 참조 — 사전, 스트림, 배열 및 이를 그래프에 연결하는 간접 참조
구현은 API를 통해 연결된 구조를 보여줍니다. 문서는 페이지를 노출합니다. 페이지에는 크기와 회전이 표시됩니다. 페이지를 복사하면 표시되는 콘텐츠에 필요한 리소스가 전달됩니다. 이미지 어셈블리는 페이지를 생성하고 이미지 개체를 한 번 포함하는 반면, 워터마킹은 계산된 위치에 재사용 가능한 리소스를 그립니다.
애플리케이션 코드의 모든 사전, 스트림, 배열 또는 간접 참조를 수동으로 탐색하지 않습니다. pdf-lib는 낮은 수준의 해석을 소유합니다. 형식을 개체 그래프로 설명하는 것은 페이지 복사 동작과 일치하지만 이 기사에서는 툴킷이 일반 개체 검사기를 구현하거나 원시 참조를 사용자에게 노출하는 척하지 않습니다.
상호 참조 구현 세부 사항은 pdf-lib 및 pdf.js에 위임됩니다.
상호 참조 테이블, 스트림 및 예고편은 이 프로젝트의 라이브러리 관련 사항입니다. 애플리케이션 소스는 `PDFDocument.load`을 호출하고, 문서를 생성하고, 페이지를 복사하고, 바이트를 저장합니다. 모든 입력이 클래식 테이블이나 다른 표현을 사용하는지 여부를 문서화하지 않으며 독자가 의존할 바이트 오프셋 알고리즘을 게시하지도 않습니다.
그 추상화는 가치가 있습니다. 이 작업은 애플리케이션 코드에서 개체 번호를 수동으로 다시 매길 필요 없이 유효한 입력을 병합할 수 있습니다. 출력은 라이브러리가 생성하는 올바른 직렬화입니다. 정확한 오프셋이나 트레일러 체인에 대한 포렌식 질문의 경우 상위 수준 페이지 도구에서 세부 정보를 추론하는 대신 전용 파서와 관련 사양을 사용하세요.
페이지 트리 및 콘텐츠 스트림 - 문서 카탈로그부터 단일 페이지의 그리기 지침까지
페이지 수준 작업은 전체 문법을 노출하지 않고 카탈로그-페이지 개념을 드러냅니다. 병합은 모든 소스 페이지 색인을 획득하고 해당 페이지를 새 문서에 복사합니다. 선택한 그룹을 분할합니다. 재정렬은 명시적인 순서 배열을 제공합니다. 회전은 페이지를 검색하고 정규화된 각도를 업데이트합니다. 워터마크는 선택한 페이지 표면에 그려집니다.
표시되는 콘텐츠 스트림은 구조적 작업 중에 래스터화되지 않으므로 선택 가능한 텍스트 및 벡터 품질이 유지됩니다. PDF-to-image는 의도적으로 다릅니다. pdf.js는 페이지를 캔버스 픽셀로 렌더링하고 그 후에는 텍스트가 더 이상 텍스트가 아닙니다. 어떤 경로가 실행되었는지 이해하는 것이 PDF 내부의 일반화된 다이어그램을 기억하는 것보다 중요합니다.
이 툴킷은 증분 업데이트를 약속하는 대신 새로운 출력을 저장합니다.
개요에서는 증분 업데이트에 대해 설명하지만 ToolAcre가 지원하는 편집 기능은 새로운 출력 파일을 저장합니다. 소스는 이전 바이트 개정을 유지하면서 업데이트를 추가하는 모드를 제공하지 않으며 증분 기록 처리를 통해 이전에 저장된 콘텐츠를 안전하게 제거한다고 주장하지도 않습니다.
이는 개인 정보 보호 및 서명에 중요합니다. 새로운 페이지 사본 출력은 여러 문서 수준 구조를 삭제하고 디지털 서명을 무효화하지만, 전용 증거 없이 법의학 정리 도구로 광고해서는 안 됩니다. 소스 및 출력 역할을 명확하게 유지하고 이전 수정본이나 삭제된 콘텐츠를 평가해야 하는 경우 전문 도구를 사용하십시오.
암호화된 파일 — 비밀번호 및 권한 플래그가 도구로 열 수 있는 항목을 변경하는 방법과 페이지 작업과 별개의 문제인 이유
암호화되거나 비밀번호로 보호된 입력은 일반 페이지 편집과 별도의 경계입니다. 컨트롤러가 보호된 문서 오류를 보고하고 중지됩니다. 툴킷은 비밀번호를 요청하거나 권한을 우회하거나 액세스 제어를 제거하지 않습니다. 사용자는 이러한 작업을 사용하기 전에 승인된 보호되지 않은 복사본을 다른 곳에서 생성해야 합니다.
거부는 또한 오해의 소지가 있는 부분 결과를 방지합니다. 사용자가 완전한 계약을 기대할 때 공백 또는 잘못된 형식의 출력은 위험할 수 있습니다. 구현에서는 암호화를 명시적으로 포착하지만 구성에서는 제한 사항을 반복합니다. PDF 암호화 또는 권한 의미에 대한 일반적인 튜토리얼을 제공하지 않고도 제품 동작을 설명하기에 충분합니다.
압축, 글꼴 및 색상은 이 구현 수준 설명 외부에 남아 있습니다.
압축 필터, 글꼴 인코딩 및 색상 공간은 PDF 충실도에 여전히 중요하지만 애플리케이션 코드는 이를 라이브러리 및 소스 문서에 위임합니다. 이 설명자는 필터 알고리즘이나 표준 글꼴 기록을 열거하지 않습니다. 대신 테스트와 구성을 통해 검증된 가시적인 결과를 기록합니다.
페이지 복사에서는 페이지 모양과 선택 가능한 텍스트가 유지되지만 래스터 출력에서는 텍스트 레이어가 손실됩니다. 텍스트 워터마킹은 내장된 라틴어 인코딩으로 제한됩니다. 이미지 준비는 지원되지 않는 브라우저 이미지 형식을 PNG로 다시 인코딩할 수 있습니다. 이러한 구체적인 경계는 툴킷이 공개하지도 검증하지도 않은 하위 시스템을 광범위하게 둘러보는 것보다 더 실행 가능합니다.
요약 — 페이지 수준 작업은 이 구조에 대한 편집이며 PDF 툴킷은 브라우저에서 이를 구문 분석하고 다시 작성하여 수행합니다.
ToolAcre는 라이브러리 API를 통해 구문 분석된 문서 구조를 편집하고 새로운 파일을 직렬화합니다. 따라서 병합, 분할, 재정렬, 회전 및 워터마크는 바이트 연결이 아닌 작업별 보존 규칙을 사용하는 구조적 작업입니다. PDF-to-image는 렌더링 작업이며 충실도 결과가 다릅니다.
작업은 대부분 전용 작업자에서 로컬로 이루어지며 Blob 다운로드가 사용자에게 반환됩니다. 이 모델을 사용하여 동작을 예측하십시오. 복사된 페이지는 모양을 유지하고, 새 문서는 지원되지 않는 문서 수준 기능 및 서명을 잃고, 암호화된 소스는 중지되고, 래스터화된 페이지는 그림이 됩니다. 더 깊은 형식의 주장에는 사양이나 전용 검사 도구가 필요합니다. 예상치 못한 결과를 디버깅하는 경우 먼저 작업을 복사, 메타데이터 조정, 그리기 또는 래스터화로 분류하세요. 이는 손실 가능성이 있는 메커니즘을 즉시 좁힙니다. 그런 다음 여전히 문제가 나타나는 중요하지 않은 가장 작은 파일로 재현하고 필요한 경우 바이트 수준 조사를 위해 입력과 출력을 모두 유지합니다.