123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381 |
- //
- // CPDFTextWatermarkSettingViewController.swift
- // PDFViewer-Swift
- //
- // Copyright © 2014-2024 PDF Technologies, Inc. All Rights Reserved.
- //
- // THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
- // AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
- // UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
- // This notice may not be removed from this file.
- //
- import UIKit
- import ComPDFKit
- @objc protocol CPDFTextWatermarkSettingViewControllerDelegate: AnyObject {
- @objc optional func textWatermarkSettingViewControllerSetting(_ textWatermarkSettingViewController: CPDFTextWatermarkSettingViewController, Color color: UIColor)
- @objc optional func textWatermarkSettingViewControllerSetting(_ textWatermarkSettingViewController: CPDFTextWatermarkSettingViewController, Opacity opacity: CGFloat)
- @objc optional func textWatermarkSettingViewControllerSetting(_ textWatermarkSettingViewController: CPDFTextWatermarkSettingViewController, IsFront isFront: Bool)
- @objc optional func textWatermarkSettingViewControllerSetting(_ textWatermarkSettingViewController: CPDFTextWatermarkSettingViewController, IsTile isTile: Bool)
- @objc optional func textWatermarkSettingViewControllerSetting(_ textWatermarkSettingViewController: CPDFTextWatermarkSettingViewController, FamilyName fontName: String,FontStyleName styleName: String)
- @objc optional func textWatermarkSettingViewControllerSetting(_ textWatermarkSettingViewController: CPDFTextWatermarkSettingViewController, FontSize fontSize: CGFloat)
- @objc optional func textWatermarkSettingViewControllerSetting(_ imageWatermarkSettingViewController: CPDFTextWatermarkSettingViewController, PageRange pageRange: String)
- }
- class CPDFTextWatermarkSettingViewController: UIViewController, UIColorPickerViewControllerDelegate, CPDFColorSelectViewDelegate, CPDFColorPickerViewDelegate, CPDFOpacitySliderViewDelegate, CPDFThicknessSliderViewDelegate, CPDFFontStyleTableViewDelegate, CLocationSelectViewDelegate, CPageRangeSelectViewDelegate,CTileSelectViewDelegate,CPDFFontSettingViewDelegate {
-
- weak var delegate: CPDFTextWatermarkSettingViewControllerDelegate?
-
- private var backBtn: UIButton?
-
- private var titleLabel: UILabel?
-
- private var headerView: UIView?
-
- private var colorView: CPDFColorSelectView?
-
- private var opacitySliderView: CPDFOpacitySliderView?
-
- private var colorPicker: CPDFColorPickerView?
-
- private var fontsizeSliderView: CPDFThicknessSliderView?
-
- private var baseName:String?
- private var baseStyleName:String = ""
-
- private var fontStyleTableView: CPDFFontStyleTableView?
-
- var fontSettingView: CPDFFontSettingSubView?
-
- private var locationSelectView: CLocationSelectView?
-
- private var tileSelectView: CTileSelectView?
-
- private var waterModel: CWatermarkModel?
-
- private var pageRangeSelectView: CPageRangeSelectView?
-
- var scrcollView: UIScrollView?
-
- // MARK: - Init
-
- init(waterModel: CWatermarkModel?) {
- super.init(nibName: nil, bundle: nil)
-
- self.waterModel = waterModel
- }
-
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
-
- // MARK: - ViewController Methods
-
- override func viewDidLoad() {
- super.viewDidLoad()
-
- // Do any additional setup after loading the view.
- // Common initialization code
- headerView = UIView()
- headerView?.layer.borderColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.1).cgColor
- headerView?.layer.borderWidth = 1.0
- headerView?.backgroundColor = CPDFColorUtils.CAnnotationPropertyViewControllerBackgoundColor()
- if(headerView != nil) {
- view.addSubview(headerView!)
- }
-
- titleLabel = UILabel()
- titleLabel?.autoresizingMask = .flexibleRightMargin
- titleLabel?.text = NSLocalizedString("Watermark Settings", comment: "")
- titleLabel?.textAlignment = .center
- titleLabel?.font = UIFont.systemFont(ofSize: 20)
- titleLabel?.adjustsFontSizeToFitWidth = true
- if(self.titleLabel != nil) {
- headerView?.addSubview(titleLabel!)
- }
-
- backBtn = UIButton()
- backBtn?.autoresizingMask = .flexibleLeftMargin
- backBtn?.setImage(UIImage(named: "CPDFAnnotationBaseImageBack", in: Bundle(for: self.classForCoder), compatibleWith: nil), for: .normal)
- backBtn?.addTarget(self, action: #selector(buttonItemClicked_back(_:)), for: .touchUpInside)
- if(backBtn != nil) {
- headerView?.addSubview(backBtn!)
- }
-
- scrcollView = UIScrollView()
- scrcollView?.isScrollEnabled = true
- if(scrcollView != nil) {
- view.addSubview(scrcollView!)
- }
-
- colorView = CPDFColorSelectView.init(frame: CGRect.zero)
- colorView?.delegate = self
- colorView?.autoresizingMask = .flexibleWidth
- if (colorView != nil) {
- scrcollView?.addSubview(colorView!)
- }
-
- opacitySliderView = CPDFOpacitySliderView(frame: CGRect.zero)
- opacitySliderView?.delegate = self
- opacitySliderView?.autoresizingMask = .flexibleWidth
- if (opacitySliderView != nil) {
- scrcollView?.addSubview(opacitySliderView!)
- }
-
- createFreeTextProperty()
-
- pageRangeSelectView = CPageRangeSelectView(frame: .zero)
- pageRangeSelectView?.parentVC = self
- pageRangeSelectView?.delegate = self
- pageRangeSelectView?.autoresizingMask = .flexibleWidth
- if pageRangeSelectView != nil {
- scrcollView?.addSubview(pageRangeSelectView!)
- }
-
- locationSelectView = CLocationSelectView(frame: .zero)
- locationSelectView?.delegate = self
- if locationSelectView != nil {
- scrcollView?.addSubview(locationSelectView!)
- }
-
- tileSelectView = CTileSelectView(frame: .zero)
- tileSelectView?.delegate = self
- if tileSelectView != nil {
- scrcollView?.addSubview(tileSelectView!)
- }
-
- commomInitWaterProperty()
-
- updatePreferredContentSizeWithTraitCollection(traitCollection: traitCollection)
- view.backgroundColor = CPDFColorUtils.CAnnotationSampleBackgoundColor()
- }
-
- override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {
- super.willTransition(to: newCollection, with: coordinator)
- updatePreferredContentSizeWithTraitCollection(traitCollection: newCollection)
- }
-
- override func viewWillLayoutSubviews() {
- super.viewWillLayoutSubviews()
- titleLabel?.frame = CGRect(x: (view.frame.size.width - 120) / 2, y: 5, width: 120, height: 50)
- headerView?.frame = CGRect(x: 0, y: 0, width: view.frame.size.width, height: 50)
- scrcollView?.frame = CGRect(x: 0, y: 50, width: view.frame.size.width, height: view.bounds.size.height-50)
- scrcollView?.contentSize = CGSize(width: view.frame.size.width, height: 550)
- if #available(iOS 11.0, *) {
- backBtn?.frame = CGRect(x: view.frame.size.width - 60 - view.safeAreaInsets.right, y: 5, width: 50, height: 50)
- colorView?.frame = CGRect(x: view.safeAreaInsets.left, y: 0, width: view.frame.size.width - view.safeAreaInsets.left - view.safeAreaInsets.right, height: 90)
- opacitySliderView?.frame = CGRect(x: view.safeAreaInsets.left, y: colorView?.frame.maxY ?? 0, width: view.frame.size.width - view.safeAreaInsets.left - view.safeAreaInsets.right, height: 90)
-
- fontSettingView?.frame = CGRect(x: view.safeAreaInsets.left, y: opacitySliderView?.frame.maxY ?? 0, width: view.frame.size.width - view.safeAreaInsets.left - view.safeAreaInsets.right, height: 30)
- locationSelectView?.frame = CGRect(x: view.safeAreaInsets.left, y: (fontSettingView?.frame.maxY ?? 0)+5, width: view.frame.size.width - view.safeAreaInsets.left - view.safeAreaInsets.right, height: 30)
- fontsizeSliderView?.frame = CGRect(x: view.safeAreaInsets.left, y: locationSelectView?.frame.maxY ?? 0, width: view.frame.size.width - view.safeAreaInsets.left - view.safeAreaInsets.right, height: 90)
- pageRangeSelectView?.frame = CGRect(x: view.safeAreaInsets.left, y: (fontsizeSliderView?.frame.maxY ?? 0)+5, width: view.frame.size.width - view.safeAreaInsets.left - view.safeAreaInsets.right, height: 30)
- tileSelectView?.frame = CGRect(x: view.safeAreaInsets.left, y: (pageRangeSelectView?.frame.maxY ?? 0)+5, width: view.frame.size.width - view.safeAreaInsets.left - view.safeAreaInsets.right, height: 45)
-
- } else {
- colorView?.frame = CGRect(x: 0, y: 0, width: view.frame.size.width, height: 90)
- backBtn?.frame = CGRect(x: view.frame.size.width - 60, y: 5, width: 50, height: 50)
- opacitySliderView?.frame = CGRect(x: 0, y: colorView?.frame.maxY ?? 0, width: view.frame.size.width, height: 90)
- fontSettingView?.frame = CGRect(x: 20, y: opacitySliderView?.frame.maxY ?? 0, width: view.frame.size.width - 40, height: 30)
- locationSelectView?.frame = CGRect(x: 0, y: (fontSettingView?.frame.maxY ?? 0)+5, width: view.frame.size.width, height: 30)
- fontsizeSliderView?.frame = CGRect(x: 0, y: locationSelectView?.frame.maxY ?? 0, width: view.frame.size.width, height: 90)
- pageRangeSelectView?.frame = CGRect(x: 0, y: (fontsizeSliderView?.frame.maxY ?? 0)+5, width: view.frame.size.width, height: 30)
- tileSelectView?.frame = CGRect(x: 0, y: (pageRangeSelectView?.frame.maxY ?? 0)+5, width: view.frame.size.width , height: 45)
- }
- }
-
- // MARK: - Protect Methods
-
- func updatePreferredContentSizeWithTraitCollection(traitCollection: UITraitCollection) {
- if self.colorPicker?.superview != nil {
- let currentDevice = UIDevice.current
- if currentDevice.userInterfaceIdiom == .pad {
- // This is an iPad
- self.preferredContentSize = CGSize(width: self.view.bounds.size.width, height: 550)
- } else {
- // This is an iPhone or iPod touch
- self.preferredContentSize = CGSize(width: self.view.bounds.size.width, height: 350)
- }
- } else {
- self.preferredContentSize = CGSize(width: self.view.bounds.size.width, height: traitCollection.verticalSizeClass == .compact ? 380 : 480)
- }
- }
-
- func commomInitWaterProperty() {
- fontsizeSliderView?.thicknessSlider?.maximumValue = 30.0
- fontsizeSliderView?.thicknessSlider?.minimumValue = 12.0
- colorView?.selectedColor = waterModel?.textColor
- opacitySliderView?.opacitySlider?.value = Float(waterModel?.watermarkOpacity ?? 0)
- opacitySliderView?.startLabel?.text = "\(Int(((opacitySliderView?.opacitySlider?.value ?? 0)/1)*100))%"
- fontsizeSliderView?.thicknessSlider?.value = Float(waterModel?.watermarkScale ?? 0)
- fontsizeSliderView?.startLabel?.text = "\(Int(fontsizeSliderView?.thicknessSlider?.value ?? 0))pt"
- fontSettingView?.fontNameSelectLabel?.text = waterModel?.fontName
- fontSettingView?.fontStyleNameSelectLabel?.text = waterModel?.fontStyleName
- tileSelectView?.tileSwitch?.isOn = waterModel?.isTile ?? false
- locationSelectView?.setLocation(waterModel?.isFront ?? true)
- }
-
- func createFreeTextProperty() {
- self.fontSettingView = CPDFFontSettingSubView(frame: CGRect.zero)
- self.fontSettingView?.fontNameLabel?.font = UIFont.boldSystemFont(ofSize: 13.0)
- self.fontSettingView?.fontNameLabel?.textColor = UIColor(red: 153/255.0, green: 153/255.0, blue: 153/255.0, alpha: 1)
- self.fontSettingView?.fontNameLabel?.text = NSLocalizedString("Font", comment: "")
- self.fontSettingView?.delegate = self
-
- if(self.fontSettingView != nil) {
- self.scrcollView?.addSubview(self.fontSettingView!)
- }
-
- fontsizeSliderView = CPDFThicknessSliderView()
- fontsizeSliderView?.thicknessSlider?.value = 20
- fontsizeSliderView?.thicknessSlider?.minimumValue = 1
- fontsizeSliderView?.thicknessSlider?.maximumValue = 100
- fontsizeSliderView?.titleLabel?.text = NSLocalizedString("Font Size", comment: "")
- fontsizeSliderView?.startLabel?.text = "1"
- fontsizeSliderView?.delegate = self
- fontsizeSliderView?.autoresizingMask = .flexibleWidth
- if fontsizeSliderView != nil {
- scrcollView?.addSubview(fontsizeSliderView!)
- }
-
- baseName = "Helvetica"
- }
-
-
- // MARK: - Action
-
- @objc func buttonItemClicked_back(_ button: UIButton) {
- dismiss(animated: true)
- }
-
- // MARK: - CPDFFontSettingViewDelegate
- func setCPDFFontSettingViewFontSelect(view: CPDFFontSettingSubView,isFontStyle:Bool) {
- fontStyleTableView = CPDFFontStyleTableView(frame: self.view.bounds, familyNames: view.fontNameSelectLabel?.text ?? "Helvetica", styleName: baseStyleName,isFontStyle: isFontStyle)
- fontStyleTableView?.delegate = self
- fontStyleTableView?.autoresizingMask = [.flexibleWidth, .flexibleHeight]
- fontStyleTableView?.backgroundColor = CPDFColorUtils.CAnnotationPropertyViewControllerBackgoundColor()
- if(fontStyleTableView != nil) {
- self.view.addSubview(fontStyleTableView!)
- }
- }
-
- // MARK: - CLocationSelectViewDelegate
-
- func locationSelectView(_ locationSelectView: CLocationSelectView, isFront: Bool) {
- delegate?.textWatermarkSettingViewControllerSetting?(self, IsFront: isFront)
- }
-
- // MARK: - CTileSelectViewDelegate
-
- func tileSelectView(_ tileSelectView: CTileSelectView, isTile: Bool) {
- delegate?.textWatermarkSettingViewControllerSetting?(self, IsTile: isTile)
- }
-
- // MARK: - CPDFThicknessSliderViewDelegate
-
- func thicknessSliderView(_ opacitySliderView: CPDFThicknessSliderView, thickness: CGFloat) {
- delegate?.textWatermarkSettingViewControllerSetting?(self, FontSize: thickness)
- }
-
- // MARK: - CPDFFontStyleTableViewDelegate
-
- func fontStyleTableView(_ fontStyleTableView: CPDFFontStyleTableView, fontName: String, isFontStyle: Bool) {
- if(isFontStyle) {
- baseStyleName = fontName
- } else {
- baseName = fontName;
-
- let datasArray:[String] = CPDFFont.fontNames(forFamilyName: baseName ?? "Helvetica")
- baseStyleName = datasArray.first ?? ""
- }
- fontSettingView?.fontNameSelectLabel?.text = baseName
- fontSettingView?.fontStyleNameSelectLabel?.text = baseStyleName
-
- waterModel?.fontName = baseName
- waterModel?.fontStyleName = baseStyleName
- delegate?.textWatermarkSettingViewControllerSetting?(self, FamilyName: baseName ?? "Helvetica", FontStyleName: baseStyleName)
- }
-
- // MARK: - CPDFColorSelectViewDelegate
-
- func selectColorView(_ select: CPDFColorSelectView) {
- if #available(iOS 14.0, *) {
- let picker = UIColorPickerViewController()
- picker.delegate = self
- self.present(picker, animated: true, completion: nil)
- } else {
- let currentDevice = UIDevice.current
- if currentDevice.userInterfaceIdiom == .pad {
- // This is an iPad
- self.colorPicker = CPDFColorPickerView(frame: CGRect(x: self.view.frame.origin.x, y: self.view.frame.origin.y, width: self.view.frame.size.width, height: 520))
- } else {
- // This is an iPhone or iPod touch
- self.colorPicker = CPDFColorPickerView(frame: CGRect(x: self.view.frame.origin.x, y: self.view.frame.origin.y, width: self.view.frame.size.width, height: 320))
- }
- self.colorPicker?.delegate = self
- self.colorView?.autoresizingMask = [.flexibleWidth, .flexibleHeight]
- self.colorPicker?.backgroundColor = CPDFColorUtils.CAnnotationPropertyViewControllerBackgoundColor()
- if(self.colorPicker != nil) {
- self.view.addSubview(self.colorPicker!)
- }
-
- updatePreferredContentSizeWithTraitCollection(traitCollection: traitCollection)
- }
- }
-
- func selectColorView(_ select: CPDFColorSelectView, color: UIColor) {
- delegate?.textWatermarkSettingViewControllerSetting?(self, Color: color)
- }
-
- // MARK: - CPDFOpacitySliderViewDelegate
-
- func opacitySliderView(_ opacitySliderView: CPDFOpacitySliderView, opacity: CGFloat) {
- delegate?.textWatermarkSettingViewControllerSetting?(self, Opacity: opacity)
- }
-
- // MARK: - CPageRangeSelectViewDelegate
-
- func pageRangeSelectView(_ pageRangeSelectView: CPageRangeSelectView, pageRange: String) {
- delegate?.textWatermarkSettingViewControllerSetting?(self, PageRange: pageRange)
- }
-
- // MARK: - CPDFColorPickerViewDelegate
-
- func pickerView(_ colorPickerView: CPDFColorPickerView, color: UIColor) {
- var red: CGFloat = 0
- var green: CGFloat = 0
- var blue: CGFloat = 0
- var alpha: CGFloat = 0
- color.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
- self.opacitySliderView?.opacitySlider?.value = Float(alpha)
- self.opacitySliderView?.startLabel?.text = "\(Int(((self.opacitySliderView?.opacitySlider?.value ?? 0)/1)*100))%"
- self.updatePreferredContentSizeWithTraitCollection(traitCollection: traitCollection)
-
- delegate?.textWatermarkSettingViewControllerSetting?(self, Color: color)
- }
-
- // MARK: - UIColorPickerViewControllerDelegate
-
- @available(iOS 14.0, *)
- func colorPickerViewControllerDidFinish(_ viewController: UIColorPickerViewController) {
-
- var red: CGFloat = 0
- var green: CGFloat = 0
- var blue: CGFloat = 0
- var alpha: CGFloat = 0
- viewController.selectedColor.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
-
- self.opacitySliderView?.opacitySlider?.value = Float(alpha)
- self.opacitySliderView?.startLabel?.text = "\(Int(((self.opacitySliderView?.opacitySlider?.value ?? 0) / 1) * 100))%"
- updatePreferredContentSizeWithTraitCollection(traitCollection: traitCollection)
-
- delegate?.textWatermarkSettingViewControllerSetting?(self, Color: viewController.selectedColor)
- }
-
- }
|