Розбір простих об'єктів на основі зрізів
Модуль 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, непрямі посилання, літеральні рядки, шістнадцяткові рядки, масиви та словники
Літеральні рядки зберігають вкладені дужки, екрановані розділювачі, вісімкові екранування та екрановані продовження рядків, тоді як пробіли та коментарі PDF ігноруються
Неекрановані закінчення рядків CR, CRLF і LF всередині літеральних рядків декодуються в один LF на закінчення рядка; екрановані повернення каретки на кшталт \r чи \015 залишаються байтами CR, а продовження рядків зі зворотною похилою рискою не додають жодного байта
Вкладені контейнери поділяють один курсор над незмінним входом, рекурсія обмежена, а дублікати ключів словника замінюють попередні значення шляхом порівняння з урахуванням регістру
Пошкоджені розділювачі просувають курсор відновлення, не пропускаючи сусідні валідні токени; тіла масивів, подані без відкривної дужки, також відновлюються від сторонніх закривних дужок і повідомляють їх у ErrorCount
Характеристики продуктивності
Назви та рядки матеріалізуються один раз на межі свого постійного об'єкта, чисельне перетворення читає байти джерела безпосередньо, а локальний для операції відкрито-адресований індекс запобігає квадратичному скануванню дублікатів під час побудови великих словників
Фікстура регресії Win32 із 30 000 пар скоротила байти п'ятипрохідного виділення з 50 866 510 до 17 936 800, а час виконання з 3 656 мс до 46 мс
Див. також: Масштабоване завантаження PDF із довільним доступом, Обмежені бюджети парсера PDF