Extraire les glyphes d'une police true type embarquée dans un PDF

Bonjour à  tous,



question pointue et technique.

je suis en train de faire du parsing PDF bas niveau. J'utilise le CGPDFParser d'apple, et implémente les callbacks des opérateurs qui m'intéressent.

Jusque là , j'ai toujours réussi à  faire ce que je voulais, mais je bloque sur une police embarquée.

Les ressources d'un document PDF contiennent les informations de polices qui m'ont toujours permis de créer la fonte correspondante avec CTFontDescriptorRef, CTFontef ou CGFontRef.

Mais là , j'ai un document PDF avec une police embarquée pour laquelle la font construite ne semble pas être la bonne.

Le document PDF est celui-là  : http://mtcn.free.fr/partitions/coupo-santo.pdf

Les clef de sol et les notes sont dessinées avec la police R18 du document, qui est décrite ainsi dans le PDF :



<key>R18</key>

<dict>

<key>BaseFont</key>

<string>QBVQKQ+TTE1B9DE38t00</string>

<key>FirstChar</key>

<integer>1</integer>

<key>FontDescriptor</key>

<dict>

<key>Ascent</key>

<integer>1060</integer>

<key>CapHeight</key>

<integer>1060</integer>

<key>Descent</key>

<integer>-320</integer>

<key>Flags</key>

<integer>4</integer>

<key>FontBBox</key>

<array>

<integer>-1</integer>

<integer>-320</integer>

<integer>625</integer>

<integer>1060</integer>

</array>

<key>FontFile2</key>

<dict>

<key>stream</key>

<dict>

<key>streamData</key>

<data>...</data>

<key>streamDictionary</key>

<dict>

<key>Filter</key>

<string>FlateDecode</string>

<key>Length</key>

<integer>2774</integer>

<key>Length1</key>

<integer>4064</integer>

</dict>

</dict>

</dict>

<key>FontName</key>

<string>QBVQKQ+TTE1B9DE38t00</string>

<key>ItalicAngle</key>

<integer>0</integer>

<key>MissingWidth</key>

<integer>750</integer>

<key>StemV</key>

<integer>93</integer>

<key>Type</key>

<string>FontDescriptor</string>

</dict>

<key>LastChar</key>

<integer>11</integer>

<key>Name</key>

<string>R18</string>

<key>Subtype</key>

<string>TrueType</string>

<key>Type</key>

<string>Font</string>

<key>Widths</key>

<array>...</array>

</array>

</dict>



Le nom de a police est donc censé être QBVQKQ+TTE1B9DE38t00, ce qui se traduit d'après la doc PDF d'Adobe (http://partners.adobe.com/public/developer/en/pdf/PDFReference13.pdf) comme la police TTE1B9DE38t00, pour laquelle on a créé un sous-ensemble QBVQKQ.

Et quand j'essaye de construire cette police, soit avec un CTFontDescriptor, un CTFontRef, un CGDataProvider+CGFontRef, j'obtiens toujours du LucidaGrande.



Quel problème me direz-vous ? Et bien c'est que les caractères correspondant à  "clef de sol" et "note" sont encodés dans le document avec les caractères 9 et 32, qui sont habituellement des espaces. Et quand je demande les glyphes pour ces caractères, j'obtiens les espaces, ou rien du tout, mais pas les caractères musicaux.



Notez que pour les autres polices et texte, je n'ai aucun souci.



J'envisage plusieurs scénarios :

-j'oublie une info importante (ailleurs dans les ressources?) qui fait que je construit mal la fonte, et obtient du LucidaGrande par défaut

-Apple ne me donne pas accès aux bonnes APIs pour décoder la police truetype embarquée, et il faut que je me tourne vers la library FreeFont (ou un truc du genre)

-autre erreur...



Quoi qu'il en soit, je me trouve bien embarrassé et je cherche des pistes pour avancer.

Si vous avez des idées...



+

Chacha



Je joins au message des fichiers plist que j'ai créé à  partir des ressources du PDF, ça vous permettra d'explorer facilement.
Mots clés:

Réponses

  • ça alors ! J'aurais jamais cru retrouver la Coupo Santo sur Cocoa Café !!

    Mais cela dit malheureusement je ne peux pas t'aider ...
  • Bah on dirait que personne n'a d'idées :-(
  • CéroceCéroce Membre, Modérateur
    Tu admettras que c'est un sujet un peu élitiste.
  • Elitiste non mais diablement difficile à  catégoriser. Je ne sais pas moi même si le problème est plutôt dans l'api de parsing pdf, dans le gestion des polices, dans la gestion du true type... J'ai essayé sans succès mes mailing lists apple sur quartz et coretext...

Connectez-vous ou Inscrivez-vous pour répondre.