L'encodage des arguments de la chaîne de caractères du texte montrant des instructions telles que TJ et Tj dépend de la police PDF en question, cf. la spécification
L'opérande chaîne d'un opérateur d'affichage de texte doit être interprété comme une séquence de codes de caractères identifiant les glyphes à peindre.
Avec une police simple, chaque octet de la chaîne est traité comme un code de caractère distinct. Le code de caractère doit ensuite être recherché dans le codage de la police pour sélectionner le glyphe, comme décrit à la section 9.6.6, "Codage des caractères".
Avec une police composite (PDF 1.2) Les codes à octets multiples peuvent être utilisés pour sélectionner les glyphes. Dans ce cas, un ou plusieurs octets consécutifs de la chaîne sont traités comme un seul code de caractère. Les longueurs des codes et les correspondances entre les codes et les glyphes sont définies dans une structure de données appelée CMap décrite dans la section 9.7, "Polices composites".
(section 9.4.3 - Opérateurs d'affichage de texte - dans ISO 32000-1)
La police utilisée pour la première opération d'affichage du texte
(Test Test)Tj
est probablement un police simple avec un encodage ASCII'ish, probablement WinAnsiEncoding . La police elle-même est sélectionnée deux lignes plus haut dans
/T1_2 1 Tf
pour que vous n'ayez qu'à chercher la ressource de la police de caractères. T1_2 les ressources associées (les ressources de la page si vous nous montrez un extrait du flux de contenu d'une page) à vérifier.
La police utilisée dans le deuxième texte montrant l'opération
[(\000E\000V\000d\000e\000\003\000E\000V\000d\000e)]TJ
semble être une police composite avec un encodage à double octet, probablement Identité-H et le programme de police sous-jacent semble avoir les codes de glyphes que l'on trouve le plus souvent dans les polices TrueType. Vous devriez rechercher un ToUnicode dans cette police PDF pour un décodage facile.
L'instruction dans laquelle cette police est sélectionnée ne figure pas parmi les instructions que vous avez postées, mais doit se trouver quelque part au-dessus. Cette sélection a été sauvegardée en tant que partie de l'état graphique (dans certaines des premières versions de l'application q instructions) et restauré à nouveau (dans certains Q entre les deux instructions de présentation du texte que vous avez partagées).
s'il y a après une séquence d'échappement 3 chiffres, que c'est un code de caractère octal. Mais dans mon exemple, il y a parfois 4 et parfois 3 chiffres.
Non, dans votre exemple, il y a toujours des séquences d'échappement avec trois chiffres octaux. Le caractère qui suit est un octet distinct, c'est-à-dire que vous avez les octets ' \000 ', 'E', ' \000 ', 'V', ' \000 ', 'd', ' \000 ', 'e', ' \000 ', ' \003 ', ' \000 ', 'E', ' \000 ', 'V', ' \000 ', 'd', ' \000 ', et 'e'.
Comme mentionné ci-dessus, cela ressemble à un encodage à double octet avec notamment les mappings
\000E -> 'T'
\000V -> 'e'
\000d -> 's'
\000e -> 't'
\000\003 -> ' ' (space)
Il semble qu'il s'agisse d'un codage de glyphes que l'on trouve souvent dans les polices TrueType et qui, pour les lettres latines, signifie simplement un décalage constant de leurs codes Unicode.
Mais il existe également de nombreux codages multi-octets différents en usage courant, parfois même des codages ad-hoc créés uniquement pour la police de la page en question.
Par conséquent, si vous voulez sérieusement faire de l'extraction de texte à partir de PDF, vous devez vraiment étudier la spécification PDF et la mettre en œuvre conformément à ses exigences au lieu d'espérer qu'un certain hack de conversion .
Adobe a publié une copie de l'ancienne spécification PDF ISO 32000-1 sur sa page web à l'adresse suivante https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf