2016-09-30 2 views
0

Ich möchte 2 Texte auf meinem PDF zeichnen. Der erste Text sollte an der oberen linken Ecke ausgerichtet sein. Das funktioniert gut.Zeichnen eines zweiten Textes unter dem ersten Text

Ich verwende:

canvas = stamper.GetOverContent(i) 
watermarkFont = iTextSharp.text.pdf.BaseFont.CreateFont(iTextSharp.text.pdf.BaseFont.HELVETICA, iTextSharp.text.pdf.BaseFont.CP1252, iTextSharp.text.pdf.BaseFont.NOT_EMBEDDED) 
watermarkFontColor = iTextSharp.text.BaseColor.RED 

canvas.MoveTo(0, 0) 'I think the canvas is the space that we draw onto. My documents always start at position X=0 and Y=0, so move to 0,0 should be fine 
canvas.BeginText() 
canvas.SetFontAndSize(watermarkFont, 12) 
canvas.SetColorFill(watermarkFontColor) 
canvas.ShowTextAligned(Element.ALIGN_TOP, uText, 0, 830, 0) 'is 830 the width of the available space? 
canvas.EndText() 

Nun möchte ich einen anderen Text zu etwa 100 Pixel unter dem ersten Text zeichnen möchte.

Ich verwende:

canvas.MoveTo(0, 100) 'let's draw the second text at X=100, Y=100 
canvas.BeginText() 
canvas.SetFontAndSize(watermarkFont, 12) 
canvas.SetColorFill(watermarkFontColor) 
canvas.ShowTextAligned(Element.ALIGN_CENTER, uBewirtung, 0, 830, 0) 
canvas.EndText() 

Der zweite Text jedoch überhaupt nicht angezeigt. Ich vermute, dass ich außerhalb des Dokuments zeichne, aber ich sehe meinen Fehler nicht.

+1

PDF-Standardkoordinaten sind wie in der Mathematik üblich, d. H. ** y ** -Werte steigen, wenn Sie * nach oben gehen *. (Das Anwenden von Transformationen kann geändert werden, aber Sie haben nicht erwähnt, dass Sie das Koordinatensystem transformiert haben.) Wenn also Text 1 bei (0,0) und Text 2 bei (0, 100) gezeichnet wird, wird letzterer nicht gezeichnet * unterhalb *, sondern * oberhalb * Text 1. Außerdem beginnt der Koordinatensystemursprung normalerweise in der * unteren * linken Ecke der Seite (dies ist nicht obligatorisch, aber sehr häufig). Wenn Ihr erster Codeblock also wirklich Text in der oberen linken Ecke hinzufügt, haben Sie vergessen, einige wichtige Details zu erwähnen. – mkl

+0

@mkl Die Information über die steigenden y-Werte ist großartig! Das ist mein Code, ich vermisse nichts. Der Text ist wirklich in der oberen linken Ecke gezeichnet. – tmighty

+0

[Nach einem anderen Blick auf Ihren Code] ... ah, ok ... in 'canvas.ShowTextAligned' haben Sie drei float-Parameter,' 0, 830, 0'; Sie sind ** x **, ** y ** und ** Rotation **. So ist Ihre '830' nicht die Breite, wie Sie sich gefragt haben, aber es ist die ** y ** Koordinate, auf der der Text gezeichnet wird, und 830 auf dem Porträt A4 mit dem Ursprung in der linken unteren Ecke liegt ziemlich nahe an der Spitze der Seite. BTW, 'Element.ALIGN_TOP' ist dort nicht sinnvoll, die Ausrichtung kann nur' ALIGN_CENTER', 'ALIGN_RIGHT' oder' ALIGN_LEFT' sein. – mkl

Antwort

1

Die Methode MoveTo() dient zum Zeichnen von Pfaden (Linien und Formen im Grafikzustand), nicht von Text (im Textstatus). Es fügt dem Inhaltsstream einen m-Operator hinzu. Wenn Sie ein PDF-Spezialist sind, sollten Sie die SetTextMatrix() Methode verwenden innerhalb Ihre BT/ET Textblock: What does setTextMatrix of contentByte class in iText do?

Notiere die wenn; es ist wichtig. Wenn Sie kein PDF-Spezialist sind, sollten Sie nicht mit diesen Methoden herumspielen. Sie sollten ColumnText.ShowTextAligned() statt BeginText(), EndText() und alle Zeilen verwenden, die Sie dazwischen eingefügt haben. Diese Methoden sind für Leute gedacht, die PDF-Syntax sprechen.

Verwandte Themen