PdfSharp: hauteur de Texte/problème de positionnement
Si je utiliser XTextFormatter ou pas, je reçois le même message d'erreur à propos de la LayoutRectangle avoir une hauteur de 0 ou quelque chose comme ça.
new PdfSharp.Drawing.Layout.XTextFormatter(_gfx).DrawString(text
, new PdfSharp.Drawing.XFont(fontName, fontSize, (PdfSharp.Drawing.XFontStyle)fontStyle)
, new PdfSharp.Drawing.XSolidBrush(PdfSharp.Drawing.XColor.FromArgb(foreColour))
, new PdfSharp.Drawing.XRect(new PdfSharp.Drawing.XPoint(xPos, yPos), new PdfSharp.Drawing.XPoint(xLimit, yLimit))
, PdfSharp.Drawing.XStringFormats.Default);
fontStyle est de type System.De dessin.FontStyle
foreColour est de type System.De dessin.Couleur
J'ai déjà prédéfinis _gfx à partir d'un PdfPage avec Orientation = Paysage, Taille = Lettre
xPos et yPos sont des paramètres de type double, la même chose avec xLimit et yLimit.
J'obtiens l'erreur d'exécution que l'
LayoutRectangle doivent avoir une hauteur d'
zéro (0)...
Par définition un rectangle est destiné à avoir une hauteur, sinon appeler une ligne! Je ne comprends pas!...
J'ai essayé avec le XGraphics.Cordon de serrage() méthode directement, et j'obtiens la même erreur. Il semble que je ne peux pas utiliser le LayoutRectangle mais ont à gérer que le texte de l'ajustement à l'intérieur de la zone souhaitée manuellement.
var textFont = new PdfSharp.Drawing.XFont(fontName, fontSize, (PdfSharp.Drawing.XFontStyle)fontStyle);
while (xPos + _gfx.MeasureString(text, textFont).Width > xLimit)
textFont = new PdfSharp.Drawing.XFont(fontName, --fontSize, (PdfSharp.Drawing.XFontStyle)fontStyle);
while (yPos + _gfx.MeasureString(text, textFont).Height > yLimit && fontSize > 0)
textFont = new PdfSharp.Drawing.XFont(fontName, --fontSize, (PdfSharp.Drawing.XFontStyle)fontStyle);
_gfx.DrawString(text
, textFont
, new PdfSharp.Drawing.XSolidBrush(PdfSharp.Drawing.XColor.FromArgb(foreColour))
, new PdfSharp.Drawing.XPoint(xPos, yPos));
Si le yPos valeur de la variable est exactement la même valeur!
*yPos = Page.Hauteur * .4093, soit 40,93% de la page de la hauteur.*
Ci-joint un exemple de ce que j'essaie de faire:
"Bonjour Le Monde!" "Bonjour
Monde!"
Et voici ce que j'obtiens:
"Hello World!"
"Hello World!"
Et à cause de la différence de l'impression de la limite de la zone et la taille de la police et le style de police différent, je ne peux pas écrire dans une phrase simple, y compris le nombre exact de places.
OriginalL'auteur Will Marcouiller | 2009-08-27
Vous devez vous connecter pour publier un commentaire.
Citant des messages d'erreur exactement qui aide les autres à vous aider.
Le message d'erreur:
Le texte sera aligné sur une ligne, donc la hauteur doit être de 0. Oui, c'est une ligne.
L'utilisation d'un alignement différent si vous spécifiez un rectangle.
La
TextLayout
exemple montre comment mettre en forme le texte.Le Graphique montre également comment la disposition du texte (une seule ligne de texte, pas de gestion automatique des sauts de ligne; la technique illustrée dans la
TextLayout
échantillon gère les sauts de ligne automatiquement à l'aide de laXTextFormatter
classe).Correct, le TextLayout exemple montre comment la mise en page de texte sans XLineAlignment. La question portait sur la présentation du texte. Le Graphique montre également les moyens de mise en forme de texte à l'aide de XLineAlignment.
OriginalL'auteur Vive la déraison
Tout en essayant de comprendre comment le texte de positionnement fonctionne avec PdfSharp, j'ai remarqué que le Cordon() méthode écrit sur le dessus de la coordonnée Y de la que nous indiquez.
Si je souhaite écrire à (0, 100)(x, y), il pointe vers le coin inférieur gauche alors que je pensais que c'était le coin en haut à gauche de coordonnées. En conséquence, la chaîne de texte coordonnée Y que je devrais avoir spécifié est de 100 + chaîne.Hauteur * .6.
}
Vous aurez peut-être se demander pourquoi, je n'ajoute 60% de la taille de la chaîne lorsque je souhaite accéder à ma chaîne écrite ci-dessous mes coordonnées Y? C'est parce que la hauteur totale de la police comprend somekind de sauter sur le dessus. Ainsi, le calcul du résultat ne sera pas ce qui est attendu. D'autre part, vous n'avez pas de soins sur un saut si vous en avez besoin. Dans mon cas particulier, je n'exigent pas de saut, donc je dois enlever la hauteur de la corde.
Si vous vous sentez comme mon explication besoins des détails plus précis, n'hésitez pas à ajouter comme des commentaires ou à me tenir au courant afin que je puisse les inclure.
Merci!
XStringFormats.TopLeft
au lieu deXStringFormats.Defaults
pour éviter de réglage de la position Y de. Ensuite, l'appel àMeasureString
n'est plus nécessaire et le code sera beaucoup plus simple.OriginalL'auteur Will Marcouiller