diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 2215fc10..d3aeb531 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -3,8 +3,6 @@ name: Documentation on: release: types: [published] - push: - branches: [main] jobs: deploy_docs: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 33f2180b..9c2d3b02 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -30,7 +30,7 @@ jobs: xcodebuild -workspace . \ -scheme "TPPDF" \ -sdk iphonesimulator \ - -destination "OS=16.0,name=iPhone 14 Pro" \ + -destination "OS=16.2,name=iPhone 14 Pro" \ -configuration Debug \ -enableCodeCoverage YES \ -derivedDataPath /tmp/DerivedData \ diff --git a/Source/API/Delegation/PDFGeneratorDelegate.swift b/Source/API/Delegation/PDFGeneratorDelegate.swift new file mode 100644 index 00000000..92e203c4 --- /dev/null +++ b/Source/API/Delegation/PDFGeneratorDelegate.swift @@ -0,0 +1,9 @@ +// +// PDFGeneratorImageDelegate.swift +// TPPDF +// +// Created by Chris Gonzales on 10/10/20. +// + +/// Delegation protocol combining all delegates supported by the PDFGenerator +public typealias PDFGeneratorDelegate = PDFGeneratorImageDelegate diff --git a/Source/API/Delegation/PDFGeneratorImageDelegate.swift b/Source/API/Delegation/PDFGeneratorImageDelegate.swift new file mode 100644 index 00000000..b5ab8aa1 --- /dev/null +++ b/Source/API/Delegation/PDFGeneratorImageDelegate.swift @@ -0,0 +1,18 @@ +// +// PDFGeneratorImageDelegate.swift +// TPPDF +// +// Created by Chris Gonzales on 10/10/20. +// + +import CoreGraphics + +public protocol PDFGeneratorImageDelegate: AnyObject { + func generator(willBeginDrawingImage image: PDFImage, with context: PDFContext, in frame: CGRect) +} + +public extension PDFGeneratorImageDelegate { + + func generator(willBeginDrawingImage image: PDFImage, with context: PDFContext, in frame: CGRect){} + +} diff --git a/Source/API/PDFGenerator+Generation.swift b/Source/API/PDFGenerator+Generation.swift index da210b42..63c5195e 100644 --- a/Source/API/PDFGenerator+Generation.swift +++ b/Source/API/PDFGenerator+Generation.swift @@ -354,6 +354,9 @@ extension PDFGenerator { - throws: PDFError, if rendering fails */ internal func render(object: PDFRenderObject, in container: PDFContainer, in context: PDFContext) throws { + if let imageObject = object as? PDFImageObject { + delegate?.generator(willBeginDrawingImage: imageObject.image, with: context, in: object.frame) + } try object.draw(generator: self, container: container, in: context) } diff --git a/Source/API/PDFGenerator.swift b/Source/API/PDFGenerator.swift index cd032f56..f726a3d9 100644 --- a/Source/API/PDFGenerator.swift +++ b/Source/API/PDFGenerator.swift @@ -62,6 +62,9 @@ public class PDFGenerator: PDFGeneratorProtocol, CustomStringConvertible { Relative value tracking progress */ public let progress = Progress.discreteProgress(totalUnitCount: 3) + + /// Object acts as a delegate during the generation process + public var delegate: PDFGeneratorDelegate? /** Font of each container. diff --git a/Source/API/Text/PDFAttributedText.swift b/Source/API/Text/PDFAttributedText.swift index fede4dff..646c30f8 100644 --- a/Source/API/Text/PDFAttributedText.swift +++ b/Source/API/Text/PDFAttributedText.swift @@ -60,5 +60,9 @@ public class PDFAttributedText: PDFText { return true } - // MARK: - Hasha + // MARK: - Hashable + + public override func hash(into hasher: inout Hasher) { + hasher.combine(text) + } } diff --git a/Source/API/Text/PDFSimpleText.swift b/Source/API/Text/PDFSimpleText.swift index 2da2a9a4..6db54f1a 100644 --- a/Source/API/Text/PDFSimpleText.swift +++ b/Source/API/Text/PDFSimpleText.swift @@ -80,4 +80,9 @@ public class PDFSimpleText: PDFText { } // MARK: - Hashable + + override public func hash(into hasher: inout Hasher) { + hasher.combine(text) + hasher.combine(spacing) + } } diff --git a/Source/API/Text/PDFText.swift b/Source/API/Text/PDFText.swift index 7c0f0cea..29dbc083 100644 --- a/Source/API/Text/PDFText.swift +++ b/Source/API/Text/PDFText.swift @@ -8,7 +8,8 @@ /// Protocol all text objects should implement public class PDFText: PDFDocumentObject, CustomStringConvertible { - var copy: PDFText { + public var copy: PDFText { fatalError() } } + diff --git a/TPPDF.xcodeproj/project.pbxproj b/TPPDF.xcodeproj/project.pbxproj index 08498216..a140a4fe 100644 --- a/TPPDF.xcodeproj/project.pbxproj +++ b/TPPDF.xcodeproj/project.pbxproj @@ -32,6 +32,8 @@ D49B05E82658E76C0084A0B7 /* PDFDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = D49B05E62658E76C0084A0B7 /* PDFDocument.swift */; }; D49B05E92658E76C0084A0B7 /* PDFDocumentBackground.swift in Sources */ = {isa = PBXBuildFile; fileRef = D49B05E72658E76C0084A0B7 /* PDFDocumentBackground.swift */; }; D4B30533293CA38600EA24C5 /* PDFPageFormat+NameConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4B30532293CA38600EA24C5 /* PDFPageFormat+NameConstants.swift */; }; + D4E1FB2C294DE37800D654C7 /* PDFGeneratorImageDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4E1FB2A294DE37800D654C7 /* PDFGeneratorImageDelegate.swift */; }; + D4E1FB2D294DE37800D654C7 /* PDFGeneratorDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4E1FB2B294DE37800D654C7 /* PDFGeneratorDelegate.swift */; }; OBJ_415 /* CwlCatchException.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_356 /* CwlCatchException.swift */; }; OBJ_417 /* CwlCatchExceptionSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = "CwlCatchException::CwlCatchExceptionSupport::Product" /* CwlCatchExceptionSupport.framework */; }; OBJ_425 /* Package.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_362 /* Package.swift */; }; @@ -635,6 +637,8 @@ D49B05E62658E76C0084A0B7 /* PDFDocument.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PDFDocument.swift; sourceTree = ""; }; D49B05E72658E76C0084A0B7 /* PDFDocumentBackground.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PDFDocumentBackground.swift; sourceTree = ""; }; D4B30532293CA38600EA24C5 /* PDFPageFormat+NameConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "PDFPageFormat+NameConstants.swift"; sourceTree = ""; }; + D4E1FB2A294DE37800D654C7 /* PDFGeneratorImageDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PDFGeneratorImageDelegate.swift; sourceTree = ""; }; + D4E1FB2B294DE37800D654C7 /* PDFGeneratorDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PDFGeneratorDelegate.swift; sourceTree = ""; }; "Nimble::Nimble::Product" /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; OBJ_10 /* PDFExternalDocument.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PDFExternalDocument.swift; sourceTree = ""; }; OBJ_101 /* PDFContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PDFContext.swift; sourceTree = ""; }; @@ -1111,6 +1115,15 @@ path = Document; sourceTree = ""; }; + D4E1FB29294DE37800D654C7 /* Delegation */ = { + isa = PBXGroup; + children = ( + D4E1FB2A294DE37800D654C7 /* PDFGeneratorImageDelegate.swift */, + D4E1FB2B294DE37800D654C7 /* PDFGeneratorDelegate.swift */, + ); + path = Delegation; + sourceTree = ""; + }; OBJ_100 /* Graphics */ = { isa = PBXGroup; children = ( @@ -1987,6 +2000,7 @@ OBJ_38 /* PDFGenerator+Generation.swift */, OBJ_40 /* PDFGeneratorProtocol.swift */, OBJ_41 /* PDFMultiDocumentGenerator.swift */, + D4E1FB29294DE37800D654C7 /* Delegation */, D49B05E52658E76C0084A0B7 /* Document */, OBJ_9 /* External */, OBJ_11 /* Graphics */, @@ -2651,6 +2665,7 @@ OBJ_659 /* CrossPlattformGraphics.swift in Sources */, OBJ_660 /* PDFConstants.swift in Sources */, OBJ_661 /* PDFCopy.swift in Sources */, + D4E1FB2D294DE37800D654C7 /* PDFGeneratorDelegate.swift in Sources */, OBJ_662 /* PDFDocumentObject.swift in Sources */, OBJ_663 /* PDFError.swift in Sources */, OBJ_664 /* PDFRenderObject.swift in Sources */, @@ -2686,6 +2701,7 @@ OBJ_694 /* PDFPageBreakObject.swift in Sources */, OBJ_695 /* PDFPageLayout+Equatable.swift in Sources */, OBJ_696 /* PDFSectionColumnContainer.swift in Sources */, + D4E1FB2C294DE37800D654C7 /* PDFGeneratorImageDelegate.swift in Sources */, OBJ_697 /* PDFSpaceObject.swift in Sources */, OBJ_698 /* PDFListObject.swift in Sources */, OBJ_699 /* CGPoint+Math.swift in Sources */,