Analyse d'objets simples basée sur des plages
L'unité HPDFParser analyse des dictionnaires et tableaux PDF autonomes sans copier les sous-chaînes de jetons ou de conteneurs imbriqués
Points d'entrée
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;
Le dictionnaire ou tableau retourné appartient à l'appelant et contient des objets HotPDF persistants ordinaires sans dépendance à la durée de vie de la chaîne source
Statistiques de vue
THPDFParserViewStatistics expose SourceBytes, TokenViewCount, MaterializedStringCount, MaterializedBytes, ObjectCount, ContainerCount, MaxDepth, ErrorCount et Valid
Les vues de jetons comptent les plages source bornées, tandis que les compteurs de chaînes matérialisées couvrent les octets copiés dans les noms, clés et chaînes PDF durables
Objets pris en charge
L'analyseur reconnaît les noms, entiers, nombres réels, booléens, nulls, références indirectes, chaînes littérales, chaînes hexadécimales, tableaux et dictionnaires
Les chaînes littérales préservent les parenthèses imbriquées, les délimiteurs échappés, les échappements octaux et les continuations de ligne échappées, tandis que les espaces et commentaires PDF sont ignorés
Les fins de ligne CR, CRLF et LF non échappées à l'intérieur des chaînes littérales se décodent en un LF par fin de ligne ; les returs chariot échappés comme \r ou \015 restent des octets CR, et les continuations de ligne par antislash n'ajoutent aucun octet
Les conteneurs imbriqués partagent un curseur sur l'entrée immuable, la récursion est bornée et les clés de dictionnaire dupliquées remplacent les valeurs antérieures avec une correspondance sensible à la casse
Les délimiteurs malformés font avancer le curseur de récupération sans sauter les jetons valides adjacents ; les corps de tableaux fournis sans crochet ouvrant se récupèrent aussi des crochets fermants parasites et les signalent dans ErrorCount
Caractéristiques de performance
Les noms et chaînes se matérialisent une fois à leur frontière d'objet persistant, la conversion numérique lit directement les octets sources, et un index à adressage ouvert local à l'opération empêche les analyses en double quadratiques lors de la construction de grands dictionnaires
Une fixture de régression Win32 de 30 000 paires a réduit les octets d'allocation en cinq passes de 50 866 510 à 17 936 800 et le temps écoulé de 3 656 ms à 46 ms
Voir aussi : Scalable and Random-Access PDF Loading, Bounded PDF Parser Budgets