PdfPageHelperEvent.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package com.xunmei.file.utils;
  2. import com.lowagie.text.*;
  3. import com.lowagie.text.pdf.*;
  4. import lombok.AllArgsConstructor;
  5. import lombok.Data;
  6. import lombok.NoArgsConstructor;
  7. /**
  8. * @author jingyuanchao
  9. * @date 2023/12/18 20:18
  10. */
  11. @NoArgsConstructor
  12. @AllArgsConstructor
  13. @Data
  14. public class PdfPageHelperEvent implements PdfPageEvent {
  15. private Integer totalPageSize;
  16. private PdfWriter writer;
  17. private BaseFont fs;
  18. private Font tableFont;
  19. @Override
  20. public void onOpenDocument(PdfWriter pdfWriter, Document document) {
  21. }
  22. @Override
  23. public void onStartPage(PdfWriter pdfWriter, Document document) {
  24. /* try {
  25. PdfUtil.createWatermark(document,pdfWriter,tableFont,"水印测试");
  26. } catch (DocumentException | IOException e) {
  27. throw new RuntimeException(e);
  28. }*/
  29. }
  30. @Override
  31. public void onEndPage(PdfWriter pdfWriter, Document document) {
  32. /* PdfContentByte cb = writer.getDirectContent();// 得到层
  33. cb.saveState(); // 开始
  34. cb.beginText();
  35. cb.setFontAndSize(fs, 10); // Header
  36. *//* float x = document.top(-20);// 位置 // 左
  37. cb.showTextAligned(PdfContentByte.ALIGN_LEFT, "H-Left", document.left(), x, 0); // 中
  38. cb.showTextAligned(PdfContentByte.ALIGN_CENTER, "第" + writer.getCurrentPageNumber() + "页", (document.right() + document.left()) / 2, x, 0); // 右
  39. cb.showTextAligned(PdfContentByte.ALIGN_RIGHT, "H-Right", document.right(), x, 0); *//*
  40. float y = document.bottom(-80); // 左
  41. cb.showTextAligned(PdfContentByte.ALIGN_LEFT, "", document.left(), y, 0); // 中
  42. cb.showTextAligned(PdfContentByte.ALIGN_CENTER, "第" + writer.getCurrentPageNumber() + "页/共" + totalPageSize + "页", (document.right() + document.left()) / 2, y, 0); // 右
  43. cb.showTextAligned(PdfContentByte.ALIGN_RIGHT, "", document.right(), y, 0);
  44. cb.endText();
  45. cb.restoreState();*/
  46. try {
  47. // PDF文档内容
  48. PdfContentByte pdfContent = writer.getDirectContent();
  49. pdfContent.saveState();
  50. pdfContent.beginText();
  51. int footerFontSize = 10;
  52. Font fontDetail = new Font(fs, footerFontSize, Font.NORMAL);
  53. pdfContent.setFontAndSize(fs, footerFontSize);
  54. // 页脚的页码 展示
  55. String footerNum = String.format("第%d页,共" + totalPageSize + "页", writer.getPageNumber());
  56. Phrase phrase = new Phrase(footerNum, fontDetail);
  57. // 页码的 横轴 坐标 居中
  58. float x = (document.left() + document.right()) / 2 + 10;
  59. // 页码的 纵轴 坐标
  60. float y = document.bottom(-20);
  61. // 添加文本内容,进行展示页码
  62. ColumnText.showTextAligned(pdfContent, Element.ALIGN_CENTER, phrase, x, y, 0);
  63. pdfContent.endText();
  64. pdfContent.restoreState();
  65. } catch (Exception e) {
  66. e.printStackTrace();
  67. }
  68. }
  69. @Override
  70. public void onCloseDocument(PdfWriter pdfWriter, Document document) {
  71. }
  72. @Override
  73. public void onParagraph(PdfWriter pdfWriter, Document document, float v) {
  74. }
  75. @Override
  76. public void onParagraphEnd(PdfWriter pdfWriter, Document document, float v) {
  77. }
  78. @Override
  79. public void onChapter(PdfWriter pdfWriter, Document document, float v, Paragraph paragraph) {
  80. }
  81. @Override
  82. public void onChapterEnd(PdfWriter pdfWriter, Document document, float v) {
  83. }
  84. @Override
  85. public void onSection(PdfWriter pdfWriter, Document document, float v, int i, Paragraph paragraph) {
  86. }
  87. @Override
  88. public void onSectionEnd(PdfWriter pdfWriter, Document document, float v) {
  89. }
  90. @Override
  91. public void onGenericTag(PdfWriter pdfWriter, Document document, Rectangle rectangle, String s) {
  92. }
  93. }