2009-11-12 14 views
2

J'ai un programme qui génère manuellement un PDF en utilisant PDFsharp en C#. Bien que ce soit plutôt fastidieux, je dois l'utiliser et j'approche de la fin de la tâche. Un seul problème reste. Problème: Je me demande comment je peux déterminer la largeur d'un caractère donné pour une taille de police donnée dans Arial.Trouver la largeur de caractères en pixels pour différentes polices de caractères Arial

J'ai de la difficulté à trouver une méthode d'emballage de texte plus précise. En ce moment, on définit une largeur de case en pixels et ensuite on écrit une chaîne dans cette case. Je devine juste à la longueur maximum de la corde qui peut tenir dans la boîte et il y a quelques bizarreries visuelles qui surgissent de temps en temps.

Une aide?

Merci

Répondre

4

À l'époque des polices True Type avec crénage, il n'y a pas une seule largeur de caractère. La largeur de la chaîne "VA" est probablement inférieure à la somme des largeurs des chaînes "V" et "A". Résumer les largeurs si les caractères individuels sont un point de départ - mais finalement vous devez mesurer la chaîne complète. PDFsharp inclut la classe XTextFormatter (avec le code source complet) qui effectue ce retour à la ligne. Il peut être adapté pour des besoins spécifiques. Il utilise gfx.MeasureString(token, this.font).Width pour mesurer la largeur d'une chaîne.

6

Je ne suis pas sûr de votre question de savoir si vous voulez un moyen de mesurer la taille d'une chaîne spécifique en utilisant PDF #, ou tout simplement d'une manière générique.

En .Net général, vous pouvez utiliser la méthode MeasureText de la classe TextRenderer (à partir de formes Windows):

TextRenderer.MeasureText("some text", new Font("Arial", 1.0f, FontStyle.Regular)) 

Cela renverra une instance Size qui contiendra Width=12, Height=2.

1

XGraphics.MeasureString (chaîne s, Font f) fait l'affaire.

//l_Page is of type PdfPage 

    var l_Graphics = XGraphics.FromPdfPage(l_Page); 
    var l_TitleFont = new Font("Arial", 15f, GraphicsUnit.World) 
    var l_Title = "Hallo Welt"; 
    //l_TitleSize will be of type XSize and has properties for Width and Height 
    var l_TitleSize = l_Graphics.MeasureString(l_Title, l_TitleFont);