KMPDFWatermarkData.swift 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. //
  2. // KMPDFWatermarkData.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by tangchao on 2023/11/2.
  6. //
  7. import Cocoa
  8. @objcMembers class KMPDFWatermarkData: NSObject {
  9. var watermarkType: CPDFWatermarkType = .text
  10. var text: String? = nil
  11. var fontName: String = ""
  12. var fontStyle: String? = ""
  13. var fontSize: CGFloat = 12
  14. var textColor: NSColor = NSColor.clear
  15. var imagePath:String? = nil
  16. var isScale: Bool = false
  17. var scale: CGFloat = 0.5
  18. var rotation: CGFloat = 0
  19. var opacity: CGFloat = 1
  20. var verticalPosition: CPDFWatermarkVerticalPosition = .center
  21. var horizontalPosition: CPDFWatermarkHorizontalPosition = .center
  22. var tx: CGFloat = 0
  23. var ty: CGFloat = 0
  24. var isFront: Bool = true
  25. var isTilePage: Bool = false
  26. var verticalSpacing: CGFloat = 60
  27. var horizontalSpacing: CGFloat = 60
  28. var tag: String = ""
  29. var watermarkName: String = ""
  30. var cPDFWatermark: CPDFWatermark?
  31. class func defaultData() -> KMPDFWatermarkData {
  32. let data = KMPDFWatermarkData()
  33. data.watermarkType = .text
  34. data.text = KMLocalizedString("Watermark")
  35. data.fontName = "Helvetica"
  36. data.fontStyle = "Regular"
  37. data.fontSize = 12
  38. if let color = KMPDFWatermarkData.watermarkDefaultColors().first {
  39. data.textColor = color
  40. }
  41. data.imagePath = nil
  42. data.isScale = false
  43. data.scale = 0.5
  44. data.rotation = 0
  45. data.opacity = 1
  46. data.verticalPosition = .center
  47. data.horizontalPosition = .center
  48. data.tx = 0
  49. data.ty = 0
  50. data.isFront = true
  51. data.isTilePage = false
  52. data.verticalSpacing = 60
  53. data.horizontalSpacing = 60
  54. data.tag = NSString.tagString()
  55. return data
  56. }
  57. class func watermarkDefaultColors() -> [NSColor] {
  58. let colorA = NSColor(red: 205/255, green: 205/255, blue: 205/255, alpha: 1)
  59. let colorB = NSColor(red: 255/255, green: 173/255, blue: 173/255, alpha: 1)
  60. let colorC = NSColor(red: 146/255, green: 222/255, blue: 255/255, alpha: 1)
  61. let colorD = NSColor(red: 171/255, green: 247/255, blue: 220/255, alpha: 1)
  62. let colorE = NSColor(red: 255/255, green: 221/255, blue: 99/255, alpha: 1)
  63. return [colorA, colorB, colorC, colorD, colorE]
  64. }
  65. func modelPreviewImage() -> NSImage? {
  66. if let resultPath = KMWatermarkManager.defaultManager.watermarkImageFolder?.stringByAppendingPathComponent((self.tag + ".png")) {
  67. if let image = NSImage(contentsOfFile: resultPath) {
  68. return image
  69. }
  70. }
  71. return nil
  72. }
  73. func image() -> NSImage? {
  74. if let imagePath = self.imagePath {
  75. if let image = NSImage(contentsOfFile: imagePath) {
  76. return image
  77. }
  78. }
  79. return nil
  80. }
  81. //更新预览图
  82. func updatePreviewImage() {
  83. if let resultPath = KMWatermarkManager.defaultManager.watermarkImageFolder?.stringByAppendingPathComponent((self.tag + ".png")) {
  84. if let image = KMWatermarkManager.defaultManager.drawImageAtpageRect(rect: CGRectMake(0, 0, 136, 181), data: self) {
  85. try?image.pngData()?.write(to: URL(fileURLWithPath: resultPath))
  86. }
  87. }
  88. }
  89. class func returnWaterMarkWith(_ model: KMPDFWatermarkData, _ document: CPDFDocument) -> CPDFWatermark {
  90. var watermark = CPDFWatermark()
  91. if (model.watermarkType == .text) {
  92. watermark = CPDFWatermark(document: document, type: .text)
  93. watermark.text = model.text
  94. watermark.textColor = model.textColor
  95. watermark.cFont = CPDFFont(familyName: model.fontName, fontStyle: model.fontStyle ?? "Regular")
  96. if model.isScale {
  97. watermark.setAutoSizeWithPercentage(model.scale)
  98. } else {
  99. watermark.fontSize = model.fontSize
  100. }
  101. } else if model.watermarkType == .image {
  102. watermark = CPDFWatermark(document: document, type: .image)
  103. watermark.image = model.image()
  104. if model.isScale {
  105. watermark.scale = model.scale
  106. } else {
  107. watermark.scale = 1
  108. }
  109. }
  110. watermark.opacity = model.opacity
  111. watermark.rotation = model.rotation
  112. watermark.tx = model.tx
  113. watermark.ty = model.ty
  114. watermark.isFront = model.isFront
  115. watermark.horizontalPosition = model.horizontalPosition
  116. watermark.verticalPosition = model.verticalPosition
  117. watermark.isTilePage = model.isTilePage
  118. watermark.horizontalSpacing = model.horizontalSpacing
  119. watermark.verticalSpacing = model.verticalSpacing
  120. return watermark
  121. }
  122. func isWatermarkModelChanged() -> Bool {
  123. let defaultModel = KMPDFWatermarkData.defaultData()
  124. if self.watermarkType == .text {
  125. if self.text != defaultModel.text {
  126. return true
  127. }
  128. } else if self.watermarkType == .image {
  129. if self.imagePath != nil {
  130. return true
  131. }
  132. }
  133. if self.fontName != defaultModel.fontName {
  134. return true
  135. }
  136. if self.fontStyle != defaultModel.fontStyle {
  137. return true
  138. }
  139. if self.fontSize != defaultModel.fontSize {
  140. return true
  141. }
  142. if self.textColor != defaultModel.textColor {
  143. return true
  144. }
  145. if self.isScale {
  146. return true
  147. }
  148. if self.scale != defaultModel.scale {
  149. return true
  150. }
  151. if self.rotation != defaultModel.rotation {
  152. return true
  153. }
  154. if self.opacity != defaultModel.opacity {
  155. return true
  156. }
  157. if self.verticalPosition != defaultModel.verticalPosition {
  158. return true
  159. }
  160. if self.horizontalPosition != defaultModel.horizontalPosition {
  161. return true
  162. }
  163. if self.tx != defaultModel.tx {
  164. return true
  165. }
  166. if self.ty != defaultModel.ty {
  167. return true
  168. }
  169. if self.isFront != defaultModel.isFront {
  170. return true
  171. }
  172. if self.isTilePage != defaultModel.isTilePage {
  173. return true
  174. }
  175. if self.verticalSpacing != defaultModel.verticalSpacing {
  176. return true
  177. }
  178. if self.horizontalSpacing != defaultModel.horizontalSpacing {
  179. return true
  180. }
  181. return false
  182. }
  183. }