KMWatermarkModel.swift 6.4 KB

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