2017-09-04 4 views
1

Wie platziere ich Text an einer bestimmten Position auf der PDF-Datei? Ich habe ein wenig gesucht, aber nichts zu gut gefunden. Ich habe document.Add(new Paragraph("Date:" + DateTime.Now)); und ich wollte das auf einen bestimmten Bereich in der PDF-Datei platzieren.So platzieren Sie Absätze mit iTextSharp an einem bestimmten Ort

Mein Code:

private void savePDF_Click(object sender, EventArgs e) 
    { 
     FileStream fileStream = new FileStream(nameTxtB.Text + "Repair.pdf", FileMode.Create, FileAccess.Write, FileShare.None); 
     Document document = new Document(); 
     document.Open(); 
     iTextSharp.text.Rectangle rectangle = new iTextSharp.text.Rectangle(PageSize.LETTER); 
     PdfWriter pdfWriter = PdfWriter.GetInstance(document, fileStream); 

     iTextSharp.text.Image r3tsLogo = iTextSharp.text.Image.GetInstance("rt3slogo.PNG"); //creates r3ts logo 
     iTextSharp.text.Image r3Info = iTextSharp.text.Image.GetInstance("R3 Information.PNG"); //creates r3 information text below r3ts logo 

     r3tsLogo.SetAbsolutePosition(document.PageSize.Width - 375 - 0f, document.PageSize.Height - 130 - 0f); 
     r3Info.SetAbsolutePosition(document.PageSize.Width - 365 - 0f, document.PageSize.Height - 170 - 0f); //higher the number in height the lower the place of text on paper 
            //less number will result in text more to right in width 

     //increase size of picture 
     r3tsLogo.ScalePercent(120); 
     r3Info.ScalePercent(65); 

//---------------adds all images to pdf file --------------------------------- 
     document.Add(r3tsLogo); 
     document.Add(r3Info); 
     document.Add(new Paragraph("Date:" + DateTime.Now)); 




     document.Close(); 
    } 

Antwort

2

Unter der Annahme, dass Sie wissen, wie Bilder an einer absoluten Position hinzuzufügen (siehe Joris' Antwort), aber wenn man wie man Text hinzufügt, dann ist die Antwort auf Ihre Frage: Verwenden Sie ColumnText.

Wenn Sie nur eine einzige Zeile hinzufügen müssen, die Sie verpackenden nicht müssen, verwenden Sie die ShowTextAligned() Methode:

ColumnText.showTextAligned(writer.DirectContent, 
    Element.ALIGN_CENTER, new Phrase("single line"), x, y, rotation); 

In dieser Codezeile, x und y sind die Koordinaten für die Mitte des Textes (andere mögliche Ausrichtungswerte sind ALIGN_LEFT und ALIGN_RIGHT). Der Parameter rotation definiert eine Drehung in Grad. Beachten Sie, dass der Text "single line" nicht umgebrochen wird. Sie können auf diese Weise Text hinzufügen, der "von der Seite fällt", wenn der hinzuzufügende Text zu lang ist.

Wenn Sie Text in einem bestimmten Rechteck hinzufügen möchten, dann müssen Sie die Spalte unter Verwendung eines Rectangle Objekt definieren:

ColumnText ct = new ColumnText(writer.DirectContent); 
ct.setSimpleColumn(new Rectangle(0, 0, 523, 50)); 
ct.addElement(new Paragraph("This could be a very long sentence that needs to be wrapped")); 
ct.go(); 

Wenn Sie mehr Text zur Verfügung stellen als das Rechteck passt, wird dieser Text nicht gerendert werden . Es wird jedoch weiterhin in dem ct Objekt verfügbar sein, damit Sie den verbleibenden Text an einer anderen Position hinzufügen können.

All dies wurde gestellt und beantwortet vor:

Einzeilig:

Mehrere Linien:

Habe ich für diese Beispiele lange suchen müssen? Nein, ich habe sie auf der offiziellen Website unter Absolute Positioning of text gefunden.

Weisheit ist es für diejenigen, die suchen ...

1

Dieses Konzept gründlich in dem Buch 'iText in Aktion' erklärt. Welche kann auf der Website gefunden werden.

http://developers.itextpdf.com/examples/itext-action-second-edition/chapter-3

Kurzcodebeispiel (überprüfen Sie die Website für weitere Beispiele):

// step 1 
Document document = new Document(PageSize.POSTCARD, 30, 30, 30, 30); 

// step 2 
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(RESULT)); 

// step 3 
document.open(); 

// step 4 
// Create and add a Paragraph 
Paragraph p = new Paragraph("Foobar Film Festival", new Font(FontFamily.HELVETICA, 22)); 
p.setAlignment(Element.ALIGN_CENTER); 
document.add(p); 

// Create and add an Image 
Image img = Image.getInstance(RESOURCE); 
img.setAbsolutePosition(
     (PageSize.POSTCARD.getWidth() - img.getScaledWidth())/2, 
     (PageSize.POSTCARD.getHeight() - img.getScaledHeight())/2); 
document.add(img); 
+0

Ich denke, dass das Problem nicht die Positionierung Bilder, sondern Positionierung ' "Date:" + DateTime.Now)' an einer absoluten Position. Natürlich ist das auch eine Frage, die schon oft beantwortet wurde. –

Verwandte Themen