2010-10-20 9 views
3

Je (pense) avoir toutes les valeurs pour le rendu de texte dans un PDF.PDF calculer les tailles de glyphes

* Position (Text Matrix) 
* FontDescriptor with Widths Array 
* FontBBox 
* StemV/StemH 
* FontName 
* Descent 
* Ascent 
* CapHeight 
* XHeight 
* ItalicAngle 

Mon problème est que je ne sais pas quoi faire avec ces valeurs. Je suis allé à travers le PDF Spec 1.7 quelques fois et ne peut pas trouver un formulaire pour calculer les tailles de pixels réels de chaque glyphe en PDF. Pouvez-vous me donner un indice?

Merci.

+1

Qu'essayez-vous de faire et comment est votre question liée à iphone, graphiques à quartz et algèbre linéaire? – Bobrovsky

Répondre

0

Ces valeurs sont conçues pour composer correctement le type, pas pour dessiner des glyphes, de sorte que vous ne pouvez pas obtenir la taille de pixel exacte de chaque glyphe à partir de ces attributs. La seule façon d'obtenir les dimensions exactes d'un glyphe est de dessiner le glyphe dans une image et d'analyser cette image. Le FontBBox (encadré de police) est la plus petite boîte qui contiendra chaque glyphe. Le tableau Largeurs contient des informations sur la distance à laquelle chaque caractère doit être tracé, et non sur la taille réelle de l'image glyphe. Certaines polices vont dessiner des glyphes qui dépassent cette largeur.

Lorsque vous sélectionnez du texte dans un éditeur de texte standard, la surbrillance correspond à la hauteur totale de la police et à la largeur de chaque caractère. Cette mise en surbrillance est faite en obtenant la hauteur FontBBox, et la largeur de chaque caractère à partir du tableau Widths, et en transformant ces valeurs pour correspondre aux attributs de la police en cours (taille, etc.). Cette information est suffisante pour que votre application tienne le même type que les applications classiques.

+0

Comment puis-je transformer les valeurs FontBBox en valeurs Device Space (valeurs de pixels réelles)? – andidol

+0

Les valeurs FontBBox et Widths sont dans l'espace glyphe spécifié par FontMatrix. Construire une matrice de transformation par concaténation de la matrice de polices et de l'espace de texte, pour mapper les valeurs de FontBBox à l'espace du périphérique. –

+0

avez-vous un excular formular pour calculer FontBBox-Height + Width-Array à l'espace de l'appareil, que je peux obtenir la taille des caractères? – andidol

3

Qu'est-ce que vous essayez de faire? Rendu PDF est beaucoup de travail et vous avez également besoin de prendre en compte en premier lieu, l'augmentation du texte, le crénage, CTM et plusieurs autres facteurs.

+0

J'essaie de mettre en évidence un texte. J'ai analysé le PDF avec succès avec les méthodes Quartz 2D. Je pense avoir toutes les informations, maintenant je dois faire des maths pour trouver les "CGRects" de certains textes/mots. – andidol

2
Position:  (optional, you can avoid it) 
Text Matrix: (optional, you can avoid it) 
Widths Array: (use empty array [], PDF can read it directly from CFF (FontFile3 stream)) 
FontBBox:  font file->'CFF ' table->Top DICT INDEX->DICT-> 4 operands for 'FontBBox'  operator 
StemV:  (optional, you can avoid it) 
StemH:  (optional, you can avoid it) 
FontName:  font file->'name' table->records 
     or: font file->'CFF ' table->Top DICT INDEX->string by index 0 for 'fonts names' operator 

Descent:  font file->'hhea' table->'Descender' parameter 
Ascent:  font file->'hhea' table->'Ascender' parameter 
CapHeight: font file->'OS/2' table->'sCapHeight' parameter 
XHeight:  font file->'OS/2' table->'sxHeight' parameter 
ItalicAngle: font file->'OS/2' table->'sxHeight' parameter 

En fait, vous pouvez calculer le tableau Largeurs. Pour chaque glyphe:

Decoding array(PDF) -> Glyph name (PDF) -> Glyph index (CFF table of font file) -> table 'hmtx' -> Glyph 'hMetrics'[Glyph index] = array ('advanceWidth', 'leftSideBearing') 

passé une semaine, pour le comprendre ...

+0

avez-vous une chance de mettre en œuvre sélectionner et surligner le texte pour iOS? ou c'est juste une explication basique? –

+0

Il existe beaucoup d'informations sur la sélection et la mise en évidence http://stackexchange.com/search?q=select+pdf+text+ios –

1

Si vous voulez juste marquer un texte, il est nécessaire ne calculera pas le texte. Vous pouvez ajouter autant d'objets contenus que vous le souhaitez sur la page (rectangle, image, ligne, élément semi-transparent) et recalculer la structure PDF. C'est vraiment simple. Demandez votre souris sur les coordonnées de sélection))

Questions connexes