En-tête et pied de page dans ITextSharp

Je sais que cette question a été posée mille fois, mais je n’ai pas encore trouvé de réponse simple. ITextSharp étant relativement nouveau, expliquez-le comme si vous parliez à un bambin. Comment puis-je append un simple en-tête et pied de page au texte que je crée?

Je crée un document pdf simple avec le code suivant:

void Button1Click(object sender, EventArgs e) { Document doc = new Document(iTextSharp.text.PageSize.LEDGER, 10, 10, 42, 35); PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream(@"File Path", FileMode.Create)); doc.Open(); Paragraph par1 = new Paragraph("Hello World!"); doc.Add(par1); //Code to add header/footer doc.Close(); MessageBox.Show("Your PDF has been created!"); } 

J’ai fait beaucoup de recherches sur la façon d’append des en-têtes et des pieds de page, mais ils ont tous à voir avec des événements de page compliqués. Y a-t-il un moyen plus facile? Sinon, pouvez-vous me guider pas à pas dans le processus? J’apprécierais vraiment toute aide que vous pourriez tous apporter. Merci!

Vous créez votre Document comme ceci:

 Document doc = new Document(iTextSharp.text.PageSize.LEDGER, 10, 10, 42, 35); 

Cela signifie que vous disposez d’une marge supérieure de 42 unités et d’une marge inférieure de 35 unités. Vous pouvez utiliser cette marge pour append du contenu supplémentaire dans un événement de page.

Le site Web officiel contient de nombreux exemples et une section complète de questions et réponses. Tous les exemples et les réponses sont étiquetés. Si vous cliquez sur la balise d’ entête , vous trouverez de nombreux exemples.

Comme déjà indiqué par d’autres personnes dans les commentaires, vous devez créer une implémentation PdfPageEvent . Le moyen le plus simple de procéder consiste à étendre la classe PdfPageEventHelper .

 class MyHeaderFooterEvent : PdfPageEventHelper { Font FONT = new Font(Font.FontFamily.HELVETICA, 18, Font.BOLD); public override void OnEndPage(PdfWriter writer, Document document) { PdfContentByte canvas = writer.DirectContent; ColumnText.ShowTextAligned( canvas, Element.ALIGN_LEFT, new Phrase("Header", FONT), 10, 810, 0 ); ColumnText.ShowTextAligned( canvas, Element.ALIGN_LEFT, new Phrase("Footer", FONT), 10, 10, 0 ); } } 

Important à savoir:

  • Il est interdit d’append du contenu dans l’ OnStartPage() . Ajoutez votre en-tête et votre pied de page lorsque tout le contenu a été ajouté à la page juste avant qu’iTextSharp ne se déplace sur une nouvelle page. Plus spécifiquement: ajoutez du contenu à l’ OnEndPage() .
  • Il est interdit d’append du contenu à l’object Document transmis à l’événement. Cet object ne peut être utilisé qu’en lecture seule.

Si vous examinez la méthode OnEndPage() dans la classe MyHeaderFooterEvent , vous constatez que nous obtenons le DirectContent de l’auteur et que nous ajoutons du contenu à ce canvas aide de méthodes ShowTextAligned . Il existe de nombreuses autres manières d’append du contenu, mais vous avez explicitement demandé la méthode la plus simple. Cette façon a ses limites, mais c’est facile.

J’ai utilisé quelques valeurs codées en dur: j’ai utilisé 10 comme valeur x pour l’en-tête et le pied de page. C’est parce que vous avez défini une marge de gauche de 10 unités d’utilisateur. L’en-tête et le pied de page sont alignés à gauche sur le contenu que vous ajoutez à la page. J’ai utilisé 810 pour la valeur y de l’en-tête car vous créez une page A4 avec une marge supérieure de 42. La coordonnée y supérieure de votre page est 842. La coordonnée y supérieure de la marge supérieure est 842 – 42 = 800. J’ai ajouté 10 unités utilisateur pour que votre en-tête ne soit pas collé au contenu réel. La coordonnée y bas de la page est 0 dans votre cas et la coordonnée du bas y de la marge en 35. J’ai utilisé 10 pour la ligne de base du pied de page.

Vous avez créé wri et, immédiatement après la création de cette instance de PdfWriter , vous ouvrez l’instance de Document . Pour que l’événement de page prenne effet, vous devez append le lien suivant juste avant d’ouvrir le Document :

 wri.PageEvent = new MyHeaderFooterEvent(); 

Maintenant, la méthode OnEndPage() sera invoquée chaque fois que votre processus principal finalise une page.

Important: vous avez ajouté //Code to add header/footer de //Code to add header/footer au mauvais endroit. iTextSharp essaiera de vider le contenu d’une page dès que possible. Si vous ajoutez du code pour append un en-tête / pied de page après avoir ajouté du contenu, vous ne pouvez pas revenir en arrière pour append un en-tête et un pied de page aux pages déjà vidées du stream de sortie.