범위 기반 단순 객체 파싱

HPDFParser 유닛은 토큰이나 중첩 컨테이너 하위 문자열을 복사하지 않고 독립형 PDF 사전과 배열을 파싱합니다

진입점

function HPDFParserParseSimpleDictionary(
  const Data: AnsiString;
  RecursionLevel: Integer = 0): THPDFDictionaryObject;

function HPDFParserParseSimpleDictionaryWithStatistics(
  const Data: AnsiString;
  out Statistics: THPDFParserViewStatistics;
  RecursionLevel: Integer = 0): THPDFDictionaryObject;

function HPDFParserParseSimpleArray(
  const Data: AnsiString): THPDFArrayObject;

function HPDFParserParseSimpleArrayWithStatistics(
  const Data: AnsiString;
  out Statistics: THPDFParserViewStatistics): THPDFArrayObject;

반환된 사전 또는 배열은 호출자가 소유하며, 소스 문자열 수명에 의존하지 않는 일반적인 영구 HotPDF 객체를 포함합니다

뷰 통계

THPDFParserViewStatistics는 SourceBytes, TokenViewCount, MaterializedStringCount, MaterializedBytes, ObjectCount, ContainerCount, MaxDepth, ErrorCount 및 Valid를 노출합니다

토큰 뷰는 바운딩된 소스 범위를 세고, 구체화된 문자열 카운터는 영구 PDF 이름, 키 및 문자열로 복사된 바이트를 다룹니다

지원되는 객체

파서는 이름, 정수, 실수, 부울, null, 간접 참조, 리터럴 문자열, 16진 문자열, 배열 및 사전을 인식합니다

리터럴 문자열은 중첩 괄호, 이스케이프된 구분자, 8진 이스케이프 및 이스케이프된 줄 연속을 유지하며, PDF 공백과 주석은 무시됩니다

리터럴 문자열 안의 이스케이프되지 않은 CR, CRLF, LF 줄바꿈은 줄바꿈 하나당 LF 하나로 디코딩됩니다. \r나 \015처럼 이스케이프된 캐리지 리턴은 CR 바이트로 남고, 백슬래시 줄 연속은 바이트를 더하지 않습니다

중첩 컨테이너는 변경 불가능한 입력 위에서 하나의 커서를 공유하고, 재귀는 바운딩되며, 중복 사전 키는 대소문자 구분 일치로 이전 값을 대체합니다

malformed 구분자는 인접한 유효 token을 건너뛰지 않고 복구 커서만 전진시킵니다. 여는 괄호 없이 공급된 배열 본문도 stray 닫는 괄호에서 복구하고 그를 ErrorCount에 보고합니다

성능 특성

이름과 문자열은 영구 객체 경계에서 한 번 구체화되고, 숫자 변환은 소스 바이트를 직접 읽으며, 작업 로컬 개방 주소 인덱스는 큰 사전 구성 동안 이차 중복 스캔을 방지합니다

30,000쌍 Win32 회귀 픽스처는 5회 패스 할당 바이트를 50,866,510에서 17,936,800으로 줄이고, 경과 시간을 3,656ms에서 46ms로 줄였습니다

추가 정보: 확장 가능 및 랜덤 액세스 PDF 로딩, 바운딩된 PDF 파서 예산