문서 · PDF 툴킷
브라우저에서 PDF를 병합하면 내부적으로 일어나는 일
· 작동 원리
PDF 파일 형식 브라우저 처리
PDF 병합은 스테이플링처럼 보이지만 실제로는 이 도구가 한 개체 그래프의 페이지 개체, 글꼴 및 이미지를 다른 개체 그래프로 복사하고 새로운 상호 참조 테이블을 작성하는 것입니다. 이 게시물은 브라우저 탭 내에서 발생하는 프로세스를 안내합니다.
그렇지 않은 주요 내용 - 두 개의 PDF를 단순히 바이트로 연결할 수 없는 이유와 병합 도구가 다시 작성해야 하는 사항
두 개의 PDF에는 각각 고유한 헤더, 개체 번호, 페이지 트리 및 상호 참조 정보가 있습니다. 첫 번째 파일 뒤에 두 번째 파일의 바이트를 추가하면 해당 페이지가 첫 번째 문서의 페이지 트리에 추가되지 않습니다. 병합자는 자체 개체를 가리키는 참조가 포함된 새 PDF를 작성해야 합니다.
각 파일을 메모리로 읽기 — 브라우저가 업로드 없이 파일 API를 통해 PDF를 바이트 배열로 로드하는 방법
파일 선택기는 서버 URL이 아닌 브라우저에 파일 개체를 제공합니다. PDF 인터페이스는 file.arrayBuffer()을 사용하여 선택한 각 파일을 읽고 Uint8Array 바이트를 처리 작업에 전달합니다. 병합은 파일을 업로드하지 않습니다. 이는 웹사이트 방문 시 네트워크 요청이 절대 이루어지지 않는다는 주장과 다릅니다. 즉, 사이트를 로드하려면 연결이 필요합니다.
객체 그래프 구문 분석 — 헤더, 번호가 매겨진 객체, 페이지 트리 및 파서가 재구성해야 하는 교차 참조 테이블
PDF 라이브러리는 각 소스 문서를 로드하고 해당 페이지 색인을 확인합니다. 페이지는 글꼴, 이미지, 그래픽 상태를 포함하여 파일의 다른 위치에 있는 개체를 참조합니다. 상호 참조 섹션이나 스트림은 독자가 간접 개체를 찾는 데 도움이 됩니다. 그것은 함께 붙일 페이지 목록이 아닙니다. 손상되거나 암호화된 입력은 구문 분석을 방해할 수 있습니다.
페이지 및 해당 리소스 복사 - 페이지가 참조하는 모든 글꼴, 이미지 및 그래픽 상태가 함께 이동해야 하는 이유
구현에서는 각 입력에 대해 PDFDocument.create()을 호출한 다음 out.copyPages(source, source.getPageIndices())을 순서대로 호출하고 복사된 각 페이지를 출력에 추가합니다. 라이브러리는 각 페이지에 필요한 참조 구조를 전송합니다. 비트맵 스크린샷을 만들지 않습니다. 모든 문서 수준 기능이 페이지와 함께 이동한다고 가정하지 마십시오.
병합된 파일 작성 - 개체 번호 다시 매기기, 새 페이지 트리 및 상호 참조 테이블 구축, 다운로드 제공
페이지를 추가한 후 라이브러리는 새 PDF 바이트 배열을 저장합니다. 작성자는 원본 파일을 연결하는 대신 개체 참조 및 직렬화를 처리합니다. 응용 프로그램은 결과를 다운로드로 제공합니다. 이것은 새 문서이기 때문에 바이트 크기가 입력의 합계와 같을 필요는 없습니다.
실제 사례 — 3페이지 분량의 자기 소개서와 12페이지 분량의 스캔 계약서를 병합하고 결과의 페이지 순서와 크기에 따라 알 수 있는 내용
사무실 관리자가 먼저 3페이지짜리 자기소개서를 선택하고 두 번째로 12페이지짜리 계약서를 선택한다고 가정해 보겠습니다. 결과는 15페이지(표지 1~3페이지, 계약 페이지 4~15)로 구성됩니다. 파일을 보내기 전에 첫 번째와 마지막 페이지와 전체 페이지를 확인하세요. 스캔한 계약서는 해당 페이지에 이미지 리소스가 포함되어 있으므로 출력 크기가 커질 수 있습니다.
여기서 다루지 않는 것 - 북마크, 양식 필드 및 문서 메타데이터(이들의 처리는 도구 자체 규칙에 따라 달라지며 해당 페이지에 문서화됨)
페이지 복사는 북마크, 양식 필드, 메타데이터 또는 서명의 보존을 보장하지 않습니다. 특히, 구조적 재작성 후에도 암호화 서명이 계속 유효하다고 가정하지 마십시오. 원본을 보관하고 법적 서명 요구 사항을 별도로 확인하십시오. 새 파일은 서명된 원본이 아닙니다.
요점 — 병합은 연결이 아닌 구조적 재작성이며, PDF 툴킷은 파일이 장치를 떠나지 않는 상태로 탭에서 재작성을 수행합니다.
PDF 병합은 구조적 재작성입니다. PDF 도구 키트는 탭에서 선택한 바이트를 읽고 선택한 파일 순서대로 페이지를 복사한 후 새 파일을 씁니다. 세션 중에 로컬 처리 경계를 확인하려면 병합하는 동안 브라우저 네트워크 패널을 검사하세요. 문서 업로드와 웹사이트 자산 로드를 구별합니다.