HeaderFooter1.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using iTextSharp.text;
  2. using iTextSharp.text.pdf;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using UnityEngine;
  6. using System.Drawing;
  7. using PdfFont = iTextSharp.text.Font;
  8. using Image = iTextSharp.text.Image;
  9. public class HeaderFooter1 : PdfPageEventHelper
  10. {
  11. private PdfTemplate totalPdfTemplate;
  12. private BaseFont baseFont;
  13. private Image headLogo;
  14. public override void OnOpenDocument(PdfWriter writer, Document document)
  15. {
  16. baseFont = BaseFont.CreateFont(Application.streamingAssetsPath + "/Fonts/成绩字体.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
  17. headLogo = Image.GetInstance(Application.streamingAssetsPath + "/Logos/成绩logo.png");
  18. totalPdfTemplate = writer.DirectContent.CreateTemplate(100, 100);
  19. }
  20. public override void OnEndPage(PdfWriter writer, Document document)
  21. {
  22. //添加页眉
  23. AddHeader(writer,document);
  24. //添加页脚
  25. AddFooter(writer, document);
  26. }
  27. public override void OnCloseDocument(PdfWriter writer, Document document)
  28. {
  29. // 在文档关闭时设置总页数
  30. totalPdfTemplate.BeginText();
  31. totalPdfTemplate.SetFontAndSize(baseFont, 10);
  32. totalPdfTemplate.SetTextMatrix(0, 0);
  33. totalPdfTemplate.ShowText((writer.PageNumber).ToString() + " 页");
  34. totalPdfTemplate.EndText();
  35. }
  36. private void AddHeader(PdfWriter writer, Document document)
  37. {
  38. PdfContentByte cb = writer.DirectContent;
  39. cb.SaveState();
  40. cb.SetColorFill(new BaseColor(128, 128, 128));
  41. string text1 = "虚拟仿真实验中心";
  42. float textSize1 = baseFont.GetWidthPoint(text1, 10);
  43. float x1 = document.PageSize.Width / 2;
  44. float y1 = document.Top + 20;
  45. // 绘制页码文本
  46. cb.BeginText();
  47. cb.SetFontAndSize(baseFont, 10);
  48. cb.SetTextMatrix(x1 - textSize1/2, y1);
  49. cb.ShowText(text1);
  50. cb.EndText();
  51. //页眉分割线
  52. cb.SetColorStroke(BaseColor.GRAY);
  53. cb.SetLineWidth(0.5f);
  54. float headY = document.Top + 15;
  55. cb.MoveTo(document.Left, headY);
  56. cb.LineTo(document.Right, headY);
  57. cb.Stroke();
  58. cb.RestoreState();
  59. float targetHeight = 30f;
  60. headLogo.ScaleAbsoluteWidth((targetHeight / headLogo.Height) * headLogo.Width);
  61. headLogo.ScaleAbsoluteHeight(targetHeight);
  62. headLogo.SetAbsolutePosition(document.LeftMargin,
  63. document.Top + 15);
  64. writer.DirectContent.AddImage(headLogo);
  65. }
  66. /// <summary>
  67. /// 添加页脚
  68. /// </summary>
  69. /// <param name="writer"></param>
  70. /// <param name="document"></param>
  71. private void AddFooter(PdfWriter writer, Document document)
  72. {
  73. PdfContentByte cb = writer.DirectContent;
  74. cb.SaveState();
  75. cb.SetColorFill(new BaseColor(128, 128, 128));
  76. //页脚分隔线
  77. cb.MoveTo(document.BottomMargin, document.Bottom);
  78. cb.LineTo(document.PageSize.Width - document.RightMargin, document.Bottom);
  79. cb.Stroke();
  80. string text1 = $"虚拟仿真实验考核系统 @2025";
  81. float x1 = document.LeftMargin;
  82. float y1 = document.BottomMargin - 15;
  83. // 绘制页码文本
  84. cb.BeginText();
  85. cb.SetFontAndSize(baseFont, 10);
  86. cb.SetTextMatrix(x1, y1);
  87. cb.ShowText(text1);
  88. cb.EndText();
  89. string text2 = $"第 {writer.PageNumber} 页 / 共 ";
  90. float textSize2 = baseFont.GetWidthPoint(text2, 10);
  91. float x2 = document.PageSize.Width / 2;
  92. float y2 = document.BottomMargin - 15;
  93. // 绘制页码文本
  94. cb.BeginText();
  95. cb.SetFontAndSize(baseFont, 10);
  96. cb.SetTextMatrix(x2 - textSize2 / 2, y2);
  97. cb.ShowText(text2);
  98. cb.EndText();
  99. // 添加总页数占位符
  100. cb.AddTemplate(totalPdfTemplate, x2 + textSize2 / 2 - baseFont.GetWidthPoint(" ", 10), y2);
  101. cb.RestoreState();
  102. }
  103. }