2016-07-01 6 views
0

ich eine Linie in der Mitte der Seite gezeichnet wollen, aber mein Code eine Zeile in der Fußzeile PDF erzeugenZeichnen Sie eine Linie in der Mitte eines A4-Blattes iTextSharp

public void GeneratePdf() 
    { 
     Document document = new Document(PageSize.A4, 0, 0, 50, 50); 
     var output = new FileStream("doctest.pdf", FileMode.Create); 
     var writer = PdfWriter.GetInstance(document, output); 
     document.Open(); 

     document.NewPage(); 
     PdfContentByte contentByte = writer.DirectContent; 
     contentByte.SetLineWidth(1); 
     contentByte.MoveTo(0, 14); 
     contentByte.LineTo(document.PageSize.Width, 0); 
     contentByte.Stroke(); 

     document.Close(); 
     writer.Close(); 
    } 

Wie gezeichnet die Linie machen in Mitte der Seite?

+0

Was meinst du mit "in der Mitte"? Eine horizontale Linie, die oben und unten gleichmäßig teilt? Eine vertikale Linie, die links und rechts gleichmäßig teilt? – mkl

Antwort

2

Ein paar Dinge hier in Betracht ziehen:

  1. Wenn Sie eine Linie kreuzt die Seite zeichnen möchten, müssen Sie sowohl in der Anfangs- und Ende die gleiche Höhe bringen; Hier starten Sie die Linie in 14 und zeichnen sie auf 0.
  2. iTextSharp misst Dinge in Benutzereinheiten. Eine Benutzereinheit entspricht einem Punkt. Es gibt 72 Punkte in einem Zoll, also, wenn Sie Ihre Linie auf dem 14. Zoll setzen möchten, sollten Sie spezifizieren 14 * 72
  3. Die Position des Schreibers ist von unten nach oben; Deshalb wird beim Setzen von 14 als Anfang der Zeile unten gezeichnet.

In diesem Sinne: Wenn Sie Ihre Linie rechts in der Mitte der Seite zeichnen möchten, verwenden Sie einfach die Seitengröße:

contentByte.MoveTo(0, document.PageSize.Height/2); 
contentByte.LineTo(document.PageSize.Width, document.PageSize.Height/2); 

Wenn Sie es an einer anderen Stelle ziehen wollen, messen In einer realen Seite an welcher Position (in Zoll) Sie Ihre Linie zeichnen möchten, subtrahieren Sie sie von der Gesamtgröße der Seite und multiplizieren Sie sie für 72. Dh Wenn Sie Ihre Linie 5 Zoll von der Spitze zeichnen möchten, ist die Größe A4 8,3 * 11,7:

contentByte.MoveTo(0, (11.7f - 5f) * 72f); 
contentByte.LineTo(document.PageSize.Width, (11.7f - 5f) * 72f); 
+0

Gute Antwort (eine Bewertung wert), aber ich korrigierte ein kleines Missverständnis. –