如何在开始时设置PDF的页眉,并将其内容居中对齐。

huangapple go评论122阅读模式
英文:

How set header to PDF at the beginning and how set align center it

问题

  1. String file = "C:/Users/User/Desktop/generator/Test.pdf";
  2. PdfDocument pdfDoc = new PdfDocument(new PdfWriter(file));
  3. Document doc = new Document(pdfDoc);
  4. float[] pointColumnWidths = {450, 200F};
  5. Table table = new Table(pointColumnWidths);
  6. Text text1 = new Text("BLABLA BLABLA");
  7. PdfFont font = PdfFontFactory.createFont(FontConstants.HELVETICA_BOLD);
  8. text1.setFont(font);
  9. text1.setFontSize(20);
  10. text1.setBackgroundColor(Color.BLUE, 170, 20, 170, 20);
  11. text1.setFontColor(Color.WHITE);
  12. Paragraph paragraph1 = new Paragraph();
  13. paragraph1.add(text1);
  14. doc.add(paragraph1);
  15. Cell c1 = new Cell();
  16. c1.add("BlaBla:");
  17. c1.setBorder(Border.NO_BORDER);
  18. c1.setTextAlignment(TextAlignment.LEFT);
  19. table.addCell(c1);
  20. Cell c2 = new Cell();
  21. String number = "45875454";
  22. c2.setBorder(Border.NO_BORDER);
  23. c2.add(number);
  24. c2.setTextAlignment(TextAlignment.LEFT);
  25. table.addCell(c2);
  26. Cell c3 = new Cell();
  27. c3.add("BlaBla:");
  28. c3.setBorder(Border.NO_BORDER);
  29. c3.setTextAlignment(TextAlignment.LEFT);
  30. table.addCell(c3);
  31. Cell c4 = new Cell();
  32. String date = "06.04.2020";
  33. c4.setBorder(Border.NO_BORDER);
  34. c4.add(date);
  35. c4.setTextAlignment(TextAlignment.LEFT);
  36. table.addCell(c4);
  37. Cell c5 = new Cell();
  38. c5.add("BlaBla:");
  39. c5.setBorder(Border.NO_BORDER);
  40. c5.setTextAlignment(TextAlignment.LEFT);
  41. table.addCell(c5);
  42. Cell c6 = new Cell();
  43. String index = "56";
  44. c6.setBorder(Border.NO_BORDER);
  45. c6.add(index);
  46. c6.setTextAlignment(TextAlignment.LEFT);
  47. table.addCell(c6);
  48. Cell c7 = new Cell();
  49. c7.add("BlaBla:");
  50. c7.setBorder(Border.NO_BORDER);
  51. c7.setTextAlignment(TextAlignment.LEFT);
  52. table.addCell(c7);
  53. Cell c8 = new Cell();
  54. String blaBla = "06.04.2020";
  55. c8.setBorder(Border.NO_BORDER);
  56. c8.add(blaBla);
  57. c8.setTextAlignment(TextAlignment.LEFT);
  58. table.addCell(c8);
  59. doc.add(table);
  60. doc.close();
英文:

In this picture I want set header of my pdf with library itextpdf (version 7.0.2), but as a result:

如何在开始时设置PDF的页眉,并将其内容居中对齐。

Code:

  1. String file = "C:/Users/User/Desktop/generator/Test.pdf";
  2. PdfDocument pdfDoc = new PdfDocument(new PdfWriter(file));
  3. Document doc = new Document(pdfDoc);
  4. float[] pointColumnWidths = {450, 200F};
  5. Table table = new Table(pointColumnWidths);
  6. Text text1 = new Text("BLABLA BLABLA");
  7. PdfFont font = PdfFontFactory.createFont(FontConstants.HELVETICA_BOLD);
  8. text1.setFont(font);
  9. text1.setFontSize(20);
  10. text1.setBackgroundColor(Color.BLUE, 170, 20, 170, 20);
  11. text1.setFontColor(Color.WHITE);
  12. Paragraph paragraph1 = new Paragraph();
  13. paragraph1.add(text1);
  14. doc.add(paragraph1);
  15. Cell c1 = new Cell();
  16. c1.add("BlaBla:");
  17. c1.setBorder(Border.NO_BORDER);
  18. c1.setTextAlignment(TextAlignment.LEFT);
  19. table.addCell(c1);
  20. Cell c2 = new Cell();
  21. String number = "45875454";
  22. c2.setBorder(Border.NO_BORDER);
  23. c2.add(number);
  24. c2.setTextAlignment(TextAlignment.LEFT);
  25. table.addCell(c2);
  26. Cell c3 = new Cell();
  27. c3.add("BlaBla:");
  28. c3.setBorder(Border.NO_BORDER);
  29. c3.setTextAlignment(TextAlignment.LEFT);
  30. table.addCell(c3);
  31. Cell c4 = new Cell();
  32. String date = "06.04.2020";
  33. c4.setBorder(Border.NO_BORDER);
  34. c4.add(date);
  35. c4.setTextAlignment(TextAlignment.LEFT);
  36. table.addCell(c4);
  37. Cell c5 = new Cell();
  38. c5.add("BlaBla:");
  39. c5.setBorder(Border.NO_BORDER);
  40. c5.setTextAlignment(TextAlignment.LEFT);
  41. table.addCell(c5);
  42. Cell c6 = new Cell();
  43. String index = "56";
  44. c6.setBorder(Border.NO_BORDER);
  45. c6.add(index);
  46. c6.setTextAlignment(TextAlignment.LEFT);
  47. table.addCell(c6);
  48. Cell c7 = new Cell();
  49. c7.add("BlaBla:");
  50. c7.setBorder(Border.NO_BORDER);
  51. c7.setTextAlignment(TextAlignment.LEFT);
  52. table.addCell(c7);
  53. Cell c8 = new Cell();
  54. String blaBla = "06.04.2020";
  55. c8.setBorder(Border.NO_BORDER);
  56. c8.add(blaBla);
  57. c8.setTextAlignment(TextAlignment.LEFT);
  58. table.addCell(c8);
  59. doc.add(table);
  60. doc.close();

答案1

得分: 2

  1. import com.itextpdf.text.Document;
  2. import com.itextpdf.text.Element;
  3. import com.itextpdf.text.Phrase;
  4. import com.itextpdf.text.pdf.ColumnText;
  5. import com.itextpdf.text.pdf.PdfPageEventHelper;
  6. import com.itextpdf.text.pdf.PdfWriter;
  7. public class HeaderFooterPageEvent extends PdfPageEventHelper {
  8. public void onStartPage(PdfWriter writer, Document document) {
  9. ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER, new Phrase("顶部左侧"), 30, 800, 0);
  10. ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER, new Phrase("顶部右侧"), 550, 800, 0);
  11. }
  12. public void onEndPage(PdfWriter writer, Document document) {
  13. ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER, new Phrase("Bla Bla"), 110, 30, 0);
  14. ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER, new Phrase("页码 " + document.getPageNumber()), 550, 30, 0);
  15. }
  16. }

iText提供了PdfPageEventHelper类,该类具有不同的事件方法,在编写PDF时调用这些方法。要添加页眉和页脚,我们需要创建一个继承自PdfPageEventHelper的类,并覆盖onStartPageonEndPage方法。将此类与PdfWriter注册。

创建一个事件类HeaderFooterPageEvent,继承自PdfPageEventHelper
PdfPageEventHelper类具有不同的PDF事件方法。它实现了PdfPageEvent接口。PdfPageEventHelper的一些事件方法如下:

  • onOpenDocument
  • onStartPage
  • onEndPage
  • onCloseDocument
  • onParagraph
  • onParagraphEnd
  1. <details>
  2. <summary>英文:</summary>
  3. import com.itextpdf.text.Document;
  4. import com.itextpdf.text.Element;
  5. import com.itextpdf.text.Phrase;
  6. import com.itextpdf.text.pdf.ColumnText;
  7. import com.itextpdf.text.pdf.PdfPageEventHelper;
  8. import com.itextpdf.text.pdf.PdfWriter;
  9. public class HeaderFooterPageEvent extends PdfPageEventHelper {
  10. public void onStartPage(PdfWriter writer, Document document) {
  11. ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER, new Phrase(&quot;Top Left&quot;), 30, 800, 0);
  12. ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER, new Phrase(&quot;Top Right&quot;), 550, 800, 0);
  13. }
  14. public void onEndPage(PdfWriter writer, Document document) {
  15. ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER, new Phrase(&quot;Bla Bla&quot;), 110, 30, 0);
  16. ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER, new Phrase(&quot;page &quot; + document.getPageNumber()), 550, 30, 0);
  17. }
  18. }
  19. iText provides `PdfPageEventHelper` class that has different event methods that is called while writing PDF. To add header and footer we need to create a class extending `PdfPageEventHelper` and override `onStartPage` and `onEndPage` methods. Register this class with PdfWriter.
  20. Create an Event Class `HeaderFooterPageEvent` Extending `PdfPageEventHelper`
  21. PdfPageEventHelper class has different event methods for PDF. It implements `PdfPageEvent` interface. Some event methods of `PdfPageEventHelper` are as below
  22. onOpenDocument
  23. onStartPage
  24. onEndPage
  25. onCloseDocument
  26. onParagraph
  27. onParagraphEnd
  28. </details>

huangapple
  • 本文由 发表于 2020年4月6日 18:07:09
  • 转载请务必保留本文链接:https://go.coder-hub.com/61057326.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定