123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351 |
- //
- // KMWatermarkPropertyInfoController.swift
- // PDF Reader Pro
- //
- // Created by tangchao on 2022/12/16.
- //
- import Cocoa
- enum KMWatermarkPropertyType: Int {
- case text = 0
- case file = 1
- }
- class KMWatermarkPropertyInfoController: NSViewController {
- @IBOutlet weak var scrollView: NSScrollView!
-
- @IBOutlet weak var infoBox: NSBox!
- @IBOutlet weak var infoBoxHeightConst: NSLayoutConstraint!
- @IBOutlet weak var outsideBox: NSBox!
-
- @IBOutlet weak var outsideHeightConst: NSLayoutConstraint!
- @IBOutlet weak var positionBox: NSBox!
- @IBOutlet weak var plainBox: NSBox!
- @IBOutlet weak var pageRangeBox: NSBox!
-
- var model: KMWatermarkModel!
-
- var type: KMWatermarkPropertyType = .text
-
- var fileInfoView: KMWatermarkFileView!
- var textInfoView: KMWatermarkTextView!
- var outsideView: KMWatermarkAdjectiveOutsideView!
- var fileOutSideView: KMWatermarkFileOutsideView!
- var positiomView: KMWatermarkAdjectivePositionView!
- var plainView: KMWatermarkAdjectivePlainView!
- var pageRangeView: KMConvertPageRangeSettingItemView!
-
- weak var delegate: KMWatermarkAdjectivePropertyDelegate!
-
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do view setup here.
- self.scrollView.hasVerticalScroller = false
- self.scrollView.hasHorizontalScroller = false
-
- if (self.type == .text) {
- self.infoBoxHeightConst.constant = 178
- var infoView = KMWatermarkTextView.createFromNib()
- infoView?.setModel(model: self.model)
- infoView?.frame = self.infoBox.contentView!.bounds
- infoView?.autoresizingMask = NSView.AutoresizingMask(rawValue: 18)
- self.infoBox.contentView?.addSubview(infoView!)
- self.textInfoView = infoView
- infoView?.itemClick = {
- (itemID: Int, itemValue: Any) in
- if (itemID == 1) {
- self.model.text = itemValue as! String
- } else if (itemID == 2) {
- self.model.textFont = .font(name: itemValue as! String, size: self.model.getTextFontSize())
- } else if (itemID == 3) {
- let size: Int = itemValue as! Int
- self.model.textFont = .font(name: self.model.getTextFontName(), size: CGFloat(size))
- } else if (itemID == 4) {
- let aligement: Int = itemValue as! Int
- if (aligement == 0) {
- self.model.textAligement = .left
- } else if (aligement == 1) {
- self.model.textAligement = .center
- } else if (aligement == 2) {
- self.model.textAligement = .right
- }
- } else if (itemID == 5) {
- let color = KMWatermarkAdjectiveTools.parseColor(color: itemValue as! NSColor)
- self.model.textColor = .color(red: color.red, green: color.green, blue: color.blue, alpha: color.alpha)
- }
- self.updateModel(model: self.model)
- }
- } else {
- self.infoBoxHeightConst.constant = 50
- var infoView = KMWatermarkFileView.createFromNib()
- infoView?.frame = self.infoBox.contentView!.bounds
- infoView?.autoresizingMask = NSView.AutoresizingMask(rawValue: 18)
- self.infoBox.contentView?.addSubview(infoView!)
- self.fileInfoView = infoView
-
- self.outsideBox.isHidden = true
- self.positionBox.isHidden = true
- self.plainBox.isHidden = true
- self.pageRangeBox.isHidden = true
-
- infoView?.itemClick = {
- (itemID: Int, itemValue: Any) in
- let panel = NSOpenPanel()
- panel.allowsMultipleSelection = false
- panel.allowedFileTypes = ["pdf", "png", "jpeg"]
- panel.beginSheetModal(for: self.view.window!) {
- response in
- if response == .cancel {
- return
- }
-
- self.fileInfoView.tipLabel.stringValue = panel.url!.lastPathComponent
- self.outsideBox.isHidden = false
- self.positionBox.isHidden = false
- self.plainBox.isHidden = false
- self.pageRangeBox.isHidden = false
-
- if (panel.url?.pathExtension.lowercased() == "pdf") {
- let document = CPDFDocument(url: panel.url)
- if ((document?.isEncrypted)!) {
- return
- }
-
- let convert = KMPDFConvert()
- convert.convertType = .png
- convert.filePath = panel.url!.path
- convert.pages = [1]
- convert.outputFolderPath = (NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.applicationSupportDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last?.stringByAppendingPathComponent(Bundle.main.bundleIdentifier!))!
- convert.outputFileName = "pdfConvertPng"
- KMPDFConvertManager.defaultManager.convert(convert: convert) { finished, error in
- if (finished) {
- if (FileManager.default.fileExists(atPath: convert.outputFilePath)) {
- let tagString = self.tagString()
- let imagePath: String = (FileManager.default.subpaths(atPath: convert.outputFilePath)?.first)!
- var pdfPath: String = "\(convert.outputFilePath)/\(imagePath)"
- let newPath: String = "\(convert.outputFilePath)/\(tagString))/\(tagString).png"
-
- let result = try?FileManager.default.copyItem(atPath: pdfPath, toPath: newPath)
- if ((result) != nil) {
- pdfPath = newPath
- try?FileManager.default.removeItem(atPath: convert.outputFilePath)
- }
-
- let image = NSImage(contentsOfFile: pdfPath)
- if (image!.size.width <= 0 || image!.size.height <= 0 ) {
- let alert = NSAlert()
- alert.alertStyle = .critical
- alert.messageText = "文件\(panel.url?.lastPathComponent)已损坏"
- alert.runModal()
- return
- }
-
- self.model.imagePath = panel.url?.path ?? ""
- self.model.image = image
- self.model.text = ""
- self.model.watermarkID = panel.url?.lastPathComponent.components(separatedBy: ".").first ?? ""
-
- self.modelDidChange(self.model)
- }
- }
- }
- } else {
- let image = NSImage(contentsOf: panel.url!)
- if (image!.size.width <= 0 || image!.size.height <= 0 ) {
- let alert = NSAlert()
- alert.alertStyle = .critical
- alert.messageText = "文件\(panel.url?.lastPathComponent)已损坏"
- alert.runModal()
- return
- }
-
- self.model.imagePath = panel.url?.path ?? ""
- self.model.image = image
- self.model.text = ""
- self.model.watermarkID = panel.url?.lastPathComponent.components(separatedBy: ".").first ?? ""
-
- self.modelDidChange(self.model)
- }
- }
- }
- }
-
- /// 外观
- self.outsideHeightConst.constant = 150
- var outsideView = KMWatermarkAdjectiveOutsideView()
- outsideView.frame = self.outsideBox.contentView!.frame
- outsideView.autoresizingMask = NSView.AutoresizingMask(rawValue: 18)
-
- outsideView.setModel(model: model)
- self.outsideBox.contentView?.addSubview(outsideView)
- self.outsideView = outsideView
-
- outsideView.itemClick = {
- (itemID: Int, itemValue: Any) in
- if (itemID == 1) {
- self.model.rotation = -CGFloat(itemValue as! Int)
- } else if (itemID == 2) {
- self.model.opacity = CGFloat(itemValue as! Int)/100.0
- } else if (itemID == 3) {
- let value: Int = itemValue as! Int
- if (value == 0) {
- self.model.isFront = true
- } else {
- self.model.isFront = false
- }
- } else if (itemID == 4) {
- self.model.scale = CGFloat((itemValue as! Int))/100.0
- }
- self.modelDidChange(self.model)
- }
- /// 位置
- var positionView = KMWatermarkAdjectivePositionView.createFromNib()
- positionView?.frame = self.positionBox.contentView!.bounds
- positionView?.autoresizingMask = NSView.AutoresizingMask(rawValue: 18)
- self.positionBox.contentView?.addSubview(positionView!)
- self.positiomView = positionView
- positionView?.itemClick = {
- (itemID: Int, itemValue: Any) in
- if (itemID == 1) {
- let position: KMWatermarkPosition = itemValue as! KMWatermarkPosition
- if (position == .leftTop || position == .top || position == .rightTop) {
- self.model.verticalMode = 0
- } else if (position == .leftMiddle || position == .middle || position == .rightMiddle) {
- self.model.verticalMode = 1
- } else if (position == .leftBottom || position == .bottom || position == .rightBottom) {
- self.model.verticalMode = 2
- }
- if (position == .leftTop || position == .leftMiddle || position == .leftBottom) {
- self.model.horizontalMode = 0
- } else if (position == .top || position == .middle || position == .bottom) {
- self.model.horizontalMode = 1
- } else if (position == .rightTop || position == .rightMiddle || position == .rightBottom) {
- self.model.horizontalMode = 2
- }
- } else if (itemID == 2) {
- self.model.horizontalSpace = CGFloat(itemValue as! Double)
- } else if (itemID == 3) {
- self.model.verticalSpace = CGFloat(itemValue as! Double)
- }
-
- self.modelDidChange(self.model)
- }
- /// 平铺
- var plainView = KMWatermarkAdjectivePlainView.createFromNib()
- plainView?.frame = self.plainBox.contentView!.bounds
- plainView?.autoresizingMask = NSView.AutoresizingMask(rawValue: 18)
- self.plainBox.contentView?.addSubview(plainView!)
- self.plainView = plainView
- plainView?.setModel(model: self.model)
- plainView?.itemClick = {
- (itemID: Int, itemValue: Any) in
- if (itemID == 1) {
- self.model.isTilePage = itemValue as! Bool
- } else if (itemID == 2) {
- self.model.tileHorizontalSpace = CGFloat(itemValue as! Double)
- } else if (itemID == 3) {
- self.model.tileVerticalSpace = CGFloat(itemValue as! Double)
- }
-
- self.modelDidChange(self.model)
- }
-
- var pageRangeView = KMConvertPageRangeSettingItemView.createFromNib()
- pageRangeView?.frame = pageRangeBox.contentView!.bounds
- pageRangeView?.autoresizingMask = NSView.AutoresizingMask(rawValue: 18)
- pageRangeBox.contentView?.addSubview(pageRangeView!)
- pageRangeView!.pageSizeComboBox.removeAllItems()
- pageRangeView!.pageSizeComboBox.addItems(withObjectValues: [NSLocalizedString("All Pages", comment: ""), NSLocalizedString("Odd Pages", comment: ""), NSLocalizedString("Even Pages", comment: ""), NSLocalizedString("Customized", comment: "")])
- pageRangeView!.pageSizeComboBox.selectItem(at: 0)
-
- self.pageRangeView = pageRangeView
- pageRangeView?.isTextDidEndCallback = true
-
- pageRangeView?.itemClick = { [unowned self] index, _ in
- self.model.pageRangeType = KMWatermarkeModelPageRangeType(rawValue: index)!
- self.modelDidChange(self.model)
- }
-
- pageRangeView?.textDidEndEditingCallback = {
- [unowned self] (textString: String) in
-
- let array = KMPageRangeTools.findSelectPage(pageRangeString: textString, pageCount: Int(self.model.pageCount))
- if (array.count <= 0) {
- let alert = NSAlert()
- alert.alertStyle = .warning
- alert.messageText = NSLocalizedString("Invalid page range or the page number is out of range. Please try again.", comment: "")
- alert.runModal()
- return
- }
-
- var pageString: String = ""
- for i in 0 ..< array.count {
- pageString.append("\(array[i]-1)")
-
- if (i != array.count-1) {
- pageString.append(",")
- }
- }
- self.model.pagesString = pageString
- self.modelDidChange(self.model)
- }
- }
-
- override func viewDidAppear() {
- super.viewDidAppear()
-
- /// 滚动到顶部
- let contentView = self.scrollView.contentView;
- contentView.scroll(to: NSMakePoint(0, NSHeight(self.scrollView.documentView!.frame)-NSHeight(contentView.frame)))
- }
-
- private func tagString() -> String {
- var result: String = ""
-
- let dateFormatter = DateFormatter()
- dateFormatter.dateFormat = "yyMMddHHmmss"
- result.append(dateFormatter.string(from: Date()))
- result = result.appendingFormat("%04d", arc4random()%10000)
-
- return result
- }
-
- private func modelDidChange(_ model: KMWatermarkModel) {
- self.delegate.propertyInfoDidChange(model: model)
- }
-
- func updateModel(model: KMWatermarkModel) {
- self.model = model
-
- self.outsideBox.isHidden = false
- self.plainBox.isHidden = false
- self.positionBox.isHidden = false
- self.pageRangeBox.isHidden = false
-
- if (self.textInfoView != nil) {
- self.textInfoView.setModel(model: model)
- }
- if (self.fileInfoView != nil) {
- self.fileInfoView.setModel(model: model)
- self.fileInfoView.tipLabel.stringValue = model.imagePath.lastPathComponent
- }
- if (self.outsideView != nil) {
- self.outsideView.setModel(model: model)
- }
-
- if (self.fileOutSideView != nil) {
- self.fileOutSideView.setModel(model: model)
- }
- if (self.positiomView != nil) {
- self.positiomView.setModel(model: model)
- }
- if (self.plainView != nil) {
- self.plainView.setModel(model: model)
- }
-
- }
- }
|