KMNPDFPreView.swift 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. //
  2. // KMNPDFPreView.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by User-Tangchao on 2024/10/23.
  6. //
  7. import Cocoa
  8. class KMNPDFPreView: NSView {
  9. private lazy var contentBox_: NSBox = {
  10. let box = NSBox()
  11. return box
  12. }()
  13. lazy var pdfView: CPDFView = {
  14. let view = CPDFView()
  15. return view
  16. }()
  17. var contentInset: NSEdgeInsets = .init(top: 0, left: 0, bottom: 0, right: 0) {
  18. didSet {
  19. self.needsLayout = true
  20. }
  21. }
  22. deinit {
  23. KMPrint("KMNPDFPreView deinit.")
  24. }
  25. convenience init(fileUrl: URL, password: String?) {
  26. self.init()
  27. initSubviews()
  28. initDefaultValue()
  29. setFileUrl(fileUrl, password: password)
  30. }
  31. override func awakeFromNib() {
  32. super.awakeFromNib()
  33. initSubviews()
  34. initDefaultValue()
  35. }
  36. func initSubviews() {
  37. self.addSubview(self.contentBox_)
  38. self.contentBox_.contentView = self.pdfView
  39. }
  40. func initDefaultValue() {
  41. }
  42. func setFileUrl(_ fileUrl: URL, password: String?) {
  43. let document = CPDFDocument(url: fileUrl)
  44. let isLocked = document?.isLocked ?? false
  45. if isLocked {
  46. document?.unlock(withPassword: password ?? "")
  47. }
  48. pdfView.document = document
  49. }
  50. override func layout() {
  51. super.layout()
  52. let theFrame = self.bounds
  53. let contentX = self.contentInset.left
  54. let contentY = self.contentInset.top
  55. let contentW = NSWidth(theFrame)-contentX-self.contentInset.right
  56. let contentH = NSHeight(theFrame)-contentY-self.contentInset.bottom
  57. self.contentBox_.frame = NSMakeRect(contentX, contentY, contentW, contentH)
  58. }
  59. override func draw(_ dirtyRect: NSRect) {
  60. super.draw(dirtyRect)
  61. // Drawing code here.
  62. }
  63. }