KMHeaderFooterObject.swift 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. //
  2. // KMHeaderFooterObject.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by tangchao on 2022/12/27.
  6. //
  7. import Cocoa
  8. class KMHeaderFooterObject: NSObject {
  9. var fontName: String = "Helvetica"
  10. var fontsize: CGFloat = 12
  11. var color: NSColor = NSColor.black
  12. var leftMargin: Int = 30
  13. var rightMargin: Int = 30
  14. var bottomMargin: Int = 30
  15. var topMargin: Int = 30
  16. var topLeftString: String = ""
  17. var topCenterString: String = ""
  18. var topRightString: String = ""
  19. var bottomLeftString: String = ""
  20. var bottomCenterString: String = ""
  21. var bottomRightString: String = ""
  22. var dateFormatString: String = KMHeaderFooterManager.getdateFormatArray().first!
  23. var pageFormatString: String = KMHeaderFooterManager.getPageFormats().first!
  24. var startString: String = "1"
  25. var name: String = ""
  26. var tag: String = NSString.tagString()
  27. override init() {
  28. super.init()
  29. self.name = ""
  30. }
  31. static func parseModel(model: KMHeaderFooterObject, pageCount: Int) -> [String] {
  32. var topLeftString: String = ""
  33. if (!model.topLeftString.isEmpty) {
  34. var string = KMHeaderFooterObject.parsePageFormat(formatString: model.topLeftString, startPage: model.startString, pageCount: "\(pageCount)")
  35. string = KMHeaderFooterObject.parseDateFormat(formatString: string)
  36. topLeftString = string
  37. }
  38. var topCenterString: String = ""
  39. if (!model.topCenterString.isEmpty) {
  40. var string = KMHeaderFooterObject.parsePageFormat(formatString: model.topCenterString, startPage: model.startString, pageCount: "\(pageCount)")
  41. string = KMHeaderFooterObject.parseDateFormat(formatString: string)
  42. topCenterString = string
  43. }
  44. var topRightString: String = ""
  45. if (!model.topRightString.isEmpty) {
  46. var string = KMHeaderFooterObject.parsePageFormat(formatString: model.topRightString, startPage: model.startString, pageCount: "\(pageCount)")
  47. string = KMHeaderFooterObject.parseDateFormat(formatString: string)
  48. topRightString = string
  49. }
  50. var bottomLeftString: String = ""
  51. if (!model.bottomLeftString.isEmpty) {
  52. var string = KMHeaderFooterObject.parsePageFormat(formatString: model.bottomLeftString, startPage: model.startString, pageCount: "\(pageCount)")
  53. string = KMHeaderFooterObject.parseDateFormat(formatString: string)
  54. bottomLeftString = string
  55. }
  56. var bottomCenterString: String = ""
  57. if (!model.bottomCenterString.isEmpty) {
  58. var string = KMHeaderFooterObject.parsePageFormat(formatString: model.bottomCenterString, startPage: model.startString, pageCount: "\(pageCount)")
  59. string = KMHeaderFooterObject.parseDateFormat(formatString: string)
  60. bottomCenterString = string
  61. }
  62. var bottomRightString: String = ""
  63. if (!model.bottomRightString.isEmpty) {
  64. var string = KMHeaderFooterObject.parsePageFormat(formatString: model.bottomRightString, startPage: model.startString, pageCount: "\(pageCount)")
  65. string = KMHeaderFooterObject.parseDateFormat(formatString: string)
  66. bottomRightString = string
  67. }
  68. return [topLeftString, topCenterString, topRightString, bottomLeftString, bottomCenterString, bottomRightString]
  69. }
  70. class func parsePageFormat(formatString: String, startPage: String, pageCount: String) -> String {
  71. var result = formatString
  72. for pageFormat in KMHeaderFooterManager.getPageFormats() {
  73. let string = "<<\(pageFormat)>>"
  74. if (result.contains(string)) {
  75. var tempString = ""
  76. if (string == "<<1>>") {
  77. tempString.append("<<\(startPage)>>")
  78. } else if (string == "<<1 of n>>") {
  79. tempString.append("<<\(startPage)>>")
  80. tempString.append(" of \(pageCount)")
  81. } else if (string == "<<1/n>>") {
  82. tempString.append("<<\(startPage)>>")
  83. tempString.append("/\(pageCount)")
  84. } else if (string == "<<Page 1>>") {
  85. tempString.append("Page \(startPage)")
  86. } else if (string == "<<Page 1 of n>>") {
  87. tempString.append("Page \(startPage)")
  88. tempString.append("of \(pageCount)")
  89. }
  90. result = result.replacingOccurrences(of: string, with: tempString)
  91. }
  92. }
  93. return result
  94. }
  95. class func parseDateFormat(formatString: String) -> String {
  96. var result: String = formatString
  97. for dateFormat in KMHeaderFooterManager.getdateFormatArray() {
  98. if (result.contains(dateFormat)) {
  99. let formatString: String = dateFormat.replacingOccurrences(of: "m", with: "M")
  100. let replace = "<<\(dateFormat)>>"
  101. let date = Date()
  102. let dateFormatter = DateFormatter()
  103. dateFormatter.dateFormat = formatString
  104. let dateString = dateFormatter.string(from: date)
  105. result = result.replacingOccurrences(of: replace, with: dateString)
  106. }
  107. }
  108. return result
  109. }
  110. }