CPDFDigitalSignatureToolBar.swift 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. //
  2. // CPDFDigitalSignatureToolBar.swift
  3. // PDFViewer-Swift
  4. //
  5. // Copyright © 2014-2024 PDF Technologies, Inc. All Rights Reserved.
  6. //
  7. // THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
  8. // AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
  9. // UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
  10. // This notice may not be removed from this file.
  11. //
  12. import UIKit
  13. import ComPDFKit
  14. @objc public protocol CPDFDigitalSignatureToolBarDelegate: AnyObject {
  15. @objc optional func verifySignatureBar(_ pdfSignatureBar: CPDFDigitalSignatureToolBar, sourceButton: UIButton)
  16. @objc optional func addSignatureBar(_ pdfSignatureBar: CPDFDigitalSignatureToolBar, sourceButton: UIButton)
  17. }
  18. public class CPDFDigitalSignatureToolBar: UIView {
  19. private(set) var pdfListView: CPDFListView
  20. public weak var delegate: CPDFDigitalSignatureToolBarDelegate?
  21. public weak var parentVC: UIViewController?
  22. private var addDigitalSignatureBtn: UIButton?
  23. private var verifyDigitalSignatureBtn: UIButton?
  24. private var annotationManage: CAnnotationManage?
  25. // MARK: - Initialize
  26. public init(pdfListView: CPDFListView) {
  27. self.pdfListView = pdfListView
  28. self.annotationManage = CAnnotationManage(pdfListView: pdfListView)
  29. super.init(frame: .zero)
  30. self.backgroundColor = CPDFColorUtils.CAnnotationSampleBackgoundColor()
  31. addDigitalSignatureBtn = UIButton(frame: .zero)
  32. addDigitalSignatureBtn?.setImage(UIImage(named: "CPDFDigitalSignatureAdd", in: Bundle(for: CPDFAddWatermarkViewController.classForCoder()), compatibleWith: nil), for: .normal)
  33. addDigitalSignatureBtn?.addTarget(self, action: #selector(buttonItemClickedAdd(_:)), for: .touchUpInside)
  34. verifyDigitalSignatureBtn = UIButton(frame: .zero)
  35. verifyDigitalSignatureBtn?.setImage(UIImage(named: "CPDFDigitalSignatureVerify", in: Bundle(for: CPDFAddWatermarkViewController.classForCoder()), compatibleWith: nil), for: .normal)
  36. verifyDigitalSignatureBtn?.addTarget(self, action: #selector(buttonItemClickedVerify(_:)), for: .touchUpInside)
  37. if addDigitalSignatureBtn != nil {
  38. configureButton(addDigitalSignatureBtn!, title: NSLocalizedString("Add a Signature Field", comment: ""), image: "CPDFDigitalSignatureAdd", action: #selector(buttonItemClickedAdd))
  39. }
  40. if addDigitalSignatureBtn != nil {
  41. configureButton(verifyDigitalSignatureBtn!, title: NSLocalizedString("Verify the Signature", comment: ""), image: "CPDFDigitalSignatureVerify", action: #selector(buttonItemClickedVerify))
  42. }
  43. }
  44. required init?(coder: NSCoder) {
  45. fatalError("init(coder:) has not been implemented")
  46. }
  47. public override func layoutSubviews() {
  48. super.layoutSubviews()
  49. addDigitalSignatureBtn?.frame = CGRect(x: (frame.size.width - 310) / 2, y: 5, width: 140, height: 50)
  50. verifyDigitalSignatureBtn?.frame = CGRect(x: (addDigitalSignatureBtn?.frame.origin.x ?? 0) + 170, y: 5, width: 140, height: 50)
  51. }
  52. // MARK: - Action
  53. @objc func buttonItemClickedAdd(_ button: UIButton) {
  54. button.isSelected.toggle()
  55. if button.isSelected {
  56. button.backgroundColor = CPDFColorUtils.CAnnotationBarSelectBackgroundColor()
  57. verifyDigitalSignatureBtn?.backgroundColor = CPDFColorUtils.CAnnotationBarNoSelectBackgroundColor()
  58. pdfListView.setAnnotationMode(.signature)
  59. pdfListView.setToolModel(.form)
  60. annotationManage?.setAnnotStyle(from: .signature)
  61. } else {
  62. button.backgroundColor = CPDFColorUtils.CAnnotationBarNoSelectBackgroundColor()
  63. pdfListView.setToolModel(.viewer)
  64. pdfListView.setAnnotationMode(CPDFViewAnnotationMode.CPDFViewAnnotationModenone)
  65. }
  66. delegate?.addSignatureBar?(self, sourceButton: button)
  67. }
  68. @objc func buttonItemClickedVerify(_ button: UIButton) {
  69. if button.isSelected {
  70. addDigitalSignatureBtn?.backgroundColor = CPDFColorUtils.CAnnotationBarNoSelectBackgroundColor()
  71. }
  72. delegate?.verifySignatureBar?(self, sourceButton: button)
  73. }
  74. private func configureButton(_ button: UIButton, title: String, image: String, action: Selector) {
  75. button.setTitle(title, for: .normal)
  76. button.setTitleColor(CPDFColorUtils.CPageEditToolbarFontColor(), for: .normal)
  77. button.backgroundColor = CPDFColorUtils.CAnnotationBarNoSelectBackgroundColor()
  78. button.titleLabel?.adjustsFontSizeToFitWidth = true
  79. button.layer.cornerRadius = 10.0
  80. button.layer.masksToBounds = true
  81. addSubview(button)
  82. }
  83. // MARK: - Public Methods
  84. public func updateStatusWith(signatures: [CPDFSignature]?) {
  85. // Update the status with the provided signatures
  86. if (signatures?.count ?? 0) > 0 {
  87. verifyDigitalSignatureBtn?.setTitleColor(CPDFColorUtils.CPageEditToolbarFontColor(), for: .normal)
  88. verifyDigitalSignatureBtn?.isEnabled = true
  89. } else {
  90. verifyDigitalSignatureBtn?.setTitleColor(.gray, for: .normal)
  91. verifyDigitalSignatureBtn?.isEnabled = false
  92. }
  93. }
  94. // MARK: - Private Methods
  95. private func imageWithColor(_ color: UIColor) -> UIImage {
  96. let rect = CGRect(x: 0, y: 0, width: 1, height: 1)
  97. UIGraphicsBeginImageContextWithOptions(rect.size, false, 0)
  98. color.setFill()
  99. UIRectFill(rect)
  100. let image = UIGraphicsGetImageFromCurrentImageContext()
  101. UIGraphicsEndImageContext()
  102. return image ?? UIImage()
  103. }
  104. }