2017-09-04 4 views
1

Comment placer du texte à un emplacement spécifique sur le pdf? J'ai fait un peu de recherche mais je n'ai rien trouvé de bien. J'ai document.Add(new Paragraph("Date:" + DateTime.Now)); et je voulais placer cela sur une zone spécifique sur le fichier pdf.Comment placer des paragraphes à un endroit spécifique en utilisant iTextSharp

Mon 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(); 
    } 

Répondre

2

En supposant que vous savez comment ajouter des images à une position absolue (voir la réponse de Joris), mais en regardant comment ajouter du texte, alors la réponse à votre question est: utilisez ColumnText.

Si vous avez seulement besoin d'ajouter une seule ligne qui n'a pas besoin d'être enveloppé, vous pouvez utiliser la méthode ShowTextAligned():

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

Dans cette ligne de code, x et y les coordonnées pour la milieu du texte (les autres valeurs d'alignement possibles sont ALIGN_LEFT et ALIGN_RIGHT). Le paramètre rotation définit une rotation en degrés. Notez que le texte "single line" ne sera pas encapsulé. Vous pouvez ajouter du texte qui "tombe de la page" de cette façon si le texte que vous ajoutez est trop long.

Si vous voulez ajouter du texte dans un rectangle spécifique, vous devez définir la colonne à l'aide d'un objet Rectangle:

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(); 

Si vous fournissez plus de texte que ne peut le rectangle, ce texte ne sera pas rendu . Cependant, il sera toujours disponible dans l'objet ct afin que vous puissiez ajouter ce texte restant à une autre position.

Tout cela a été demandé et répondu avant:

ligne simple:

lignes multiples:

Est-ce que je dois chercher longtemps pour ces exemples? Non, je les ai trouvés sur le site officiel sous Absolute Positioning of text.

La sagesse est là pour ceux qui cherchent ...

1

Ce concept est bien expliqué dans le livre 'iText en action'. Ce qui peut être trouvé sur le site Web.

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

exemple de code court (voir le site pour d'autres exemples):

// 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

Je pense que le problème est pas un positionnement des images, mais le positionnement ' « Date: » + DateTime.Now)' à une position absolue. Bien sûr: c'est aussi une question à laquelle on a déjà répondu plusieurs fois. –