PdfSharp: Text Höhe/Positionierung problem
Ob ich XTextFormatter oder nicht, bekomme ich die gleiche Fehlermeldung über die LayoutRectangle haben eine Höhe von 0 oder sowas.
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 ist vom Typ System.Zeichnung.FontStyle
foreColour ist vom Typ System.Zeichnung.Farbe
Ich habe bereits vordefinierte _gfx von einem PdfPage mit Orientierung = Querformat, Größe = Letter
xPos und yPos sind Parameter vom Typ double, das gleiche mit xLimit und yLimit.
Bekomme ich den Laufzeitfehler, dass die
LayoutRectangle muss eine Höhe von
null (0)...
Per definition ein Rechteck ist gedacht, um eine Höhe, sonst nennen Sie es eine Zeile! Ich verstehe es nicht!...
Habe ich versucht mit dem XGraphics.DrawString () - Methode direkt, und ich bekomme den gleichen Fehler. Es scheint, dass ich nicht verwenden können, die LayoutRectangle aber zu bewältigen haben, dass der text passen in den gewünschten Bereich manuell.
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));
Obwohl die yPos variable Wert ist der exakt gleiche Wert!
*yPos = Seite.Höhe * .4093, entweder 40,93% die Höhe der Seite.*
Hiermit ein Beispiel, was ich versuche zu tun:
"Hallo Welt!" "Hallo
Welt!"
Und hier ist, was ich bekomme:
"Hello World!"
"Hallo Welt!"
Und wegen der unterschiedlichen Druck-Bereich Grenzen und die Größe der schriftart und die Schrift-Stil, ich kann nicht nur schreiben, diese in einem einfachen Satz darunter die richtige Anzahl von Leerzeichen.
InformationsquelleAutor Will Marcouiller | 2009-08-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zitieren Fehlermeldungen genau hilft anderen zu helfen.
Die Fehlermeldung lautet:
Der text wird ausgerichtet in einer Linie, also die Höhe 0 sein muss. Ja, das ist eine Linie.
Verwenden Sie eine andere Ausrichtung, wenn Sie ein Rechteck.
Den
TextLayout
Beispiel zeigt, wie Sie text formatieren.Den Grafiken Beispiel zeigt auch, wie layout-text (einzelne Zeilen text, keine automatischen Zeilenumbrüche; die Technik gezeigt, in der
TextLayout
Probe Griffe Zeilenumbrüche automatisch mit derXTextFormatter
Klasse).Richtig, das TextLayout Beispiel zeigt, wie layout, text ohne XLineAlignment. Die Frage war über text-layout. Die Grafiken Beispiel zeigt auch Möglichkeiten des text-layout mit der XLineAlignment.
InformationsquelleAutor Vive la déraison
Während Sie versuchen, herauszufinden, wie text-Positionierung arbeitet mit PdfSharp, bemerkte ich, dass die DrawString () - Methode schreibt auf der Oberseite des Y-Koordinate, die wir angeben.
Wenn ich schreiben will, auf (0, 100)(x, y), diese Punkte zu der unteren linken Ecke, während ich dachte, das war die Ecke oben Links die Koordinaten. Als Ergebnis der text-string Y-Koordinate, sollte ich angegeben habe, ist 100 + string.Höhe * .6.
}
Werden Sie sich vielleicht Fragen, warum ich nur hinzufügen, dass 60% der die Größe der Zeichenfolge, wenn ich will, um meinen string geschrieben unter meinem Y-Koordinate? Das ist, weil die volle Höhe der schriftart enthält somekind der Sprung an die Spitze. So, die computing-Ergebnis wird nicht sein, was erwartet wird. Auf der anderen Seite, werden Sie nicht haben, um über ein Pflege-Sprung, wenn Sie einen brauchen. In meinem speziellen Fall, ich weiß es nicht erforderlich, Sprung, also muss ich es ausziehen die Höhe der saite.
Wenn Sie das Gefühl, dass meine Erklärung braucht genauere Angaben, bitte fühlen Sie sich frei, um entweder diese als Kommentare oder informieren Sie mich, so dass ich können Sie sind.
Dank!
XStringFormats.TopLeft
stattXStringFormats.Defaults
zu vermeiden, die Anpassung der Y-position. Dann der AufrufMeasureString
ist nicht mehr erforderlich und der code wird viel einfacher sein.InformationsquelleAutor Will Marcouiller