Browse Source

PDFTools(iOS) - Link注释以及语音、注释列表UI补充

dinglingui 1 year ago
parent
commit
85c2a6af7f
78 changed files with 5016 additions and 79 deletions
  1. 9 10
      Annotation-Ctrl-Demo/Annotation-Ctrl-Demo.xcodeproj/project.pbxproj
  2. 18 7
      Annotation-Ctrl-Demo/Annotation-Ctrl-Demo/CPDFViewController.m
  3. 0 0
      Annotation-Ctrl-Demo/Annotation-Ctrl-Demo/PDFSound/CPDFMediaManager.h
  4. 0 0
      Annotation-Ctrl-Demo/Annotation-Ctrl-Demo/PDFSound/CPDFMediaManager.m
  5. 74 19
      compdfkit-tools/compdfkit-tools.xcodeproj/project.pbxproj
  6. 44 0
      compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFLink/CPDFLinkViewController.h
  7. 401 0
      compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFLink/CPDFLinkViewController.m
  8. 50 0
      compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/CPDFSoundPlayBar.h
  9. 270 0
      compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/CPDFSoundPlayBar.m
  10. 12 0
      compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/CPDFSoundImageNameClose.imageset/Contents.json
  11. 87 0
      compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/CPDFSoundImageNameClose.imageset/close.pdf
  12. 12 0
      compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/CPDFSoundImageNamePlay.imageset/Contents.json
  13. 85 0
      compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/CPDFSoundImageNamePlay.imageset/record.pdf
  14. 12 0
      compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/CPDFSoundImageNameRec.imageset/Contents.json
  15. 83 0
      compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/CPDFSoundImageNameRec.imageset/record-3.pdf
  16. 12 0
      compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/CPDFSoundImageNameStop.imageset/Contents.json
  17. 73 0
      compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/CPDFSoundImageNameStop.imageset/record.pdf
  18. 12 0
      compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/CPDFSoundImageNameSure.imageset/Contents.json
  19. 83 0
      compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/CPDFSoundImageNameSure.imageset/right.pdf
  20. 6 0
      compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/Contents.json
  21. 9 0
      compdfkit-tools/compdfkit-tools/Common/Controls/BOTA/CPDFBOTAViewController.h
  22. 78 28
      compdfkit-tools/compdfkit-tools/Common/Controls/BOTA/CPDFBOTAViewController.m
  23. 2 0
      compdfkit-tools/compdfkit-tools/Common/Utils/CPDFColorUtils.h
  24. 8 0
      compdfkit-tools/compdfkit-tools/Common/Utils/CPDFColorUtils.m
  25. 38 0
      compdfkit-tools/compdfkit-tools/Common/Utils/UtilsColor.xcassets/CViewBackgroundColor.colorset/Contents.json
  26. 38 1
      compdfkit-tools/compdfkit-tools/Common/Views/PDFAnnotationBar/CPDFAnnotationBar.m
  27. 5 5
      compdfkit-tools/compdfkit-tools/Common/Views/PDFView/PDFListView/CPDFListView+Annotation.m
  28. 6 9
      compdfkit-tools/compdfkit-tools/Common/Views/PDFView/PDFListView/CPDFListView.m
  29. 24 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/CAnnotListHeaderInSection.h
  30. 117 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/CAnnotListHeaderInSection.m
  31. 34 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/CPDFAnnotationListCell.h
  32. 283 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/CPDFAnnotationListCell.m
  33. 37 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/CPDFAnnotationViewController.h
  34. 295 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/CPDFAnnotationViewController.m
  35. 33 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/CPDFAnnotionColorDrawView.h
  36. 58 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/CPDFAnnotionColorDrawView.m
  37. 22 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationFreehand.imageset/Contents.json
  38. 78 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationFreehand.imageset/ic 1.pdf
  39. 78 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationFreehand.imageset/ic.pdf
  40. 12 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationHighlight.imageset/Contents.json
  41. 88 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationHighlight.imageset/ic.pdf
  42. 22 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationNote.imageset/Contents.json
  43. 86 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationNote.imageset/note 1.pdf
  44. 86 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationNote.imageset/note.pdf
  45. 22 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationPhoto.imageset/Contents.json
  46. 87 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationPhoto.imageset/nor 1.pdf
  47. 87 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationPhoto.imageset/nor.pdf
  48. 22 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationRecord.imageset/Contents.json
  49. 109 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationRecord.imageset/music 1.pdf
  50. 109 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationRecord.imageset/music.pdf
  51. 22 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeArrow.imageset/Contents.json
  52. 76 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeArrow.imageset/arrow 1.pdf
  53. 76 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeArrow.imageset/arrow.pdf
  54. 22 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeCircle.imageset/Contents.json
  55. 77 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeCircle.imageset/oval 1.pdf
  56. 77 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeCircle.imageset/oval.pdf
  57. 22 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeLine.imageset/Contents.json
  58. 71 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeLine.imageset/line 1.pdf
  59. 71 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeLine.imageset/line.pdf
  60. 22 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeRectangle.imageset/Contents.json
  61. 77 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeRectangle.imageset/rec 1.pdf
  62. 77 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeRectangle.imageset/rec.pdf
  63. 22 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationSign.imageset/Contents.json
  64. 108 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationSign.imageset/nor 1.pdf
  65. 108 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationSign.imageset/nor.pdf
  66. 22 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationStamp.imageset/Contents.json
  67. 86 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationStamp.imageset/nor 1.pdf
  68. 86 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationStamp.imageset/nor.pdf
  69. 22 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationStrikethrough.imageset/Contents.json
  70. 82 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationStrikethrough.imageset/ic 1.pdf
  71. 82 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationStrikethrough.imageset/ic.pdf
  72. 22 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationText.imageset/Contents.json
  73. 83 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationText.imageset/text 1.pdf
  74. 83 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationText.imageset/text.pdf
  75. 22 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationUnderline.imageset/Contents.json
  76. 88 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationUnderline.imageset/ic 1.pdf
  77. 88 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationUnderline.imageset/ic.pdf
  78. 6 0
      compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/Contents.json

+ 9 - 10
Annotation-Ctrl-Demo/Annotation-Ctrl-Demo.xcodeproj/project.pbxproj

@@ -22,9 +22,9 @@
 		C9AF187C29F26ADF00EC4979 /* Form_Widgets_Test.pdf in Resources */ = {isa = PBXBuildFile; fileRef = C9AF187829F26ADF00EC4979 /* Form_Widgets_Test.pdf */; };
 		C9AF187D29F26ADF00EC4979 /* PDF32000_2008.pdf in Resources */ = {isa = PBXBuildFile; fileRef = C9AF187929F26ADF00EC4979 /* PDF32000_2008.pdf */; };
 		C9AF187F29F26ADF00EC4979 /* Quick Start Guide.pdf in Resources */ = {isa = PBXBuildFile; fileRef = C9AF187B29F26ADF00EC4979 /* Quick Start Guide.pdf */; };
+		F32054C22A0F80B6006B41F7 /* CPDFMediaManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F32054C12A0F80B6006B41F7 /* CPDFMediaManager.m */; };
 		F32776912A04A6D900C5F0A6 /* ComPDFKit.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = C918CEBB29F904E400D43974 /* ComPDFKit.xcframework */; };
 		F32776922A04A6D900C5F0A6 /* ComPDFKit.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C918CEBB29F904E400D43974 /* ComPDFKit.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		F350B3502A09EFF500B4FC8F /* CPDFMediaManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F350B34F2A09EFF500B4FC8F /* CPDFMediaManager.m */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXCopyFilesBuildPhase section */
@@ -65,8 +65,8 @@
 		C9AF187829F26ADF00EC4979 /* Form_Widgets_Test.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = Form_Widgets_Test.pdf; sourceTree = "<group>"; };
 		C9AF187929F26ADF00EC4979 /* PDF32000_2008.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = PDF32000_2008.pdf; sourceTree = "<group>"; };
 		C9AF187B29F26ADF00EC4979 /* Quick Start Guide.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "Quick Start Guide.pdf"; sourceTree = "<group>"; };
-		F350B34D2A09EFF500B4FC8F /* CPDFMediaManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPDFMediaManager.h; sourceTree = "<group>"; };
-		F350B34F2A09EFF500B4FC8F /* CPDFMediaManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPDFMediaManager.m; sourceTree = "<group>"; };
+		F32054C02A0F80B6006B41F7 /* CPDFMediaManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPDFMediaManager.h; sourceTree = "<group>"; };
+		F32054C12A0F80B6006B41F7 /* CPDFMediaManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPDFMediaManager.m; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -113,13 +113,13 @@
 		C9AF184E29F267DD00EC4979 /* Annotation-Ctrl-Demo */ = {
 			isa = PBXGroup;
 			children = (
+				F32054BF2A0F80B6006B41F7 /* PDFSound */,
 				C9AF184F29F267DD00EC4979 /* AppDelegate.h */,
 				C9AF185029F267DD00EC4979 /* AppDelegate.m */,
 				C9AF185229F267DD00EC4979 /* SceneDelegate.h */,
 				C9AF185329F267DD00EC4979 /* SceneDelegate.m */,
 				4F06AB5B29F6852C007797E4 /* CPDFViewController.h */,
 				4F06AB5C29F6852C007797E4 /* CPDFViewController.m */,
-				F350B34C2A09EFF500B4FC8F /* PDFSound */,
 				C9AF185829F267DD00EC4979 /* Main.storyboard */,
 				C9AF185B29F267E000EC4979 /* Assets.xcassets */,
 				C9AF185D29F267E000EC4979 /* LaunchScreen.storyboard */,
@@ -153,14 +153,13 @@
 			path = ../TestFile;
 			sourceTree = "<group>";
 		};
-		F350B34C2A09EFF500B4FC8F /* PDFSound */ = {
+		F32054BF2A0F80B6006B41F7 /* PDFSound */ = {
 			isa = PBXGroup;
 			children = (
-				F350B34D2A09EFF500B4FC8F /* CPDFMediaManager.h */,
-				F350B34F2A09EFF500B4FC8F /* CPDFMediaManager.m */,
+				F32054C02A0F80B6006B41F7 /* CPDFMediaManager.h */,
+				F32054C12A0F80B6006B41F7 /* CPDFMediaManager.m */,
 			);
-			name = PDFSound;
-			path = "../../compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound";
+			path = PDFSound;
 			sourceTree = "<group>";
 		};
 /* End PBXGroup section */
@@ -243,7 +242,7 @@
 				C9AF185129F267DD00EC4979 /* AppDelegate.m in Sources */,
 				C9AF187629F26AD200EC4979 /* XMLParseManager.m in Sources */,
 				C9AF186229F267E000EC4979 /* main.m in Sources */,
-				F350B3502A09EFF500B4FC8F /* CPDFMediaManager.m in Sources */,
+				F32054C22A0F80B6006B41F7 /* CPDFMediaManager.m in Sources */,
 				C9AF185429F267DD00EC4979 /* SceneDelegate.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;

+ 18 - 7
Annotation-Ctrl-Demo/Annotation-Ctrl-Demo/CPDFViewController.m

@@ -182,10 +182,17 @@
     self.navigationItem.rightBarButtonItem = nil;
 }
 
-- (void)navigationRightItemBota {
-    CPDFBOTAViewController *botaViewController = [[CPDFBOTAViewController alloc] initWithPDFView:self.pdfListView];
+- (void)navigationRightItemBota{
+    CPDFBOTAViewController *botaViewController = [[CPDFBOTAViewController alloc] initCustomizeWithPDFView:self.pdfListView navArrays:@[@(CPDFBOTATypeStateOutline),@(CPDFBOTATypeStateBookmark),@(CPDFBOTATypeStateAnnotation)]];
     botaViewController.delegate = self;
-    [self.navigationController pushViewController:botaViewController animated:NO];
+    
+    AAPLCustomPresentationController *presentationController NS_VALID_UNTIL_END_OF_SCOPE;
+   
+    presentationController = [[AAPLCustomPresentationController alloc] initWithPresentedViewController:botaViewController presentingViewController:self];
+    botaViewController.transitioningDelegate = presentationController;
+    
+    [self presentViewController:botaViewController animated:YES completion:nil];
+    
 }
 
 - (void)navigationRightItemMore {
@@ -252,10 +259,14 @@
 }
 
 - (void)PDFListViewEditNote:(CPDFListView *)pdfListView forAnnotation:(CPDFAnnotation *)annotation {
-    CGRect rect = [self.pdfListView convertRect:annotation.bounds fromPage:annotation.page];
-    CPDFNoteOpenViewController *noteVC = [[CPDFNoteOpenViewController alloc]initWithAnnotation:annotation];
-    noteVC.delegate = self;
-    [noteVC showViewController:self inRect:rect];
+    if([annotation isKindOfClass:[CPDFLinkAnnotation class]]) {
+        [self.annotationBar buttonItemClicked_open:annotation];
+    } else {
+        CGRect rect = [self.pdfListView convertRect:annotation.bounds fromPage:annotation.page];
+        CPDFNoteOpenViewController *noteVC = [[CPDFNoteOpenViewController alloc]initWithAnnotation:annotation];
+        noteVC.delegate = self;
+        [noteVC showViewController:self inRect:rect];
+    }
 }
 
 - (void)PDFListViewChangedAnnotationType:(CPDFListView *)pdfListView forAnnotationMode:(CPDFViewAnnotationMode)annotationMode {

compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/CPDFMediaManager.h → Annotation-Ctrl-Demo/Annotation-Ctrl-Demo/PDFSound/CPDFMediaManager.h


compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/CPDFMediaManager.m → Annotation-Ctrl-Demo/Annotation-Ctrl-Demo/PDFSound/CPDFMediaManager.m


+ 74 - 19
compdfkit-tools/compdfkit-tools.xcodeproj/project.pbxproj

@@ -139,6 +139,13 @@
 		C9FBA2352A11BEFB003FABEC /* CStampColorSelectView.m in Sources */ = {isa = PBXBuildFile; fileRef = C9FBA2332A11BEFB003FABEC /* CStampColorSelectView.m */; };
 		C9FBA2362A11CF99003FABEC /* Image.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C9FBA2182A0DD277003FABEC /* Image.xcassets */; };
 		F32054B52A0F2A7A006B41F7 /* NavigationRightImage.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F32054B42A0F2A7A006B41F7 /* NavigationRightImage.xcassets */; };
+		F32054B92A0F67BA006B41F7 /* CPDFLinkViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F32054B72A0F67BA006B41F7 /* CPDFLinkViewController.h */; };
+		F32054BA2A0F67BA006B41F7 /* CPDFLinkViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F32054B82A0F67BA006B41F7 /* CPDFLinkViewController.m */; };
+		F32054C92A0F819F006B41F7 /* CPDFSoundPlayBar.h in Headers */ = {isa = PBXBuildFile; fileRef = F32054C72A0F819F006B41F7 /* CPDFSoundPlayBar.h */; };
+		F32054CA2A0F819F006B41F7 /* CPDFSoundPlayBar.m in Sources */ = {isa = PBXBuildFile; fileRef = F32054C82A0F819F006B41F7 /* CPDFSoundPlayBar.m */; };
+		F32054CC2A0F857E006B41F7 /* Image.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F32054CB2A0F857E006B41F7 /* Image.xcassets */; };
+		F32626342A1327CC000E7157 /* CPDFAnnotationViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F32626322A1327CC000E7157 /* CPDFAnnotationViewController.h */; };
+		F32626352A1327CC000E7157 /* CPDFAnnotationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F32626332A1327CC000E7157 /* CPDFAnnotationViewController.m */; };
 		F32DA16229ED904300E19ECA /* CPDFOutlineModel.h in Headers */ = {isa = PBXBuildFile; fileRef = F32DA12229ED904300E19ECA /* CPDFOutlineModel.h */; };
 		F32DA16329ED904300E19ECA /* Image.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F32DA12329ED904300E19ECA /* Image.xcassets */; };
 		F32DA16429ED904300E19ECA /* CPDFOutlineViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F32DA12429ED904300E19ECA /* CPDFOutlineViewCell.m */; };
@@ -178,8 +185,6 @@
 		F32DA19129ED908800E19ECA /* CPDFMoreListViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F32DA18F29ED908800E19ECA /* CPDFMoreListViewController.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		F32DA19229ED908800E19ECA /* CPDFMoreListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F32DA19029ED908800E19ECA /* CPDFMoreListViewController.m */; };
 		F335EE4B29E430C800ACC72A /* compdfkit_tools.h in Headers */ = {isa = PBXBuildFile; fileRef = F335EE4A29E430C800ACC72A /* compdfkit_tools.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		F350B34A2A09EAF100B4FC8F /* CPDFMediaManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F350B3482A09EAF100B4FC8F /* CPDFMediaManager.m */; };
-		F350B34B2A09EAF100B4FC8F /* CPDFMediaManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F350B3492A09EAF100B4FC8F /* CPDFMediaManager.h */; };
 		F35DD18A2A067E7500B57F5B /* CPDFListView+UndoManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F35DD1882A067E7500B57F5B /* CPDFListView+UndoManager.h */; };
 		F35DD18B2A067E7500B57F5B /* CPDFListView+UndoManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F35DD1892A067E7500B57F5B /* CPDFListView+UndoManager.m */; };
 		F35DD1982A06850700B57F5B /* CPDFFreeTextAnnotation+PDFListView.m in Sources */ = {isa = PBXBuildFile; fileRef = F35DD18D2A06850700B57F5B /* CPDFFreeTextAnnotation+PDFListView.m */; };
@@ -193,6 +198,13 @@
 		F35DD1A02A06850700B57F5B /* CPDFAnnotation+PDFListView.m in Sources */ = {isa = PBXBuildFile; fileRef = F35DD1952A06850700B57F5B /* CPDFAnnotation+PDFListView.m */; };
 		F35DD1A12A06850700B57F5B /* CPDFSquareAnnotation+PDFListView.m in Sources */ = {isa = PBXBuildFile; fileRef = F35DD1962A06850700B57F5B /* CPDFSquareAnnotation+PDFListView.m */; };
 		F35DD1A22A06850700B57F5B /* CPDFLineAnnotation+PDFListView.m in Sources */ = {isa = PBXBuildFile; fileRef = F35DD1972A06850700B57F5B /* CPDFLineAnnotation+PDFListView.m */; };
+		F377CB3A2A1331A600C543BD /* CPDFAnnotationListCell.h in Headers */ = {isa = PBXBuildFile; fileRef = F377CB382A1331A600C543BD /* CPDFAnnotationListCell.h */; };
+		F377CB3B2A1331A600C543BD /* CPDFAnnotationListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F377CB392A1331A600C543BD /* CPDFAnnotationListCell.m */; };
+		F377CB3E2A134D7E00C543BD /* CAnnotListHeaderInSection.h in Headers */ = {isa = PBXBuildFile; fileRef = F377CB3C2A134D7E00C543BD /* CAnnotListHeaderInSection.h */; };
+		F377CB3F2A134D7E00C543BD /* CAnnotListHeaderInSection.m in Sources */ = {isa = PBXBuildFile; fileRef = F377CB3D2A134D7E00C543BD /* CAnnotListHeaderInSection.m */; };
+		F377CB422A135BAF00C543BD /* CPDFAnnotionColorDrawView.h in Headers */ = {isa = PBXBuildFile; fileRef = F377CB402A135BAF00C543BD /* CPDFAnnotionColorDrawView.h */; };
+		F377CB432A135BAF00C543BD /* CPDFAnnotionColorDrawView.m in Sources */ = {isa = PBXBuildFile; fileRef = F377CB412A135BAF00C543BD /* CPDFAnnotionColorDrawView.m */; };
+		F377CB452A135F3600C543BD /* Image.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F377CB442A135F3600C543BD /* Image.xcassets */; };
 		F382636829EFD0D9003F1DFD /* CPDFPageIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = F382635F29EFD0D8003F1DFD /* CPDFPageIndicatorView.h */; };
 		F382636929EFD0D9003F1DFD /* CPDFPageIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = F382636029EFD0D8003F1DFD /* CPDFPageIndicatorView.m */; };
 		F382636A29EFD0D9003F1DFD /* CPDFSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = F382636229EFD0D8003F1DFD /* CPDFSlider.m */; };
@@ -366,6 +378,13 @@
 		C9FBA2332A11BEFB003FABEC /* CStampColorSelectView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CStampColorSelectView.m; sourceTree = "<group>"; };
 		F313657129E4367A00EE6BBB /* ComPDFKit.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = ComPDFKit.xcframework; path = ../Lib/ComPDFKit.xcframework; sourceTree = "<group>"; };
 		F32054B42A0F2A7A006B41F7 /* NavigationRightImage.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = NavigationRightImage.xcassets; sourceTree = "<group>"; };
+		F32054B72A0F67BA006B41F7 /* CPDFLinkViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CPDFLinkViewController.h; sourceTree = "<group>"; };
+		F32054B82A0F67BA006B41F7 /* CPDFLinkViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CPDFLinkViewController.m; sourceTree = "<group>"; };
+		F32054C72A0F819F006B41F7 /* CPDFSoundPlayBar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CPDFSoundPlayBar.h; sourceTree = "<group>"; };
+		F32054C82A0F819F006B41F7 /* CPDFSoundPlayBar.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CPDFSoundPlayBar.m; sourceTree = "<group>"; };
+		F32054CB2A0F857E006B41F7 /* Image.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Image.xcassets; sourceTree = "<group>"; };
+		F32626322A1327CC000E7157 /* CPDFAnnotationViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CPDFAnnotationViewController.h; sourceTree = "<group>"; };
+		F32626332A1327CC000E7157 /* CPDFAnnotationViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CPDFAnnotationViewController.m; sourceTree = "<group>"; };
 		F32DA12229ED904300E19ECA /* CPDFOutlineModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPDFOutlineModel.h; sourceTree = "<group>"; };
 		F32DA12329ED904300E19ECA /* Image.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Image.xcassets; sourceTree = "<group>"; };
 		F32DA12429ED904300E19ECA /* CPDFOutlineViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPDFOutlineViewCell.m; sourceTree = "<group>"; };
@@ -407,8 +426,6 @@
 		F32DA19029ED908800E19ECA /* CPDFMoreListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPDFMoreListViewController.m; sourceTree = "<group>"; };
 		F335EE4729E430C800ACC72A /* compdfkit_tools.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = compdfkit_tools.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		F335EE4A29E430C800ACC72A /* compdfkit_tools.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = compdfkit_tools.h; sourceTree = "<group>"; };
-		F350B3482A09EAF100B4FC8F /* CPDFMediaManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPDFMediaManager.m; sourceTree = "<group>"; };
-		F350B3492A09EAF100B4FC8F /* CPDFMediaManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPDFMediaManager.h; sourceTree = "<group>"; };
 		F35DD1882A067E7500B57F5B /* CPDFListView+UndoManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CPDFListView+UndoManager.h"; sourceTree = "<group>"; };
 		F35DD1892A067E7500B57F5B /* CPDFListView+UndoManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "CPDFListView+UndoManager.m"; sourceTree = "<group>"; };
 		F35DD18D2A06850700B57F5B /* CPDFFreeTextAnnotation+PDFListView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CPDFFreeTextAnnotation+PDFListView.m"; sourceTree = "<group>"; };
@@ -422,6 +439,13 @@
 		F35DD1952A06850700B57F5B /* CPDFAnnotation+PDFListView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CPDFAnnotation+PDFListView.m"; sourceTree = "<group>"; };
 		F35DD1962A06850700B57F5B /* CPDFSquareAnnotation+PDFListView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CPDFSquareAnnotation+PDFListView.m"; sourceTree = "<group>"; };
 		F35DD1972A06850700B57F5B /* CPDFLineAnnotation+PDFListView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CPDFLineAnnotation+PDFListView.m"; sourceTree = "<group>"; };
+		F377CB382A1331A600C543BD /* CPDFAnnotationListCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CPDFAnnotationListCell.h; sourceTree = "<group>"; };
+		F377CB392A1331A600C543BD /* CPDFAnnotationListCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CPDFAnnotationListCell.m; sourceTree = "<group>"; };
+		F377CB3C2A134D7E00C543BD /* CAnnotListHeaderInSection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CAnnotListHeaderInSection.h; sourceTree = "<group>"; };
+		F377CB3D2A134D7E00C543BD /* CAnnotListHeaderInSection.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CAnnotListHeaderInSection.m; sourceTree = "<group>"; };
+		F377CB402A135BAF00C543BD /* CPDFAnnotionColorDrawView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CPDFAnnotionColorDrawView.h; sourceTree = "<group>"; };
+		F377CB412A135BAF00C543BD /* CPDFAnnotionColorDrawView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CPDFAnnotionColorDrawView.m; sourceTree = "<group>"; };
+		F377CB442A135F3600C543BD /* Image.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Image.xcassets; sourceTree = "<group>"; };
 		F382635F29EFD0D8003F1DFD /* CPDFPageIndicatorView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPDFPageIndicatorView.h; sourceTree = "<group>"; };
 		F382636029EFD0D8003F1DFD /* CPDFPageIndicatorView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPDFPageIndicatorView.m; sourceTree = "<group>"; };
 		F382636229EFD0D8003F1DFD /* CPDFSlider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CPDFSlider.m; sourceTree = "<group>"; };
@@ -699,24 +723,17 @@
 		C9AF188829F4C65500EC4979 /* Annotation */ = {
 			isa = PBXGroup;
 			children = (
-				F350B3462A09EAAC00B4FC8F /* PDFSound */,
 				C918CE8F29F7C3FA00D43974 /* PDFAnnotationManage */,
 				C9AF188A29F4C7C900EC4979 /* PDFProperties */,
-				C9AF188929F4C68200EC4979 /* PDFAnnotationList */,
 			);
 			path = Annotation;
 			sourceTree = "<group>";
 		};
-		C9AF188929F4C68200EC4979 /* PDFAnnotationList */ = {
-			isa = PBXGroup;
-			children = (
-			);
-			path = PDFAnnotationList;
-			sourceTree = "<group>";
-		};
 		C9AF188A29F4C7C900EC4979 /* PDFProperties */ = {
 			isa = PBXGroup;
 			children = (
+				F350B3462A09EAAC00B4FC8F /* PDFSound */,
+				F32054B62A0F6751006B41F7 /* PDFLink */,
 				C9FBA20B2A0D10C3003FABEC /* PDFStamp */,
 				F350B3472A09EAD400B4FC8F /* PDFSound */,
 				C91BE7D12A0399F40038F2BC /* PDFSignature */,
@@ -818,9 +835,35 @@
 			name = Frameworks;
 			sourceTree = "<group>";
 		};
+		F32054B62A0F6751006B41F7 /* PDFLink */ = {
+			isa = PBXGroup;
+			children = (
+				F32054B72A0F67BA006B41F7 /* CPDFLinkViewController.h */,
+				F32054B82A0F67BA006B41F7 /* CPDFLinkViewController.m */,
+			);
+			path = PDFLink;
+			sourceTree = "<group>";
+		};
+		F32626312A132793000E7157 /* PDFAnnotation */ = {
+			isa = PBXGroup;
+			children = (
+				F377CB382A1331A600C543BD /* CPDFAnnotationListCell.h */,
+				F377CB392A1331A600C543BD /* CPDFAnnotationListCell.m */,
+				F377CB3C2A134D7E00C543BD /* CAnnotListHeaderInSection.h */,
+				F377CB3D2A134D7E00C543BD /* CAnnotListHeaderInSection.m */,
+				F32626322A1327CC000E7157 /* CPDFAnnotationViewController.h */,
+				F32626332A1327CC000E7157 /* CPDFAnnotationViewController.m */,
+				F377CB402A135BAF00C543BD /* CPDFAnnotionColorDrawView.h */,
+				F377CB412A135BAF00C543BD /* CPDFAnnotionColorDrawView.m */,
+				F377CB442A135F3600C543BD /* Image.xcassets */,
+			);
+			path = PDFAnnotation;
+			sourceTree = "<group>";
+		};
 		F32DA12029ED904300E19ECA /* Viewer */ = {
 			isa = PBXGroup;
 			children = (
+				F32626312A132793000E7157 /* PDFAnnotation */,
 				C9AF182929EF9D2400EC4979 /* PDFBookmark */,
 				F32DA12129ED904300E19ECA /* PDFOutlie */,
 				F32DA12929ED904300E19ECA /* PDFSearch */,
@@ -1040,16 +1083,16 @@
 		F350B3462A09EAAC00B4FC8F /* PDFSound */ = {
 			isa = PBXGroup;
 			children = (
+				F32054C72A0F819F006B41F7 /* CPDFSoundPlayBar.h */,
+				F32054C82A0F819F006B41F7 /* CPDFSoundPlayBar.m */,
+				F32054CB2A0F857E006B41F7 /* Image.xcassets */,
 			);
-			name = PDFSound;
-			path = PDFProperties/PDFSound;
+			path = PDFSound;
 			sourceTree = "<group>";
 		};
 		F350B3472A09EAD400B4FC8F /* PDFSound */ = {
 			isa = PBXGroup;
 			children = (
-				F350B3492A09EAF100B4FC8F /* CPDFMediaManager.h */,
-				F350B3482A09EAF100B4FC8F /* CPDFMediaManager.m */,
 			);
 			path = PDFSound;
 			sourceTree = "<group>";
@@ -1142,9 +1185,9 @@
 				F32DA16A29ED904300E19ECA /* CPDFSearchViewCell.h in Headers */,
 				4F5986912A03411700F06A1B /* CPDFDropDownMenu.h in Headers */,
 				F32DA18529ED904300E19ECA /* CActivityIndicatorView.h in Headers */,
-				F350B34B2A09EAF100B4FC8F /* CPDFMediaManager.h in Headers */,
 				C9FBA21C2A0E2FB6003FABEC /* CStampButton.h in Headers */,
 				4F06AB5529F6792E007797E4 /* CPDFEditToolBar.h in Headers */,
+				F377CB3A2A1331A600C543BD /* CPDFAnnotationListCell.h in Headers */,
 				F32DA17E29ED904300E19ECA /* CPDFBOTAViewController.h in Headers */,
 				F32DA16829ED904300E19ECA /* CPDFOutlineViewCell.h in Headers */,
 				F35DD19B2A06850700B57F5B /* CPDFAnnotation+PDFListView.h in Headers */,
@@ -1168,6 +1211,7 @@
 				C918CEA529F8FC1800D43974 /* CPDFUnderlineViewController.h in Headers */,
 				C91BE7E22A048F1A0038F2BC /* CSignatureManager.h in Headers */,
 				F35DD19F2A06850700B57F5B /* CPDFCircleAnnotation+PDFListView.h in Headers */,
+				F32054C92A0F819F006B41F7 /* CPDFSoundPlayBar.h in Headers */,
 				C91BE7D82A039D2A0038F2BC /* CPDFSignatureViewCell.h in Headers */,
 				C918CECE29FA43B800D43974 /* CPDFShapeCircleViewController.h in Headers */,
 				C9AF184129F22BBD00EC4979 /* CPDFAnnotationBarButton.h in Headers */,
@@ -1186,6 +1230,7 @@
 				F35DD19C2A06850700B57F5B /* CPDFAnnotationHeader.h in Headers */,
 				C9AF183B29F2198700EC4979 /* CPDFAnnotationBar.h in Headers */,
 				C918CED429FA972300D43974 /* CPDFShapeArrowViewController.h in Headers */,
+				F377CB3E2A134D7E00C543BD /* CAnnotListHeaderInSection.h in Headers */,
 				F35DD19A2A06850700B57F5B /* CPDFSquareAnnotation+PDFListView.h in Headers */,
 				F38F5B602A0344EA00D0EEFD /* CPDFListView+Annotation.h in Headers */,
 				F32DA17929ED904300E19ECA /* CPDFDisplayViewController.h in Headers */,
@@ -1207,6 +1252,9 @@
 				C9FBA20E2A0D1119003FABEC /* CPDFStampViewController.h in Headers */,
 				C9AF189B29F4DBF800EC4979 /* CPDFOpacitySliderView.h in Headers */,
 				C918CE9229F7C3FB00D43974 /* CAnnotationManage.h in Headers */,
+				F32626342A1327CC000E7157 /* CPDFAnnotationViewController.h in Headers */,
+				F32054B92A0F67BA006B41F7 /* CPDFLinkViewController.h in Headers */,
+				F377CB422A135BAF00C543BD /* CPDFAnnotionColorDrawView.h in Headers */,
 				4F1131B429F90E7200950564 /* CPDFImagePropertyCell.h in Headers */,
 				C91BE7EE2A04AED50038F2BC /* CSignatureDrawView.h in Headers */,
 				C918CEDF29FB943400D43974 /* CPDFArrowStyleCell.h in Headers */,
@@ -1304,10 +1352,12 @@
 				C9AF182629EE8AB600EC4979 /* UtilsColor.xcassets in Resources */,
 				F32054B52A0F2A7A006B41F7 /* NavigationRightImage.xcassets in Resources */,
 				4F1131BE29F9232300950564 /* CPDFEditImageAssets.xcassets in Resources */,
+				F377CB452A135F3600C543BD /* Image.xcassets in Resources */,
 				C918CED829FB5ADF00D43974 /* Image.xcassets in Resources */,
 				F382636C29EFD0D9003F1DFD /* CPDFSliderImage.xcassets in Resources */,
 				F3DF83E12A0D0E9200D4F3AF /* Image.xcassets in Resources */,
 				C9FBA2362A11CF99003FABEC /* Image.xcassets in Resources */,
+				F32054CC2A0F857E006B41F7 /* Image.xcassets in Resources */,
 				C91BE7DF2A03CF080038F2BC /* Image.xcassets in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -1320,6 +1370,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				F3DF83DE2A0C78B000D4F3AF /* CPDFListViewAnnotationConfig.m in Sources */,
+				F377CB432A135BAF00C543BD /* CPDFAnnotionColorDrawView.m in Sources */,
 				F32DA17B29ED904300E19ECA /* CPDFDisplayViewController.m in Sources */,
 				4FF3E1D12A064A8200C14F91 /* CPDFListView+Edit.m in Sources */,
 				C91BE7CA2A0347770038F2BC /* CPDFFontStyleTableView.m in Sources */,
@@ -1329,7 +1380,6 @@
 				C9B9EC5029F52DCC00C6A5D2 /* AAPLCustomPresentationController.m in Sources */,
 				4F1131BB29F911A800950564 /* CPDFTextPropertyCell.m in Sources */,
 				F35DD1A02A06850700B57F5B /* CPDFAnnotation+PDFListView.m in Sources */,
-				F350B34A2A09EAF100B4FC8F /* CPDFMediaManager.m in Sources */,
 				C9FBA2172A0D11C7003FABEC /* CStampFileManger.m in Sources */,
 				F32DA17F29ED904300E19ECA /* CNavigationController.m in Sources */,
 				F382636D29EFD0D9003F1DFD /* CPDFListView.m in Sources */,
@@ -1341,12 +1391,14 @@
 				C9B9EC4B29F4DC8900C6A5D2 /* CPDFThicknessSliderView.m in Sources */,
 				C9B9EC5A29F54E9600C6A5D2 /* CAnnotStyle.m in Sources */,
 				C918CEA629F8FC1800D43974 /* CPDFUnderlineViewController.m in Sources */,
+				F32054BA2A0F67BA006B41F7 /* CPDFLinkViewController.m in Sources */,
 				C918CEE429FBA41A00D43974 /* CPDFDrawArrowView.m in Sources */,
 				F32DA16929ED904300E19ECA /* CPDFSearchResultsViewController.m in Sources */,
 				F3DF83D52A0BB9BA00D4F3AF /* CStringConstants.m in Sources */,
 				F32DA16D29ED904300E19ECA /* CPDFSearchViewCell.m in Sources */,
 				F35DD1982A06850700B57F5B /* CPDFFreeTextAnnotation+PDFListView.m in Sources */,
 				4FD34DFA2A0B9DB2005CEAB6 /* UIViewController+LeftItem.m in Sources */,
+				F32626352A1327CC000E7157 /* CPDFAnnotationViewController.m in Sources */,
 				4FD34DD92A0B44A1005CEAB6 /* UIView+Extension.m in Sources */,
 				4F5986922A03411700F06A1B /* CPDFDropDownMenu.m in Sources */,
 				4FD34DD12A0B3F51005CEAB6 /* CPDFPopMenu.m in Sources */,
@@ -1367,6 +1419,7 @@
 				C918CEA129F8F74000D43974 /* CPDFStrikeoutViewController.m in Sources */,
 				4F06AB5229F6792E007797E4 /* CPDFEditContextMenu.m in Sources */,
 				4FD34DCC2A0B2752005CEAB6 /* CNavigationBarTitleButton.m in Sources */,
+				F377CB3B2A1331A600C543BD /* CPDFAnnotationListCell.m in Sources */,
 				4FD34DE22A0B677E005CEAB6 /* CPDFPopMenuItem.m in Sources */,
 				C91BE7D92A039D2A0038F2BC /* CPDFSignatureViewCell.m in Sources */,
 				F38F60C729EFF0C2008098F8 /* CPDFColorUtils.m in Sources */,
@@ -1391,6 +1444,7 @@
 				F35DD1A12A06850700B57F5B /* CPDFSquareAnnotation+PDFListView.m in Sources */,
 				F32DA17729ED904300E19ECA /* CPDFInfoTableCell.m in Sources */,
 				4F1131B029F8EEA800950564 /* CPDFEditViewController.m in Sources */,
+				F377CB3F2A134D7E00C543BD /* CAnnotListHeaderInSection.m in Sources */,
 				C9FBA2312A10CBDA003FABEC /* CCustomizeStampTableViewCell.m in Sources */,
 				C918CED529FA972300D43974 /* CPDFShapeArrowViewController.m in Sources */,
 				F32DA16B29ED904300E19ECA /* CSearchToolbar.m in Sources */,
@@ -1405,6 +1459,7 @@
 				4F7D57F02A0D0D76008C76D3 /* CPDFToolsViewController.m in Sources */,
 				C91BE7D52A039AC40038F2BC /* CPDFSignatureViewController.m in Sources */,
 				C918CE9C29F8EE7200D43974 /* CPDFHighlightViewController.m in Sources */,
+				F32054CA2A0F819F006B41F7 /* CPDFSoundPlayBar.m in Sources */,
 				C918CEE029FB943400D43974 /* CPDFArrowStyleCell.m in Sources */,
 				C9FBA2252A0F2BE0003FABEC /* CStampPreview.m in Sources */,
 				C9AF189829F4DA6A00EC4979 /* CPDFColorSelectView.m in Sources */,

+ 44 - 0
compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFLink/CPDFLinkViewController.h

@@ -0,0 +1,44 @@
+//
+//  CPDFLinkViewController.h
+//  compdfkit-tools
+//
+//  Copyright © 2014-2023 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/UIKit.h>
+
+typedef NS_ENUM(NSInteger, CPDFLinkType) {
+    CPDFLinkTypeLink = 0,
+    CPDFLinkTypePage,
+    CPDFLinkTypeEmail
+};
+
+@class CPDFLinkViewController;
+@class CAnnotStyle;
+
+@protocol CPDFLinkViewControllerDelegate <NSObject>
+
+- (void)linkViewController:(CPDFLinkViewController *)linkViewController linkType:(CPDFLinkType)linkType linkString:(NSString *)linkString;
+
+@optional
+
+@end
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CPDFLinkViewController : UIViewController
+
+@property (nonatomic, readonly) CAnnotStyle *annotStyle;
+
+- (instancetype)initWithStyle:(CAnnotStyle *)annotStyle;
+
+@property (nonatomic, weak) id<CPDFLinkViewControllerDelegate> delegate;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 401 - 0
compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFLink/CPDFLinkViewController.m

@@ -0,0 +1,401 @@
+//
+//  CPDFLinkViewController.m
+//  compdfkit-tools
+//
+//  Copyright © 2014-2023 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 "CPDFLinkViewController.h"
+#import "CPDFColorUtils.h"
+#import "CAnnotStyle.h"
+
+@interface CPDFLinkViewController ()<UITextFieldDelegate>
+
+@property (nonatomic, strong) CAnnotStyle *annotStyle;
+
+@property (nonatomic, strong) UIScrollView *scrcollView;
+
+@property (nonatomic, strong) UIButton *backBtn;
+
+@property (nonatomic, strong) UILabel *titleLabel;
+
+@property (nonatomic, strong) UISegmentedControl *segmentedControl;
+
+@property (nonatomic, strong) UITextField *pageTextField;
+
+@property (nonatomic, strong) UITextField *emailTextField;
+
+@property (nonatomic, strong) UITextField *urlTextField;
+
+@property (nonatomic, strong) UIButton *saveButton;
+
+@property (nonatomic, assign) CPDFLinkType linkType;
+
+@end
+
+@implementation CPDFLinkViewController
+
+#pragma mark - Initializers
+
+- (instancetype)initWithStyle:(CAnnotStyle *)annotStyle {
+    if (self = [super init]) {
+        self.annotStyle = annotStyle;
+    }
+    return self;
+}
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    
+    self.view.backgroundColor = [CPDFColorUtils CPDFViewControllerBackgroundColor];
+
+    [self initWithView];
+    
+    if(self.annotStyle.isSelectAnnot) {
+        self.linkType = CPDFLinkTypeLink;
+        self.segmentedControl.selectedSegmentIndex = 0;
+    } else {
+        CPDFLinkAnnotation *link = self.annotStyle.annotations.firstObject;
+        
+        NSString *url = link.URL;
+        CPDFDestination *destination = link.destination;
+        if (url) {
+            if ([url hasPrefix:@"mailto:"]) {
+                self.emailTextField.text = [url substringFromIndex:7]?:@"";
+                self.linkType = CPDFLinkTypeEmail;
+                self.segmentedControl.selectedSegmentIndex = 2;
+            } else {
+                self.urlTextField.text = url?:@"";
+                self.linkType = CPDFLinkTypeLink;
+                self.segmentedControl.selectedSegmentIndex = 0;
+
+            }
+        } else if (destination) {
+            self.linkType = CPDFLinkTypePage;
+            self.pageTextField.text = [NSString stringWithFormat:@"%@", @(destination.pageIndex+1)];
+            self.segmentedControl.selectedSegmentIndex = 1;
+        } else {
+            self.linkType = CPDFLinkTypeLink;
+            self.segmentedControl.selectedSegmentIndex = 0;
+        }
+    }
+    [self updatePreferredContentSizeWithTraitCollection:self.traitCollection];
+}
+
+-(void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+    
+    UITextField *currentTextField = nil;
+
+    switch (_linkType) {
+        case CPDFLinkTypeLink:
+            currentTextField = self.urlTextField;
+            break;
+        case CPDFLinkTypePage:
+            currentTextField = self.pageTextField;
+            break;
+        default:
+        case CPDFLinkTypeEmail:
+            currentTextField = self.emailTextField;
+            break;
+    }
+    
+    [currentTextField becomeFirstResponder];
+}
+
+- (void)setLinkType:(CPDFLinkType)linkType {
+    _linkType = linkType;
+    
+    UITextField *currentTextField = nil;
+
+    switch (_linkType) {
+        case CPDFLinkTypeLink:
+            self.pageTextField.hidden = self.emailTextField.hidden = YES;
+            self.urlTextField.hidden = NO;
+            currentTextField = self.urlTextField;
+            break;
+        case CPDFLinkTypePage:
+            self.urlTextField.hidden = self.emailTextField.hidden = YES;
+            self.pageTextField.hidden = NO;
+            currentTextField = self.pageTextField;
+            break;
+        default:
+        case CPDFLinkTypeEmail:
+            self.urlTextField.hidden = self.pageTextField.hidden = YES;
+            self.emailTextField.hidden = NO;
+            currentTextField = self.emailTextField;
+            break;
+    }
+    
+    [currentTextField becomeFirstResponder];
+
+    if(currentTextField.text.length > 0) {
+        self.saveButton.enabled = YES;
+        self.saveButton.backgroundColor = [UIColor systemBlueColor];
+        [self.saveButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
+    } else {
+        self.saveButton.enabled = NO;
+        self.saveButton.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.2];
+        [self.saveButton setTitleColor:[UIColor lightGrayColor] forState:UIControlStateNormal];
+    }
+}
+
+- (void)viewWillLayoutSubviews {
+    [super viewWillLayoutSubviews];
+    
+    if (@available(iOS 11.0, *)) {
+        self.backBtn.frame = CGRectMake(self.view.frame.size.width - 60 - self.view.safeAreaInsets.right, 5, 50, 50);
+    } else {
+        self.backBtn.frame = CGRectMake(self.view.frame.size.width - 60, 5, 50, 50);
+    }
+    if (@available(iOS 11.0, *)) {
+        _scrcollView.frame = CGRectMake(self.view.safeAreaInsets.left, 50, self.view.frame.size.width - self.view.safeAreaInsets.left - self.view.safeAreaInsets.right, self.view.frame.size.height);
+    } else {
+        _scrcollView.frame = CGRectMake(0, 50, self.view.frame.size.width, self.view.frame.size.height);
+    }
+    self.scrcollView.contentSize = CGSizeMake(_scrcollView.frame.size.width, self.scrcollView.contentSize.height);
+    self.saveButton.frame  = CGRectMake((self.scrcollView.frame.size.width - 120)/2, self.saveButton.frame.origin.y, 120, 32);
+    
+}
+
+- (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
+    [super willTransitionToTraitCollection:newCollection withTransitionCoordinator:coordinator];
+    [self updatePreferredContentSizeWithTraitCollection:newCollection];
+}
+
+
+- (void)updatePreferredContentSizeWithTraitCollection:(UITraitCollection *)traitCollection {
+    
+    self.preferredContentSize = CGSizeMake(self.view.bounds.size.width, traitCollection.verticalSizeClass == UIUserInterfaceSizeClassCompact ? 350 : 600);
+
+    [self.urlTextField resignFirstResponder];
+    [self.emailTextField resignFirstResponder];
+    [self.pageTextField resignFirstResponder];
+
+}
+
+#pragma mark - Private
+
+- (void)initWithView {
+    _titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 17.5, self.view.frame.size.width, 25.0)];
+    _titleLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth;
+    _titleLabel.text = NSLocalizedString(@"Link to", nil);
+    _titleLabel.textAlignment = NSTextAlignmentCenter;
+    _titleLabel.font = [UIFont systemFontOfSize:20];
+    _titleLabel.adjustsFontSizeToFitWidth = YES;
+    [self.view addSubview:_titleLabel];
+    
+    _scrcollView = [[UIScrollView alloc] init];
+    _scrcollView.frame = CGRectMake(0, 50, self.view.frame.size.width, self.view.frame.size.height);
+    _scrcollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
+    _scrcollView.scrollEnabled = YES;
+    [self.view addSubview:_scrcollView];
+    
+    self.backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
+    if (@available(iOS 11.0, *)) {
+        self.backBtn.frame = CGRectMake(self.view.frame.size.width - 60 - self.view.safeAreaInsets.right, 5, 50, 50);
+    } else {
+        self.backBtn.frame = CGRectMake(self.view.frame.size.width - 60, 5, 50, 50);
+    }
+    self.backBtn.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
+    [self.backBtn setImage:[UIImage imageNamed:@"CPDFAnnotationBaseImageBack" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil] forState:UIControlStateNormal];
+    [self.backBtn addTarget:self action:@selector(buttonItemClicked_back:) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:self.backBtn];
+    
+    CGFloat offstY = 10;
+    _segmentedControl = [[UISegmentedControl alloc] initWithItems:@[NSLocalizedString(@"URL", nil), NSLocalizedString(@"Page",nil),NSLocalizedString(@"Email",nil)]];
+    _segmentedControl.frame = CGRectMake(30, offstY, self.scrcollView.frame.size.width - 30 *2, 32.0);
+    _segmentedControl.autoresizingMask = UIViewAutoresizingFlexibleWidth;
+    [_segmentedControl addTarget:self action:@selector(segmentedControlValueChanged_Mode:) forControlEvents:UIControlEventValueChanged];
+    [self.scrcollView addSubview:_segmentedControl];
+    offstY +=_segmentedControl.frame.size.height;
+
+    offstY+= 32.0;
+    _urlTextField = [[UITextField alloc]initWithFrame:CGRectMake(30.0, offstY, self.scrcollView.frame.size.width - 60.0, 28.0)];
+    _urlTextField.autoresizingMask = UIViewAutoresizingFlexibleWidth;
+
+    _urlTextField.layer.borderWidth = 1.0;
+    _urlTextField.layer.borderColor = [UIColor lightGrayColor].CGColor;
+    _urlTextField.layer.cornerRadius = 5.0;
+    _urlTextField.leftView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 8, 0)];
+    _urlTextField.leftViewMode = UITextFieldViewModeAlways;
+    _urlTextField.rightView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 8, 0)];
+    _urlTextField.rightViewMode = UITextFieldViewModeAlways;
+    _urlTextField.delegate = self;
+    _urlTextField.hidden = YES;
+    _urlTextField.font = [UIFont systemFontOfSize:18.0];
+    _urlTextField.placeholder = @"https://www.compdf.com";
+    [self.scrcollView addSubview:_urlTextField];
+
+    _pageTextField = [[UITextField alloc]initWithFrame:CGRectMake(30.0, offstY, self.view.frame.size.width - 60.0, 28.0)];
+    _pageTextField.autoresizingMask = UIViewAutoresizingFlexibleWidth;
+
+    _pageTextField.leftView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 8, 0)];
+    _pageTextField.layer.borderColor = [UIColor lightGrayColor].CGColor;
+    _pageTextField.leftViewMode = UITextFieldViewModeAlways;
+    _pageTextField.rightView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 8, 0)];
+    _pageTextField.rightViewMode = UITextFieldViewModeAlways;
+    _pageTextField.hidden = YES;
+    _pageTextField.layer.borderWidth = 1.0;
+    _pageTextField.layer.cornerRadius = 5.0;
+    _pageTextField.delegate = self;
+    _pageTextField.font = [UIFont systemFontOfSize:18.0];
+    [_pageTextField setKeyboardType:UIKeyboardTypeNumberPad];
+    [self.scrcollView addSubview:_pageTextField];
+    
+    _emailTextField = [[UITextField alloc]initWithFrame:CGRectMake(30.0, offstY, self.view.frame.size.width - 60.0, 28.0)];
+    _emailTextField.autoresizingMask = UIViewAutoresizingFlexibleWidth;
+    _emailTextField.leftView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 8, 0)];
+    _emailTextField.layer.borderColor = [UIColor lightGrayColor].CGColor;
+    _emailTextField.leftViewMode = UITextFieldViewModeAlways;
+    _emailTextField.rightView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 8, 0)];
+    _emailTextField.rightViewMode = UITextFieldViewModeAlways;
+    _emailTextField.hidden = YES;
+    _emailTextField.layer.borderWidth = 1.0;
+    _emailTextField.layer.cornerRadius = 5.0;
+    _emailTextField.delegate = self;
+    _emailTextField.font = [UIFont systemFontOfSize:18.0];
+    [self.scrcollView addSubview:_emailTextField];
+    offstY +=_urlTextField.frame.size.height;
+    
+    [_emailTextField addTarget:self action:@selector(textFieldTextChange:) forControlEvents:UIControlEventEditingChanged];
+    [_pageTextField addTarget:self action:@selector(textFieldTextChange:) forControlEvents:UIControlEventEditingChanged];
+    [_urlTextField addTarget:self action:@selector(textFieldTextChange:) forControlEvents:UIControlEventEditingChanged];
+    
+    offstY+= 30.0;
+    self.saveButton = [UIButton buttonWithType:UIButtonTypeCustom];
+    self.saveButton.frame  = CGRectMake((self.scrcollView.frame.size.width - 120)/2, offstY, 120, 32);
+    self.saveButton.layer.cornerRadius = 5.0;
+    self.saveButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
+    [self.saveButton setTitle:NSLocalizedString(@"Save",nil) forState:UIControlStateNormal];
+    [self.saveButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
+    [self.saveButton addTarget:self action:@selector(buttonItemClicked_Save:) forControlEvents:UIControlEventTouchUpInside];
+    self.saveButton.backgroundColor = [UIColor systemBlueColor];
+    [self.scrcollView addSubview:self.saveButton];
+
+    offstY += self.saveButton.frame.size.height;
+    
+    self.scrcollView.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height);
+    
+    [[NSNotificationCenter defaultCenter] addObserver:self
+                                             selector:@selector(keyboardwillChangeFrame:)
+                                                 name:UIKeyboardWillChangeFrameNotification
+                                               object:nil];
+    [[NSNotificationCenter defaultCenter] addObserver:self
+                                             selector:@selector(keyboardWillHide:)
+                                                 name:UIKeyboardWillHideNotification
+                                               object:nil];
+}
+
+#pragma mark - Action
+
+- (void)buttonItemClicked_back:(id)sender {
+    [self dismissViewControllerAnimated:YES completion:nil];
+}
+
+- (void)segmentedControlValueChanged_Mode:(id)sender {
+    UITextField *currentTextField = nil;
+
+    switch (self.segmentedControl.selectedSegmentIndex) {
+        case 0:
+            self.linkType = CPDFLinkTypeLink;
+            currentTextField = self.urlTextField;
+            break;
+        case 1:
+            self.linkType = CPDFLinkTypePage;
+            currentTextField = self.pageTextField;
+            break;
+        default:
+        case 2:
+            self.linkType = CPDFLinkTypeEmail;
+            currentTextField = self.emailTextField;
+            break;
+    }
+}
+
+- (void)buttonItemClicked_Save:(id)sender {
+    NSString *string = nil;
+    if(CPDFLinkTypeLink == self.linkType) {
+        string = self.urlTextField.text;
+        string = [string lowercaseString];
+        if (![string hasPrefix:@"https://"] && ![string hasPrefix:@"http://"]) {
+            string = [NSString stringWithFormat:@"https://%@",string];
+        }
+
+    } else if (CPDFLinkTypePage == self.linkType) {
+        string = self.pageTextField.text;
+        CPDFAnnotation *annotation = self.annotStyle.annotations.firstObject;
+        CPDFDocument *document = annotation.page.document;
+        
+        if([string integerValue] > document.pageCount || [string intValue] < 1) {
+            UIAlertController *alert = [UIAlertController alertControllerWithTitle:@""
+                                                                           message:NSLocalizedString(@"Config Error", nil)
+                                                                    preferredStyle:UIAlertControllerStyleAlert];
+            UIAlertAction *okAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"OK", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+                self.pageTextField.text = @"";
+            }];
+            [alert addAction:okAction];
+            [self presentViewController:alert animated:YES completion:nil];
+
+            return;
+        }
+        
+    } else if (CPDFLinkTypeEmail == self.linkType) {
+        string = self.emailTextField.text;
+        if (![string hasPrefix:@"mailto:"]) {
+            string = [NSString stringWithFormat:@"mailto:%@",string];
+        }
+    }
+    
+    [self dismissViewControllerAnimated:YES completion:^{
+            if([self.delegate respondsToSelector:@selector(linkViewController:linkType:linkString:)]) {
+                [self.delegate linkViewController:self linkType:self.linkType linkString:string];
+            }
+    }];
+}
+
+#pragma mark - UITextFieldDelegate
+
+- (void)textFieldTextChange:(UITextField *)textField {
+    if(textField.text.length > 0) {
+        self.saveButton.enabled = YES;
+        self.saveButton.backgroundColor = [UIColor systemBlueColor];
+        [self.saveButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
+    } else {
+        self.saveButton.enabled = NO;
+        self.saveButton.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.2];
+        [self.saveButton setTitleColor:[UIColor lightGrayColor] forState:UIControlStateNormal];
+    }
+}
+
+- (BOOL)textFieldShouldReturn:(UITextField *)textField {
+    [textField resignFirstResponder];
+    return YES;
+}
+
+#pragma mark - NSNotification
+
+- (void)keyboardwillChangeFrame:(NSNotification *)notification {
+    NSDictionary *userInfo = [notification userInfo];
+    NSValue *value = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
+    CGRect frame = value.CGRectValue;
+    CGRect rect = [self.urlTextField convertRect:self.urlTextField.frame toView:self.view];
+    if(CGRectGetMaxY(rect) > self.view.frame.size.height - frame.size.height) {
+        UIEdgeInsets insets = self.scrcollView.contentInset;
+        insets.bottom = frame.size.height + self.urlTextField.frame.size.height;
+        self.scrcollView.contentInset = insets;
+    }
+}
+
+- (void)keyboardWillHide:(NSNotification *)notification {
+    UIEdgeInsets insets = self.scrcollView.contentInset;
+    insets.bottom = 0;
+    self.scrcollView.contentInset = insets;
+}
+
+@end

+ 50 - 0
compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/CPDFSoundPlayBar.h

@@ -0,0 +1,50 @@
+//
+//  CPDFSoundPlayBar.h
+//  compdfkit-tools
+//
+//  Copyright © 2014-2023 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/UIKit.h>
+
+typedef NS_ENUM(NSInteger, CPDFSoundState) {
+    CPDFSoundStateRecord = 0,
+    CPDFSoundStatePlay,
+    CPDFSoundStateStop
+};
+
+@class CPDFSoundPlayBar;
+
+@protocol CPDFSoundPlayBarDelegate <NSObject>
+
+@optional
+
+- (void)soundPlayBarRecordFinished:(CPDFSoundPlayBar *)soundPlayBar withFile:(NSString *)filePath;
+
+@end
+
+@class CAnnotStyle;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CPDFSoundPlayBar : UIView
+
+@property (nonatomic, readonly) CAnnotStyle *annotStyle;
+
+@property (nonatomic, weak) id<CPDFSoundPlayBarDelegate> delegate;
+
+- (instancetype)initWithStyle:(CAnnotStyle *)annotStyle;
+
+- (void)showInView:(UIView *)subView soundState:(CPDFSoundState)soundState;
+
+- (void)setURL:(NSURL *)url;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 270 - 0
compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/CPDFSoundPlayBar.m

@@ -0,0 +1,270 @@
+//
+//  CPDFSoundPlayBar.m
+//  compdfkit-tools
+//
+//  Copyright © 2014-2023 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 "CPDFSoundPlayBar.h"
+
+#import "CAnnotStyle.h"
+
+#import <AVFAudio/AVFAudio.h>
+#import <AVFoundation/AVFoundation.h>
+
+#import <ComPDFKit/ComPDFKit.h>
+
+#define SOUND_TMP_DICT [NSTemporaryDirectory() stringByAppendingPathComponent:@"soundCache"]
+
+@interface CPDFSoundPlayBar ()<AVAudioPlayerDelegate>
+
+@property (nonatomic, strong) CAnnotStyle *annotStyle;
+
+@property (nonatomic, strong) NSTimer *voiceTimer;
+
+@property (nonatomic, strong) UIButton *playButton;
+
+@property (nonatomic, strong) UIButton *closeButton;
+
+@property (nonatomic, strong) UIButton *sureButton;
+
+@property (nonatomic, strong) UILabel *timeDisplayLabel;
+
+@property (nonatomic, strong) NSDateFormatter *formatter;
+
+@property (nonatomic, strong) AVAudioRecorder *avAudioRecorder;
+
+@property (nonatomic, strong) AVAudioPlayer *avAudioPlayer;
+
+@property (nonatomic,assign) CPDFSoundState soundState;
+@end
+
+@implementation CPDFSoundPlayBar
+
+#pragma mark - Initializers
+
+- (instancetype)initWithStyle:(CAnnotStyle *)annotStyle {
+    if (self = [super init]) {
+        self.annotStyle = annotStyle;
+        
+        [self setDateFormatter];
+
+        [self initWithView];
+    }
+    return self;
+}
+
+#pragma mark - Accessors
+
+- (void)setDateFormatter {
+    if (nil == _formatter) {
+        _formatter = [[NSDateFormatter alloc] init];
+        _formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
+        [_formatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
+        _formatter.dateFormat = @"HH:mm:ss";
+    }
+}
+
+#pragma mark - Public
+
+- (void)showInView:(UIView *)subView soundState:(CPDFSoundState)soundState  {
+    self.soundState = soundState;
+
+    if(CPDFSoundStateRecord == soundState) {
+        self.frame = CGRectMake((subView.frame.size.width - 146.0)/2, subView.frame.size.height - 40 - 10, 146.0, 40);
+        self.sureButton.hidden = YES;
+        self.closeButton.frame = CGRectMake(self.frame.size.width - 8 - 24, (self.frame.size.height - 24.0)/2, 24, 24);
+    } else if (CPDFSoundStatePlay == soundState) {
+        self.frame = CGRectMake((subView.frame.size.width - 174.0)/2, subView.frame.size.height - 40 - 10, 174.0, 40);
+        self.sureButton.hidden = NO;
+        self.sureButton.frame = CGRectMake(self.frame.size.width - 8 - 24, (self.frame.size.height - 24.0)/2, 24, 24);
+        self.closeButton.frame = CGRectMake(self.frame.size.width - 8 - 24 - self.sureButton.frame.size.width - 10, (self.frame.size.height - 24.0)/2, 24, 24);
+    } else if (CPDFSoundStateStop == soundState) {
+        self.frame = CGRectMake((subView.frame.size.width - 174.0)/2, subView.frame.size.height - 40 - 10, 174.0, 40);
+        self.sureButton.hidden = NO;
+        self.sureButton.frame = CGRectMake(self.frame.size.width - 8 - 24, (self.frame.size.height - 24.0)/2, 24, 24);
+        self.closeButton.frame = CGRectMake(self.frame.size.width - 8 - 24 - self.sureButton.frame.size.width - 10, (self.frame.size.height - 24.0)/2, 24, 24);
+
+    }
+    self.layer.cornerRadius = 5.0;
+    self.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin;
+    [subView addSubview:self];
+}
+
+- (void)setURL:(NSURL *)url {
+    if (self.soundState == CPDFSoundStateRecord) {
+        [self audioRecorderInitWithURL:url];
+    }else if (self.soundState == CPDFSoundStatePlay){
+        [self audioPlayerInitWithURL:url];
+    }
+    [self setDateFormatter];
+}
+
+#pragma mark - Private
+
+- (void)initWithView {
+    self.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.8];
+    
+    self.playButton = [UIButton buttonWithType:UIButtonTypeCustom];
+    self.playButton.frame = CGRectMake(8, 8, 24, 24);
+    [self.playButton setImage:[UIImage imageNamed:@"CPDFSoundImageNamePlay" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil] forState:UIControlStateNormal];
+    [self.playButton addTarget:self action:@selector(buttonItemClicked_Play:) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:self.playButton];
+    
+    _timeDisplayLabel = [[UILabel alloc] init];
+    _timeDisplayLabel.backgroundColor = [UIColor clearColor];
+    _timeDisplayLabel.textColor = [UIColor whiteColor];
+    _timeDisplayLabel.font = [UIFont systemFontOfSize:13.0];
+    _timeDisplayLabel.text = @"00:00:00";
+    [_timeDisplayLabel sizeToFit];
+    _timeDisplayLabel.frame = CGRectMake(CGRectGetMaxX(self.playButton.frame)+ 10, 8, _timeDisplayLabel.frame.size.width, 24.0);
+    [self addSubview:_timeDisplayLabel];
+    
+    self.sureButton = [UIButton buttonWithType:UIButtonTypeCustom];
+    self.sureButton.frame = CGRectMake(self.frame.size.width - 8 - 24, 8, 24, 24);
+    self.sureButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
+    [self.sureButton setImage:[UIImage imageNamed:@"CPDFSoundImageNameSure" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil] forState:UIControlStateNormal];
+    [self.sureButton addTarget:self action:@selector(buttonItemClicked_Sure:) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:self.sureButton];
+    
+    self.closeButton = [UIButton buttonWithType:UIButtonTypeCustom];
+    self.closeButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin;
+    self.closeButton.frame = CGRectMake(self.frame.size.width - 8 - 24 - self.sureButton.frame.size.width - 10, 8, 24, 24);
+    self.closeButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
+    [self.closeButton setImage:[UIImage imageNamed:@"CPDFSoundImageNameClose" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil] forState:UIControlStateNormal];
+    [self.closeButton addTarget:self action:@selector(buttonItemClicked_Close:) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:self.closeButton];
+}
+
+- (void)startTimer
+{
+    if (_voiceTimer) {
+        [_voiceTimer invalidate];
+        _voiceTimer = nil;
+    }
+    _voiceTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/30.0 target:self selector:@selector(reflashAsTimeGoesBy) userInfo:nil repeats:YES];
+}
+
+- (void)stopTimer {
+    if (_voiceTimer) {
+        [_voiceTimer invalidate];
+        _voiceTimer = nil;
+    }
+}
+
+- (void)audioRecorderInitWithURL:(NSURL *)url {
+    NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init];
+    [recordSetting setValue:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];
+    [recordSetting setValue:[NSNumber numberWithFloat:11025] forKey:AVSampleRateKey];
+    [recordSetting setValue:[NSNumber numberWithInt:2] forKey:AVNumberOfChannelsKey];
+    [recordSetting setValue:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
+    [recordSetting setValue:[NSNumber numberWithInt:AVAudioQualityHigh] forKey:AVEncoderAudioQualityKey];
+    
+    if (!url) {
+        NSString *path = NULL;
+        NSFileManager *manager = [NSFileManager defaultManager];
+        BOOL isDict = NO;
+        BOOL dictOK = NO;
+        if ([manager fileExistsAtPath:SOUND_TMP_DICT isDirectory:&isDict] && isDict){
+            dictOK = YES;
+        }else{
+            if ([manager createDirectoryAtPath:SOUND_TMP_DICT withIntermediateDirectories:NO attributes:nil error:nil]) {
+                dictOK = YES;
+            }
+        }
+        
+        if (dictOK) {
+            for (NSInteger i=0; i<NSIntegerMax; i++) {
+                path = [NSString stringWithFormat:@"%@/%@_%ld.%s",SOUND_TMP_DICT,@"tmp",i,"wav"];
+                if (![manager fileExistsAtPath:path]) {
+                    break;
+                }
+            }
+        }else{
+            NSLog(@"tmp file dict error!");
+        }
+        url = [NSURL fileURLWithPath:path];
+    }
+    
+    if (_avAudioRecorder) {
+        _avAudioRecorder = nil;
+    }
+    NSError *error = nil;
+    _avAudioRecorder = [[AVAudioRecorder alloc]initWithURL:url settings:recordSetting error:&error];
+    _avAudioRecorder.meteringEnabled = YES;
+}
+
+- (void)audioPlayerInitWithURL:(NSURL *)url {
+    if (_avAudioPlayer) {
+        _avAudioPlayer = nil;
+    }
+    
+    NSError *error = nil;
+    _avAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
+    [_avAudioPlayer setVolume:1.0];
+    _avAudioPlayer.delegate = self;
+}
+
+- (void)stopRecord {
+    self.soundState = CPDFSoundStateStop;
+    [self stopTimer];
+    if (_avAudioRecorder.currentTime > 0.1) {
+        [_avAudioRecorder stop];
+        NSURL *url = _avAudioRecorder.url;
+        NSString *path = [url path];
+        
+        NSFileManager *manager = [NSFileManager defaultManager];
+        if ([manager fileExistsAtPath:path]) {
+            if ([self.delegate respondsToSelector:@selector(soundPlayBarRecordFinished:withFile:)]) {
+                [self.delegate soundPlayBarRecordFinished:self withFile:path];
+            }
+        }
+    }else{
+        [_avAudioRecorder stop];
+    }
+}
+
+#pragma mark - Action
+
+- (IBAction)buttonItemClicked_Play:(id)sender {
+    
+}
+
+- (IBAction)buttonItemClicked_Sure:(id)sender {
+    
+}
+
+- (IBAction)buttonItemClicked_Close:(id)sender {
+    
+}
+
+- (void)reflashAsTimeGoesBy {
+    NSTimeInterval time;
+    
+    if (self.soundState == CPDFSoundStateRecord) {
+        time = _avAudioRecorder.currentTime;
+        [_avAudioRecorder updateMeters];
+        
+        NSDate *dateToShow = [NSDate dateWithTimeIntervalSince1970:time];
+        NSString *stringToShow = [_formatter stringFromDate:dateToShow];
+        _timeDisplayLabel.text = stringToShow;
+        
+        if (time >= 3600 ) {
+            [self stopRecord];
+        }
+    }else if (self.soundState == CPDFSoundStatePlay){
+        time = _avAudioPlayer.currentTime;
+        
+        NSDate *dateToShow = [NSDate dateWithTimeIntervalSince1970:time];
+        NSString *stringToShow = [_formatter stringFromDate:dateToShow];
+        _timeDisplayLabel.text = stringToShow;
+    }
+}
+
+@end

+ 12 - 0
compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/CPDFSoundImageNameClose.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "close.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 87 - 0
compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/CPDFSoundImageNameClose.imageset/close.pdf

@@ -0,0 +1,87 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+0.707107 0.707107 -0.707107 0.707107 14.853586 -5.813791 cm
+1.000000 1.000000 1.000000 scn
+7.000000 7.170410 m
+7.000000 6.420410 l
+8.500000 6.420410 l
+8.500000 7.170410 l
+8.500000 13.420383 l
+14.750000 13.420383 l
+15.500000 13.420383 l
+15.500000 14.920383 l
+14.750000 14.920383 l
+8.500000 14.920383 l
+8.500000 21.170410 l
+8.500000 21.920410 l
+7.000000 21.920410 l
+7.000000 21.170410 l
+7.000000 14.920383 l
+0.750000 14.920383 l
+0.000000 14.920383 l
+0.000000 13.420383 l
+0.750000 13.420383 l
+7.000000 13.420383 l
+7.000000 7.170410 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  570
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000660 00000 n
+0000000682 00000 n
+0000000855 00000 n
+0000000929 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+988
+%%EOF

+ 12 - 0
compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/CPDFSoundImageNamePlay.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "record.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 85 - 0
compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/CPDFSoundImageNamePlay.imageset/record.pdf

@@ -0,0 +1,85 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 8.000000 5.000000 cm
+1.000000 1.000000 1.000000 scn
+1.000000 14.000000 m
+0.447715 14.000000 0.000000 13.552284 0.000000 13.000000 c
+0.000000 1.000000 l
+0.000000 0.447716 0.447715 0.000000 1.000000 0.000000 c
+2.000000 0.000000 l
+2.552285 0.000000 3.000000 0.447716 3.000000 1.000000 c
+3.000000 13.000000 l
+3.000000 13.552284 2.552285 14.000000 2.000000 14.000000 c
+1.000000 14.000000 l
+h
+8.000000 14.000000 m
+7.447715 14.000000 7.000000 13.552284 7.000000 13.000000 c
+7.000000 1.000000 l
+7.000000 0.447716 7.447715 0.000000 8.000000 0.000000 c
+9.000000 0.000000 l
+9.552284 0.000000 10.000000 0.447716 10.000000 1.000000 c
+10.000000 13.000000 l
+10.000000 13.552284 9.552285 14.000000 9.000000 14.000000 c
+8.000000 14.000000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  800
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 24.000000 24.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000890 00000 n
+0000000912 00000 n
+0000001085 00000 n
+0000001159 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1218
+%%EOF

+ 12 - 0
compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/CPDFSoundImageNameRec.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "record-3.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 83 - 0
compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/CPDFSoundImageNameRec.imageset/record-3.pdf

@@ -0,0 +1,83 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 2.000000 2.000000 cm
+1.000000 0.000000 0.000000 scn
+19.000000 10.000000 m
+19.000000 5.029437 14.970563 1.000000 10.000000 1.000000 c
+5.029437 1.000000 1.000000 5.029437 1.000000 10.000000 c
+1.000000 14.970563 5.029437 19.000000 10.000000 19.000000 c
+14.970563 19.000000 19.000000 14.970563 19.000000 10.000000 c
+h
+20.000000 10.000000 m
+20.000000 4.477153 15.522847 0.000000 10.000000 0.000000 c
+4.477152 0.000000 0.000000 4.477153 0.000000 10.000000 c
+0.000000 15.522848 4.477152 20.000000 10.000000 20.000000 c
+15.522847 20.000000 20.000000 15.522848 20.000000 10.000000 c
+h
+10.000000 3.000000 m
+13.865993 3.000000 17.000000 6.134007 17.000000 10.000000 c
+17.000000 13.865993 13.865993 17.000000 10.000000 17.000000 c
+6.134007 17.000000 3.000000 13.865993 3.000000 10.000000 c
+3.000000 6.134007 6.134007 3.000000 10.000000 3.000000 c
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  911
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 24.000000 24.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000001001 00000 n
+0000001023 00000 n
+0000001196 00000 n
+0000001270 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1329
+%%EOF

+ 12 - 0
compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/CPDFSoundImageNameStop.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "record.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 73 - 0
compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/CPDFSoundImageNameStop.imageset/record.pdf

@@ -0,0 +1,73 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+0.707107 -0.707107 0.707107 0.707107 -5.521559 8.675219 cm
+1.000000 1.000000 1.000000 scn
+14.058677 20.134670 m
+2.095777 18.921856 l
+1.257087 18.836828 0.893452 17.815931 1.489535 17.219849 c
+12.239619 6.469764 l
+12.835703 5.873681 13.856599 6.237316 13.941627 7.076006 c
+15.154441 19.038906 l
+15.218284 19.668633 14.688404 20.198513 14.058677 20.134670 c
+h
+f
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  394
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 24.000000 24.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000484 00000 n
+0000000506 00000 n
+0000000679 00000 n
+0000000753 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+812
+%%EOF

+ 12 - 0
compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/CPDFSoundImageNameSure.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "right.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 83 - 0
compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/CPDFSoundImageNameSure.imageset/right.pdf

@@ -0,0 +1,83 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+0.707107 -0.707107 0.707107 0.707107 1.442322 8.249939 cm
+1.000000 1.000000 1.000000 scn
+7.000000 2.202881 m
+7.000000 1.452881 l
+7.750000 1.452881 l
+7.750000 2.202881 l
+7.000000 2.202881 l
+h
+6.250000 15.202881 m
+6.250000 2.202881 l
+7.750000 2.202881 l
+7.750000 15.202881 l
+6.250000 15.202881 l
+h
+7.000000 2.952881 m
+0.000000 2.952881 l
+0.000000 1.452881 l
+7.000000 1.452881 l
+7.000000 2.952881 l
+h
+f
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  434
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000524 00000 n
+0000000546 00000 n
+0000000719 00000 n
+0000000793 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+852
+%%EOF

+ 6 - 0
compdfkit-tools/compdfkit-tools/Annotation/PDFProperties/PDFSound/Image.xcassets/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 9 - 0
compdfkit-tools/compdfkit-tools/Common/Controls/BOTA/CPDFBOTAViewController.h

@@ -14,6 +14,12 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
+typedef NS_ENUM(NSInteger, CPDFBOTATypeState) {
+    CPDFBOTATypeStateOutline = (1UL << 0),
+    CPDFBOTATypeStateBookmark =(1UL << 1),
+    CPDFBOTATypeStateAnnotation = (1UL << 2)
+};
+
 @class CPDFBOTAViewController;
 @class CPDFView;
 
@@ -33,6 +39,9 @@ NS_ASSUME_NONNULL_BEGIN
 
 - (instancetype)initWithPDFView:(CPDFView *)pdfView;
 
+- (instancetype)initCustomizeWithPDFView:(CPDFView *)pdfView navArrays:(NSArray *)botaTypes;
+
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 78 - 28
compdfkit-tools/compdfkit-tools/Common/Controls/BOTA/CPDFBOTAViewController.m

@@ -14,11 +14,12 @@
 #import "CPDFThumbnailViewController.h"
 #import "CPDFOutlineViewController.h"
 #import "CPDFBookmarkViewController.h"
+#import "CPDFAnnotationViewController.h"
 #import "CPDFColorUtils.h"
 
 #import <ComPDFKit/ComPDFKit.h>
 
-@interface CPDFBOTAViewController () <CPDFOutlineViewControllerDelegate, CPDFBookmarkViewControllerDelegate>
+@interface CPDFBOTAViewController () <CPDFOutlineViewControllerDelegate, CPDFBookmarkViewControllerDelegate,CPDFAnnotationViewControllerDelegate>
 
 @property (nonatomic, assign) NSInteger pageIndex;
 @property (nonatomic, strong) UISegmentedControl *segmentedControl;
@@ -26,9 +27,14 @@
 
 @property (nonatomic, strong) CPDFOutlineViewController *outlineViewController;
 @property (nonatomic, strong) CPDFBookmarkViewController *bookmarkViewController;
+@property (nonatomic, strong) CPDFAnnotationViewController *annotationViewController;
 
 @property (nonatomic, strong) UIButton *doneBtn;
 
+@property (nonatomic, strong) NSArray *segmmentArray;
+
+@property (nonatomic, assign) CPDFBOTATypeState type;
+
 @end
 
 @implementation CPDFBOTAViewController
@@ -38,18 +44,17 @@
 - (instancetype)initWithPDFView:(CPDFView *)pdfView {
     if (self = [super init]) {
         _pdfView = pdfView;
-        
+        self.segmmentArray = @[@(CPDFBOTATypeStateOutline),@(CPDFBOTATypeStateBookmark)];
     }
     return self;
 }
 
-#pragma mark - Accessors
-
-- (CPDFBookmarkViewController *)bookmarkViewController {
-    if (!_bookmarkViewController) {
-        
+- (instancetype)initCustomizeWithPDFView:(CPDFView *)pdfView navArrays:(NSArray *)botaTypes {
+    if (self = [super init]) {
+        _pdfView = pdfView;
+        self.segmmentArray = botaTypes;
     }
-    return _bookmarkViewController;
+    return self;
 }
 
 #pragma mark - UIViewController Methods
@@ -59,20 +64,33 @@
     // Do any additional setup after loading the view.
 
     self.view.backgroundColor = [CPDFColorUtils CPDFViewControllerBackgroundColor];
-    
-    self.outlineViewController = [[CPDFOutlineViewController alloc] initWithPDFView:self.pdfView];
-    self.outlineViewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin;
-    self.outlineViewController.delegate = self;
-    [self addChildViewController:self.outlineViewController];
-    
-    _bookmarkViewController = [[CPDFBookmarkViewController alloc] initWithPDFView:self.pdfView];
-    _bookmarkViewController.delegate = self;
-    _bookmarkViewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin;
-    [self addChildViewController:_bookmarkViewController];
-    
-    
-    NSArray *segmmentArray = [NSArray arrayWithObjects:NSLocalizedString(@"Outline", nil), NSLocalizedString(@"Bookmark", nil), nil];
-    _segmentedControl = [[UISegmentedControl alloc] initWithItems:segmmentArray];
+            
+    NSMutableArray *segmmentTitleArray = [NSMutableArray array];
+    for (NSNumber *num in self.segmmentArray) {
+        if(CPDFBOTATypeStateOutline == num.integerValue) {
+            [segmmentTitleArray addObject:NSLocalizedString(@"Outline", nil)];
+            self.outlineViewController = [[CPDFOutlineViewController alloc] initWithPDFView:self.pdfView];
+            self.outlineViewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin;
+            self.outlineViewController.delegate = self;
+            [self addChildViewController:self.outlineViewController];
+
+        } else if(CPDFBOTATypeStateBookmark == num.integerValue) {
+            [segmmentTitleArray addObject:NSLocalizedString(@"Bookmark", nil)];
+            _bookmarkViewController = [[CPDFBookmarkViewController alloc] initWithPDFView:self.pdfView];
+            _bookmarkViewController.delegate = self;
+            _bookmarkViewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin;
+            [self addChildViewController:_bookmarkViewController];
+
+        } else if(CPDFBOTATypeStateAnnotation == num.integerValue) {
+            [segmmentTitleArray addObject:NSLocalizedString(@"Annotation", nil)];
+            _annotationViewController = [[CPDFAnnotationViewController alloc] initWithPDFView:self.pdfView];
+            _annotationViewController.delegate = self;
+            _annotationViewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin;
+            [self addChildViewController:_annotationViewController];
+        }
+
+    }
+    _segmentedControl = [[UISegmentedControl alloc] initWithItems:segmmentTitleArray];
     _segmentedControl.selectedSegmentIndex = 0;
     _segmentedControl.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
     [_segmentedControl addTarget:self action:@selector(segmentedControlValueChanged_BOTA:) forControlEvents:UIControlEventValueChanged];
@@ -110,10 +128,16 @@
         self.outlineViewController.view.frame = CGRectMake(0, self.view.safeAreaInsets.top + 80, self.view.bounds.size.width - self.view.safeAreaInsets.left - self.view.safeAreaInsets.right, self.view.bounds.size.height - self.view.safeAreaInsets.top - self.view.safeAreaInsets.bottom - 80);
         
         _bookmarkViewController.view.frame = CGRectMake(0, self.view.safeAreaInsets.top + 80, self.view.bounds.size.width - self.view.safeAreaInsets.left - self.view.safeAreaInsets.right, self.view.bounds.size.height - self.view.safeAreaInsets.top - self.view.safeAreaInsets.bottom - 80);
+        
+        _annotationViewController.view.frame = CGRectMake(0, self.view.safeAreaInsets.top + 80, self.view.bounds.size.width - self.view.safeAreaInsets.left - self.view.safeAreaInsets.right, self.view.bounds.size.height - self.view.safeAreaInsets.top - self.view.safeAreaInsets.bottom - 80);
+
     } else {
         self.outlineViewController.view.frame = CGRectMake(0, 64 + 44, self.view.bounds.size.width - 64 - 30, self.view.bounds.size.height - 64 - 44 - 30);
         
         _bookmarkViewController.view.frame = CGRectMake(0, 64 + 44, self.view.bounds.size.width - 64 - 30, self.view.bounds.size.height - 64 - 30 - 44);
+        
+        _annotationViewController.view.frame = CGRectMake(0, 64 + 44, self.view.bounds.size.width - 64 - 30, self.view.bounds.size.height - 64 - 30 - 44);
+
     }
 }
 
@@ -136,14 +160,29 @@
         if(self.bookmarkViewController.view != nil) {
             [self.bookmarkViewController.view removeFromSuperview];
         }
+        
+        if(self.annotationViewController.view != nil) {
+            [self.annotationViewController.view removeFromSuperview];
+        }
     }
     
-    if (self.segmentedControl.selectedSegmentIndex == 0) {
-        self.currentViewController = self.outlineViewController;
-        [self.view addSubview:self.outlineViewController.view];
-    } else if (self.segmentedControl.selectedSegmentIndex == 1) {
-        self.currentViewController = self.bookmarkViewController;
-        [self.view addSubview:self.bookmarkViewController.view];
+    self.type = [[self.segmmentArray objectAtIndex:self.segmentedControl.selectedSegmentIndex] intValue];
+    switch (self.type) {
+        case CPDFBOTATypeStateOutline:
+            self.currentViewController = self.outlineViewController;
+            [self.view addSubview:self.outlineViewController.view];
+            break;
+        case CPDFBOTATypeStateBookmark:
+            self.currentViewController = self.bookmarkViewController;
+            [self.view addSubview:self.bookmarkViewController.view];
+            break;
+
+        default:
+        case CPDFBOTATypeStateAnnotation:
+            self.currentViewController = self.annotationViewController;
+            [self.view addSubview:self.annotationViewController.view];
+
+            break;
     }
 }
 
@@ -171,4 +210,15 @@
     }
 }
 
+#pragma mark - CPDFAnnotationViewControllerDelegate
+
+- (void)annotationViewController:(CPDFAnnotationViewController *)annotationViewController jumptoPage:(NSInteger)pageIndex selectAnnot:(CPDFAnnotation *)annot {
+    [self.pdfView goToPageIndex:pageIndex animated:NO];
+    [self.pdfView goToRect:annot.bounds onPage:[self.pdfView.document pageAtIndex:pageIndex] animated:YES];
+    if([self.delegate respondsToSelector:@selector(botaViewControllerDismiss:)]) {
+        [self.delegate botaViewControllerDismiss:self];
+    }
+
+}
+
 @end

+ 2 - 0
compdfkit-tools/compdfkit-tools/Common/Utils/CPDFColorUtils.h

@@ -28,6 +28,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 + (UIColor *)CNoteOpenBackgooundColor;
 
++ (UIColor *)CViewBackgroundColor;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 8 - 0
compdfkit-tools/compdfkit-tools/Common/Utils/CPDFColorUtils.m

@@ -62,4 +62,12 @@
     }
 }
 
++ (UIColor *)CViewBackgroundColor {
+    if (@available(iOS 13.0, *)) {
+        return [UIColor colorNamed:@"CViewBackgroundColor" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil];
+    } else {
+        return [UIColor colorWithRed:242.0/255.0 green:242.0/255.0  blue:242.0/255.0 alpha:1.0];
+    }
+}
+
 @end

+ 38 - 0
compdfkit-tools/compdfkit-tools/Common/Utils/UtilsColor.xcassets/CViewBackgroundColor.colorset/Contents.json

@@ -0,0 +1,38 @@
+{
+  "colors" : [
+    {
+      "color" : {
+        "color-space" : "srgb",
+        "components" : {
+          "alpha" : "1.000",
+          "blue" : "242",
+          "green" : "242",
+          "red" : "242"
+        }
+      },
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "color" : {
+        "color-space" : "srgb",
+        "components" : {
+          "alpha" : "1.000",
+          "blue" : "0",
+          "green" : "0",
+          "red" : "0"
+        }
+      },
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

File diff suppressed because it is too large
+ 38 - 1
compdfkit-tools/compdfkit-tools/Common/Views/PDFAnnotationBar/CPDFAnnotationBar.m


+ 5 - 5
compdfkit-tools/compdfkit-tools/Common/Views/PDFView/PDFListView/CPDFListView+Annotation.m

@@ -523,7 +523,7 @@
             }
         }
     } else if (CPDFAnnotationDraggingNone == self.draggingType) {
-        if (self.activeAnnotation) {
+        if (self.activeAnnotation && !(CPDFViewAnnotationModeLink == self.annotationMode && !CGRectIsEmpty(self.addLinkRect))) {
             CPDFPage *previousPage = self.activeAnnotation.page;
             [self updateActiveAnnotations:@[]];
             [self setNeedsDisplayForPage:previousPage];
@@ -1227,13 +1227,13 @@
     
     self.addLinkPoint = CGPointZero;
     self.addLinkRect = CGRectZero;
-    [self setNeedsDisplayForPage:page];
     
-    if(annotation)
+    if(annotation) {
         [self updateActiveAnnotations:@[annotation]];
-
+        [self setNeedsDisplayForPage:page];
+    }
     if ([self.performDelegate respondsToSelector:@selector(PDFListViewEditNote:forAnnotation:)]) {
-        [self.performDelegate PDFListViewEditNote:self forAnnotation:annotation];
+        [self.performDelegate PDFListViewEditProperties:self forAnnotation:annotation];
     }
 }
 

+ 6 - 9
compdfkit-tools/compdfkit-tools/Common/Views/PDFView/PDFListView/CPDFListView.m

@@ -300,15 +300,12 @@ NSNotificationName const CPDFListViewAnnotationsOperationChangeNotification = @"
 - (void)updateActiveAnnotations:(NSArray <CPDFAnnotation *> *)activeAnnotations {
     if(activeAnnotations) {
         self.activeAnnotations = [NSMutableArray arrayWithArray:activeAnnotations];
-                    
-        dispatch_async(dispatch_get_main_queue(), ^{
-            [[NSNotificationCenter defaultCenter] postNotificationName:CPDFListViewActiveAnnotationsChangeNotification object:self];
-            
-            if([self.performDelegate respondsToSelector:@selector(PDFListViewChangeatioActiveAnnotations:forActiveAnnotations:)]) {
-                [self.performDelegate PDFListViewChangeatioActiveAnnotations:self forActiveAnnotations:self.activeAnnotations];
-            }
-        });
-
+        
+        [[NSNotificationCenter defaultCenter] postNotificationName:CPDFListViewActiveAnnotationsChangeNotification object:self];
+        
+        if([self.performDelegate respondsToSelector:@selector(PDFListViewChangeatioActiveAnnotations:forActiveAnnotations:)]) {
+            [self.performDelegate PDFListViewChangeatioActiveAnnotations:self forActiveAnnotations:self.activeAnnotations];
+        }
     } else if (!activeAnnotations && self.activeAnnotations.count > 0) {
         [self.activeAnnotations removeAllObjects];
         

+ 24 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/CAnnotListHeaderInSection.h

@@ -0,0 +1,24 @@
+//
+//  CAnnotListHeaderInSection.h
+//  compdfkit-tools
+//
+//  Copyright © 2014-2023 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.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CAnnotListHeaderInSection : UITableViewHeaderFooterView
+
+- (void)setPageNumber:(NSInteger)number;
+
+- (void)setAnnotsCount:(NSInteger)count;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 117 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/CAnnotListHeaderInSection.m

@@ -0,0 +1,117 @@
+//
+//  CAnnotListHeaderInSection.m
+//  compdfkit-tools
+//
+//  Copyright © 2014-2023 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.
+//
+
+#import "CAnnotListHeaderInSection.h"
+
+#import "CPDFColorUtils.h"
+
+@interface CAnnotListHeaderInSection()
+
+@property (nonatomic, strong) UIView* shadowView;
+
+@property (nonatomic, strong) UILabel* pagenumber;
+
+@property (nonatomic, strong) UILabel* annotscount;
+
+@property (nonatomic, strong) UIView* mainView;
+
+@property (nonatomic, assign) CGFloat mainViewHeight;
+
+@end
+
+@implementation CAnnotListHeaderInSection
+
+- (id)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        _mainViewHeight = frame.size.height;
+        self.contentView.backgroundColor = [CPDFColorUtils CViewBackgroundColor];
+        _mainView = [[UIView alloc] init];
+        _mainView.layer.cornerRadius = 2;
+        _mainView.layer.masksToBounds = YES;
+        [self.contentView addSubview:_mainView];
+    }
+    return self;
+}
+
+- (void)layoutSubviews
+{
+    [super layoutSubviews];
+    
+    CGFloat width = [UIScreen mainScreen].bounds.size.width;
+    if((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) &&
+       ([UIApplication sharedApplication].statusBarOrientation == UIDeviceOrientationLandscapeLeft || [UIApplication sharedApplication].statusBarOrientation == UIDeviceOrientationLandscapeRight))  {
+        width = [UIScreen mainScreen].bounds.size.width - self.window.safeAreaInsets.left;
+    }
+    if ((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)) {
+        width = self.frame.size.width;
+    }
+    
+    _mainView.frame = CGRectMake(0, 0, width - 21, _mainViewHeight);
+    _shadowView.center = _annotscount.center;
+}
+
+- (void)setPageNumber:(NSInteger)number {
+    if (!_pagenumber) {
+        _pagenumber = [[UILabel alloc] init];
+        _pagenumber.backgroundColor = [UIColor clearColor];
+        if (@available(iOS 13.0, *)) {
+            _pagenumber.textColor = [UIColor labelColor];
+        } else {
+            _pagenumber.textColor = [UIColor blackColor];
+        }
+        [_pagenumber setFont:[UIFont systemFontOfSize:13.0f]];
+        [_mainView addSubview:_pagenumber];
+    }
+    
+    _pagenumber.text = [NSString stringWithFormat:NSLocalizedString(@"Page %ld",nil), (long)number];
+    [_pagenumber sizeToFit];
+    
+    CGRect rect = [_pagenumber frame];
+    rect.origin = CGPointMake(16, (self.contentView.frame.size.height-rect.size.height)/2.0);
+    _pagenumber.frame = rect;
+}
+
+- (void)setAnnotsCount:(NSInteger)count {
+    if (!_shadowView) {
+        _shadowView = [[UIView alloc] init];
+        _shadowView.layer.shadowColor = [UIColor blackColor].CGColor;
+        _shadowView.layer.shadowOffset = CGSizeMake(0,1.0);
+        _shadowView.layer.shadowOpacity = 0.3;
+        [_mainView addSubview:_shadowView];
+    }
+    
+    if (!_annotscount) {
+        _annotscount = [[UILabel alloc] init];
+        if (@available(iOS 13.0, *)) {
+            _annotscount.textColor = [UIColor labelColor];
+        } else {
+            _annotscount.textColor = [UIColor blackColor];
+        }
+        [_annotscount setFont:[UIFont boldSystemFontOfSize:13.0f]];
+        _annotscount.textAlignment = NSTextAlignmentCenter;
+        _annotscount.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
+        _annotscount.layer.cornerRadius = 2;
+        _annotscount.layer.masksToBounds = YES;
+        [_mainView addSubview:_annotscount];
+    }
+    
+    _annotscount.text = [NSString stringWithFormat:@"%ld", (long)count];
+    [_annotscount sizeToFit];
+    CGRect rect = [_annotscount frame];
+    rect.size.width = rect.size.width < 8 ? 16 : rect.size.width + 8;
+    rect.size.height = 16;
+    rect.origin = CGPointMake(_mainView.frame.size.width - rect.size.width - 5, (self.contentView.frame.size.height-rect.size.height)/2.0);
+    _annotscount.frame = rect;
+    _shadowView.frame = rect;
+}
+
+@end

+ 34 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/CPDFAnnotationListCell.h

@@ -0,0 +1,34 @@
+//
+//  CPDFAnnotationListCell.h
+//  compdfkit-tools
+//
+//  Copyright © 2014-2023 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.
+//
+
+#import <UIKit/UIKit.h>
+
+@class CPDFAnnotation;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CPDFAnnotationListCell : UITableViewCell
+
+@property(nonatomic, strong) UIImageView *typeImageView;
+
+@property(nonatomic, strong) UILabel *dateLabel;
+
+@property(nonatomic, strong) UILabel *contentLabel;
+
+@property(nonatomic, readonly)CPDFAnnotation *annot;
+
+@property(nonatomic, assign)NSInteger pageNumber;
+
+- (void)updateCellWithAnnotation:(CPDFAnnotation *)annotation;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 283 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/CPDFAnnotationListCell.m

@@ -0,0 +1,283 @@
+//
+//  CPDFAnnotationListCell.m
+//  compdfkit-tools
+//
+//  Copyright © 2014-2023 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.
+//
+
+#import "CPDFAnnotationListCell.h"
+
+#import "CPDFAnnotionColorDrawView.h"
+#import <ComPDFKit/ComPDFKit.h>
+
+@interface CPDFAnnotationListCell()
+
+@property(nonatomic, strong)CPDFAnnotation *annot;
+
+@end
+
+@implementation CPDFAnnotationListCell
+
+- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
+    if (self) {
+        self.backgroundColor = [UIColor clearColor];
+                
+        _typeImageView = [[UIImageView alloc] initWithFrame:CGRectZero];
+        _typeImageView.frame = CGRectMake(15.0, 18.0, 20, 20);
+        [_typeImageView setImage:[UIImage imageNamed:@"CImageNamePDFAnnotationShapeCircle"
+                                            inBundle:[NSBundle bundleForClass:self.class]
+                       compatibleWithTraitCollection:nil]];
+                
+        _dateLabel = [[UILabel alloc] initWithFrame:CGRectZero];
+        [_dateLabel setFont:[UIFont systemFontOfSize:12.0f]];
+        if (@available(iOS 13.0, *)) {
+            [_dateLabel setTextColor:[UIColor secondaryLabelColor]];
+        } else {
+            [_dateLabel setTextColor:[UIColor blackColor]];
+        }
+        _dateLabel.minimumScaleFactor = 0.5;
+        _dateLabel.numberOfLines = 1;
+        _dateLabel.adjustsFontSizeToFitWidth = YES;
+        [_dateLabel setTextAlignment:NSTextAlignmentLeft];
+        [_dateLabel setBackgroundColor:[UIColor clearColor]];
+        
+        _contentLabel = [[UILabel alloc] initWithFrame:CGRectZero];
+        if (@available(iOS 13.0, *)) {
+            [_contentLabel setTextColor:[UIColor secondaryLabelColor]];
+        } else {
+            [_contentLabel setTextColor:[UIColor blackColor]];
+        }
+        _contentLabel.lineBreakMode = NSLineBreakByTruncatingTail;
+        _contentLabel.numberOfLines = 3;
+        _contentLabel.font = [UIFont systemFontOfSize:15.0f];
+        [_contentLabel setBackgroundColor:[UIColor clearColor]];
+                
+        [self.contentView addSubview:_typeImageView];
+        [self.contentView addSubview:_dateLabel];
+        [self.contentView addSubview:_contentLabel];
+    }
+    return self;
+}
+
+- (void)layoutSubviews {
+    [super layoutSubviews];
+        
+    _dateLabel.frame = CGRectMake(43.0, 18, self.contentView.frame.size.width - 43 - 15.0, 20);
+
+    _contentLabel.frame = CGRectMake(15, 51, self.contentView.frame.size.width-30, _contentLabel.frame.size.height);
+}
+
+- (void)setPageNumber:(NSInteger)pageNumber {
+    _dateLabel.text = NSLocalizedString(@"Loading...", nil);
+    
+    _contentLabel.text = @"";
+    [_typeImageView setImage:nil];
+}
+
+- (void)updateCellWithAnnotation:(CPDFAnnotation *)annotation {
+    self.annot = annotation;
+    
+    [self setTypeImage:annotation];
+    
+    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+    formatter.dateFormat = @"yyyy-MM-dd HH:mm";
+    _dateLabel.text = [formatter stringFromDate:annotation.modificationDate];
+    
+    if ([annotation isKindOfClass:[CPDFMarkupAnnotation class]]) {
+        NSString *text = [(CPDFMarkupAnnotation *)annotation markupText];
+        if (text && text.length > 0) {
+            _contentLabel.hidden = NO;
+            _contentLabel.text = text;
+        } else {
+            CPDFPage * page = annotation.page;
+            NSString * exproString = nil;
+            NSArray * points =  [(CPDFMarkupAnnotation*)annotation quadrilateralPoints];
+            NSInteger count = 4;
+            for (NSUInteger i=0; i+count <= points.count;) {
+                CGPoint ptlt = [points[i++] CGPointValue];
+                CGPoint ptrt = [points[i++] CGPointValue];
+                CGPoint ptlb = [points[i++] CGPointValue];
+                CGPoint ptrb = [points[i++] CGPointValue];
+                
+                CGRect rect = CGRectMake(ptlb.x, ptlb.y, ptrt.x - ptlb.x, ptrt.y - ptlb.y);
+                NSString *tString = [page stringForRect:rect];
+                if (tString && tString.length >0) {
+                    if(exproString) {
+                        exproString = [NSString stringWithFormat:@"%@\n%@",exproString,tString];
+                    } else {
+                        exproString  = tString;
+                    }
+                }
+            }
+            
+            if (exproString && exproString.length > 0) {
+                _contentLabel.hidden = NO;
+                _contentLabel.text = exproString;
+            } else {
+                _contentLabel.hidden = YES;
+            }
+        }
+    } else {
+        if ([annotation contents] && ![[annotation contents] isEqualToString:@""]){
+            _contentLabel.hidden = NO;
+            _contentLabel.text = [annotation contents];
+            
+        }else{
+            _contentLabel.hidden = YES;
+        }
+    }
+    [_contentLabel sizeToFit];
+    [_dateLabel sizeToFit];
+}
+
+- (void)setTypeImage:(CPDFAnnotation *)annot {
+    for (UIView* subView in [_typeImageView subviews]) {
+        [subView removeFromSuperview];
+    }
+    
+    if ([annot isKindOfClass:[CPDFCircleAnnotation  class]]) {
+        
+        [_typeImageView setImage:[UIImage imageNamed:@"CImageNamePDFAnnotationShapeCircle"
+                                            inBundle:[NSBundle bundleForClass:self.class]
+                       compatibleWithTraitCollection:nil]];
+    } else if ([annot isKindOfClass:[CPDFFreeTextAnnotation class]]) {
+        [_typeImageView setImage:[UIImage imageNamed:@"CImageNamePDFAnnotationText"
+                                            inBundle:[NSBundle bundleForClass:self.class]
+                       compatibleWithTraitCollection:nil]];
+    } else if ([annot isKindOfClass:[CPDFInkAnnotation  class]]) {
+        dispatch_async(dispatch_get_main_queue(), ^{
+            UIColor* color = [annot color];
+            CPDFAnnotionColorDrawView* drawView = [self getTextMarkColorView:annot size:self.typeImageView.bounds.size color:color];
+            [self.typeImageView addSubview:drawView];
+            [self.typeImageView setImage:[UIImage imageNamed:@"CImageNamePDFAnnotationFreehand"
+                                                    inBundle:[NSBundle bundleForClass:self.class]
+                               compatibleWithTraitCollection:nil]];
+        });
+    } else if ([annot isKindOfClass:[CPDFLineAnnotation  class]]) {
+        if ([(CPDFLineAnnotation  *)annot startLineStyle] == CPDFLineStyleClosedArrow ||
+            [(CPDFLineAnnotation  *)annot endLineStyle] == CPDFLineStyleClosedArrow) {
+            [_typeImageView setImage:[UIImage imageNamed:@"CImageNamePDFAnnotationShapeArrow"
+                                                inBundle:[NSBundle bundleForClass:self.class]
+                           compatibleWithTraitCollection:nil]];
+        } else {
+            [_typeImageView setImage:[UIImage imageNamed:@"CImageNamePDFAnnotationShapeLine"
+                                                inBundle:[NSBundle bundleForClass:self.class]
+                           compatibleWithTraitCollection:nil]];
+        }
+    } else if ([annot isKindOfClass:[CPDFLinkAnnotation class]]){
+        //do nothing
+    } else if ([annot isKindOfClass:[CPDFSoundAnnotation class]] || [annot isKindOfClass:[CPDFMovieAnnotation  class]]) {
+        //add type
+        [_typeImageView setImage:[UIImage imageNamed:@"CImageNamePDFAnnotationRecord"
+                                            inBundle:[NSBundle bundleForClass:self.class]
+                       compatibleWithTraitCollection:nil]];
+    } else if ([annot isKindOfClass:[CPDFTextAnnotation class]]) {
+        [_typeImageView setImage:[UIImage imageNamed:@"CImageNamePDFAnnotationNote"
+                                            inBundle:[NSBundle bundleForClass:self.class]
+                       compatibleWithTraitCollection:nil]];
+    } else if ([annot isKindOfClass:[CPDFSquareAnnotation  class]]) {
+        [_typeImageView setImage:[UIImage imageNamed:@"CImageNamePDFAnnotationShapeRectangle"
+                                            inBundle:[NSBundle bundleForClass:self.class]
+                       compatibleWithTraitCollection:nil]];
+    } else if ([annot isKindOfClass:[CPDFStampAnnotation class]]) {
+        if (CPDFStampTypeImage == [(CPDFStampAnnotation *)annot stampType]) {
+            [_typeImageView setImage:[UIImage imageNamed:@"CImageNamePDFAnnotationPhoto"
+                                                inBundle:[NSBundle bundleForClass:self.class]
+                           compatibleWithTraitCollection:nil]];
+        } else {
+            [_typeImageView setImage:[UIImage imageNamed:@"CImageNamePDFAnnotationStamp"
+                                                inBundle:[NSBundle bundleForClass:self.class]
+                           compatibleWithTraitCollection:nil]];
+        }
+    } else if ([annot isKindOfClass:[CPDFMarkupAnnotation class]]){
+        UIColor* color = [annot color];
+        CPDFMarkupType markupType = [(CPDFMarkupAnnotation *)annot markupType];
+        switch (markupType) {
+            case CPDFMarkupTypeHighlight:
+                [_typeImageView setImage:[UIImage imageNamed:@"CImageNamePDFAnnotationHighlight"
+                                                    inBundle:[NSBundle bundleForClass:self.class]
+                               compatibleWithTraitCollection:nil]];
+                break;
+            case CPDFMarkupTypeUnderline:
+                [_typeImageView setImage:[UIImage imageNamed:@"CImageNamePDFAnnotationUnderline"
+                                                    inBundle:[NSBundle bundleForClass:self.class]
+                               compatibleWithTraitCollection:nil]];
+                break;
+            case CPDFMarkupTypeStrikeOut:
+                [_typeImageView setImage:[UIImage imageNamed:@"CImageNamePDFAnnotationStrikethrough"
+                                                    inBundle:[NSBundle bundleForClass:self.class]
+                               compatibleWithTraitCollection:nil]];
+                break;
+            case CPDFMarkupTypeSquiggly:
+                [_typeImageView setImage:[UIImage imageNamed:@"CImageNamePDFAnnotationUnderline"
+                                                    inBundle:[NSBundle bundleForClass:self.class]
+                               compatibleWithTraitCollection:nil]];
+                break;
+            default:
+                break;
+        }
+        dispatch_async(dispatch_get_main_queue(), ^{
+            CPDFAnnotionColorDrawView* drawView = [self getTextMarkColorView:annot size:self.typeImageView.bounds.size color:color];
+            [self.typeImageView addSubview:drawView];
+        });
+    } else if ([annot isKindOfClass:[CPDFSignatureAnnotation class]]) {
+        [_typeImageView setImage:[UIImage imageNamed:@"CImageNamePDFAnnotationSign"
+                                            inBundle:[NSBundle bundleForClass:self.class]
+                       compatibleWithTraitCollection:nil]];
+    }
+
+}
+
+- (CPDFAnnotionColorDrawView*) getTextMarkColorView:(CPDFAnnotation *)annotation size:(CGSize)size color:(UIColor*)color {
+    CPDFAnnotionMarkUpType markupType;
+    CPDFAnnotionColorDrawView* drawView = [[CPDFAnnotionColorDrawView alloc] initWithFrame:CGRectZero];
+    drawView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth;
+    
+        float tHeight  = 20;
+        float tWidth  = 20;
+        float tSpaceY   = 8;
+        float tOffsetX = (size.width - tWidth)/2;
+        
+        if ([annotation isKindOfClass:[CPDFMarkupAnnotation class]]) {
+            CPDFMarkupType type = [(CPDFMarkupAnnotation *)annotation markupType];
+            switch (type) {
+                case CPDFMarkupTypeHighlight:
+                    markupType = CPDFAnnotionMarkUpTypeHighlight;
+                    drawView.frame = CGRectMake(tOffsetX, (size.height - tHeight)/2, tWidth, tHeight);
+                    break;
+                case CPDFMarkupTypeUnderline:
+                    markupType = CPDFAnnotionMarkUpTypeUnderline;
+                    tHeight = 2.0;
+                    drawView.frame = CGRectMake(tOffsetX, size.height - tHeight- tSpaceY, tWidth, tHeight);
+                    break;
+                case CPDFMarkupTypeStrikeOut:
+                    markupType = CPDFAnnotionMarkUpTypeStrikeout;
+                    tHeight = 2.0;
+                    drawView.frame = CGRectMake(tOffsetX, (size.height - tHeight)/2, tWidth, tHeight);
+                    break;
+                case CPDFMarkupTypeSquiggly:
+                    markupType = CPDFAnnotionMarkUpTypeSquiggly;
+                    tHeight = 6.0;
+                    drawView.frame = CGRectMake(tOffsetX, size.height - tHeight - tSpaceY, tWidth, tHeight);
+                    break;
+                default:
+                    break;
+            }
+        } else if ([annotation isKindOfClass:[CPDFInkAnnotation class]]) {
+            markupType = CPDFAnnotionMarkUpTypeFreehand;
+            tHeight = 6.0;
+            drawView.frame = CGRectMake(tOffsetX, size.height - tHeight - tSpaceY, tWidth, tHeight);
+        }
+        drawView.markUpType = markupType;
+        drawView.lineColor = color;
+        [drawView setNeedsDisplay];
+    
+    return drawView;
+}
+
+@end

+ 37 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/CPDFAnnotationViewController.h

@@ -0,0 +1,37 @@
+//
+//  CPDFAnnotationViewController.h
+//  compdfkit-tools
+//
+//  Copyright © 2014-2023 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.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class CPDFView;
+@class CPDFAnnotation;
+@class CPDFAnnotationViewController;
+
+@protocol CPDFAnnotationViewControllerDelegate <NSObject>
+
+- (void)annotationViewController:(CPDFAnnotationViewController *)annotationViewController jumptoPage:(NSInteger)pageIndex selectAnnot:(CPDFAnnotation*)annot;
+
+@end
+
+
+@interface CPDFAnnotationViewController : UIViewController
+
+@property (nonatomic, readonly) CPDFView *pdfView;
+
+@property (nonatomic, weak) id<CPDFAnnotationViewControllerDelegate> delegate;
+
+- (instancetype)initWithPDFView:(CPDFView *)pdfView;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 295 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/CPDFAnnotationViewController.m

@@ -0,0 +1,295 @@
+//
+//  CPDFAnnotationViewController.m
+//  compdfkit-tools
+//
+//  Copyright © 2014-2023 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.
+//
+
+#import "CPDFAnnotationViewController.h"
+
+#import "CAnnotListHeaderInSection.h"
+#import "CPDFAnnotationListCell.h"
+#import "CActivityIndicatorView.h"
+
+#import <ComPDFKit/ComPDFKit.h>
+
+@interface CPDFAnnotationViewController ()<UITableViewDelegate, UITableViewDataSource>
+
+@property (nonatomic, strong) UITableView* tableView;
+
+@property (nonatomic, strong) NSMutableArray* sequenceList;
+
+@property (nonatomic, strong) NSMutableDictionary* annotsDict;
+
+@property (nonatomic, strong) NSMutableDictionary* totalAnnotlistDict;
+
+@property (nonatomic, strong) NSMutableArray *selectIndexArray;
+
+@property (nonatomic, strong) UILabel* emptyLabel;
+
+@property (nonatomic, strong) CPDFView *pdfView;
+
+@property (nonatomic, strong) CActivityIndicatorView* activityView;
+
+@property (nonatomic,assign) BOOL stopLoadAnnots;
+
+@end
+
+@implementation CPDFAnnotationViewController
+
+- (instancetype)initWithPDFView:(CPDFView *)pdfView {
+    if (self = [super init]) {
+        self.pdfView = pdfView;
+    }
+    return self;
+}
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    
+    _tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
+    _tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
+    _tableView.delegate = self;
+    _tableView.dataSource = self;
+    _tableView.separatorStyle=UITableViewCellSeparatorStyleNone;
+    _tableView.rowHeight = UITableViewAutomaticDimension;
+    _tableView.estimatedRowHeight = 60;
+    _tableView.tableFooterView = [[UIView alloc] init];
+    [self.view addSubview:self.tableView];
+    
+    self.emptyLabel.hidden = YES;
+
+    // Do any additional setup after loading the view.
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    
+    self.stopLoadAnnots = NO;
+    
+    [self.activityView startAnimating];
+    
+    [self loadAndRefreshAnnots];
+}
+
+- (void)viewWillDisappear:(BOOL)animated {
+    [super viewWillDisappear:animated];
+    
+    self.stopLoadAnnots = YES;
+}
+
+#pragma mark - Asset
+
+- (UILabel *)emptyLabel {
+    if (!_emptyLabel) {
+        _emptyLabel = [[UILabel alloc] init];
+        if (@available(iOS 13.0, *)) {
+            [_emptyLabel setTextColor:[UIColor labelColor]];
+        } else {
+            [_emptyLabel setTextColor:[UIColor blackColor]];
+        }
+        _emptyLabel.font = [UIFont boldSystemFontOfSize:16.0];
+        _emptyLabel.text = NSLocalizedString(@"No annotations", nil);
+        [_emptyLabel sizeToFit];
+        [self.view addSubview:_emptyLabel];
+        [self.view bringSubviewToFront:_emptyLabel];
+        _emptyLabel.frame = CGRectMake((self.view.frame.size.width - _emptyLabel.frame.size.width)/2, (self.view.frame.size.height - _emptyLabel.frame.size.height)/2, _emptyLabel.frame.size.width, _emptyLabel.frame.size.height);
+        _emptyLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
+    }
+    return _emptyLabel;
+}
+
+- (CActivityIndicatorView *)activityView {
+    if (!_activityView) {
+        _activityView = [[CActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
+        _activityView.center = self.view.center;
+        _activityView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
+    }
+    return _activityView;
+}
+
+- (void)loadAndRefreshAnnots {
+    self.stopLoadAnnots = NO;
+
+    self.totalAnnotlistDict = [[NSMutableDictionary alloc] init];
+    self.annotsDict = [[NSMutableDictionary alloc] init];
+    self.sequenceList = [[NSMutableArray alloc] init];
+    
+    [self.activityView startAnimating];
+    
+    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+        NSInteger pageCount = self.pdfView.document.pageCount;
+        NSInteger currentPage = 0;
+        for (NSInteger i=0; i < pageCount; i++) {
+            if (self.stopLoadAnnots) {
+                break;
+            }
+            
+            currentPage = i;
+            CPDFPage *page = [self.pdfView.document pageAtIndex:i];
+            NSArray *annotations = page.annotations;
+            NSMutableArray *annotsInpage = [NSMutableArray array];
+            for (CPDFAnnotation *annotation in annotations) {
+                if (![annotation isKindOfClass:[CPDFWidgetAnnotation  class]] &&
+                    ![annotation isKindOfClass:[CPDFLinkAnnotation class]] &&
+                    ![annotation isKindOfClass:[CPDFSignatureAnnotation class]]) {
+                    [annotsInpage addObject:annotation];
+                }
+            }
+            if ([annotsInpage count] > 0) {
+                NSArray *sortArray = [self annotSort:(NSArray *)annotsInpage];
+                if (sortArray) {
+                    [self.totalAnnotlistDict setObject:[NSMutableArray arrayWithArray:sortArray] forKey:[NSNumber numberWithInteger:i]];
+                    [self.sequenceList addObject:[NSNumber numberWithInteger:i]];
+                }
+            }
+            
+            if (currentPage == pageCount - 1) {
+                self.stopLoadAnnots = YES;
+            }
+        }
+        [self.totalAnnotlistDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
+            [self.annotsDict setObject:[NSMutableArray arrayWithArray:obj] forKey:key];
+        }];
+        dispatch_async(dispatch_get_main_queue(), ^{
+            [self.activityView stopAnimating];
+            [self.tableView reloadData];
+        });
+    });
+}
+
+- (NSMutableArray *)selectIndexArray {
+    if (!_selectIndexArray) {
+        _selectIndexArray = [[NSMutableArray alloc] init];
+    }
+    return _selectIndexArray;
+}
+
+static NSInteger sortByDate(CPDFAnnotation *annot1, CPDFAnnotation *annot2, void *context) {
+    return NSOrderedAscending;
+}
+
+- (NSArray *)annotSort:(NSArray *)array {
+    NSArray *result;
+    NSInteger (*sortFunction)(id, id, void *) = NULL;
+    sortFunction = sortByDate;
+    
+    if (sortFunction) {
+        result = [array sortedArrayUsingFunction:sortFunction context:NULL];
+    } else {
+        result = array;
+    }
+    
+    return result;
+}
+
+#pragma mark - tableView Delegate
+
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
+    NSInteger count = [self.sequenceList count];
+    if (count < 1) {
+        self.emptyLabel.hidden = NO;
+    } else {
+        self.emptyLabel.hidden = YES;
+    }
+
+    return count;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    if ([self.sequenceList count] == section)
+        return 1;
+    
+    if (section >= self.sequenceList.count) {
+        return 0;
+    }
+    NSNumber *key = [self.sequenceList objectAtIndex:section];
+    NSArray *val = [self.annotsDict objectForKey:key];
+    
+    return [val count];
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
+    if ([self.sequenceList count] == section) {
+        return 0;
+    }
+    return 44.0;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    if ([self.sequenceList count] == indexPath.section){
+        return 44;
+    }
+    
+    NSNumber *key = [self.sequenceList objectAtIndex:indexPath.section];
+    NSArray *val = [self.annotsDict objectForKey:key];
+    
+    CPDFAnnotation *annot = [val objectAtIndex:indexPath.row];
+    if ([annot isKindOfClass:[CPDFMarkupAnnotation class]]){
+        return 44 + 60;
+        
+    }else if (([annot contents] && ![[annot contents] isEqualToString:@""])){
+        return 44 + 60;
+    }else{
+        return 40;
+    }
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
+    if ([self.sequenceList count] == section)
+        return nil;
+    
+    if (section >= self.sequenceList.count) {
+        return nil;
+    }
+    
+    NSNumber *key = [self.sequenceList objectAtIndex:section];
+    NSArray *val = [self.annotsDict objectForKey:key];
+    
+    CAnnotListHeaderInSection *headerView = [[CAnnotListHeaderInSection alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 44.0)];
+    [headerView setPageNumber:[key integerValue] + 1];
+    [headerView setAnnotsCount:[val count]];
+    
+    return headerView;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    CPDFAnnotationListCell *cell = (CPDFAnnotationListCell*)[tableView dequeueReusableCellWithIdentifier:@"cell"];
+    if (cell == nil) {
+        cell = [[CPDFAnnotationListCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
+    }
+    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
+    if ([self.sequenceList count] == indexPath.section){
+ 
+    }else{
+        NSNumber *key = [self.sequenceList objectAtIndex:indexPath.section];
+        NSArray *val = [self.annotsDict objectForKey:key];
+        CPDFAnnotation *annot = [val objectAtIndex:indexPath.row];
+        
+        [cell updateCellWithAnnotation:annot];
+    }
+    return cell;
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if ([self.sequenceList count] == indexPath.section){
+        return;
+    }
+    
+    NSNumber *key = [self.sequenceList objectAtIndex:indexPath.section];
+    NSArray *val = [self.annotsDict objectForKey:key];
+    CPDFAnnotation *annot = [val objectAtIndex:indexPath.row];
+    
+    if ([self.delegate respondsToSelector:@selector(annotationViewController:jumptoPage:selectAnnot:)]) {
+        [self.delegate annotationViewController:self jumptoPage:[key integerValue] selectAnnot:annot];
+    }
+
+}
+
+
+@end

+ 33 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/CPDFAnnotionColorDrawView.h

@@ -0,0 +1,33 @@
+//
+//  CPDFAnnotionColorDrawView.h
+//  compdfkit-tools
+//
+//  Copyright © 2014-2023 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.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef NS_ENUM(NSInteger, CPDFAnnotionMarkUpType) {
+    CPDFAnnotionMarkUpTypeHighlight,
+    CPDFAnnotionMarkUpTypeUnderline,
+    CPDFAnnotionMarkUpTypeStrikeout,
+    CPDFAnnotionMarkUpTypeSquiggly,
+    CPDFAnnotionMarkUpTypeFreehand
+};
+
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CPDFAnnotionColorDrawView : UIView
+
+@property(nonatomic, strong)UIColor * lineColor;
+
+@property(nonatomic, assign)CPDFAnnotionMarkUpType markUpType;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 58 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/CPDFAnnotionColorDrawView.m

@@ -0,0 +1,58 @@
+//
+//  CPDFAnnotionColorDrawView.m
+//  compdfkit-tools
+//
+//  Copyright © 2014-2023 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.
+//
+
+#import "CPDFAnnotionColorDrawView.h"
+
+@implementation CPDFAnnotionColorDrawView
+
+- (id)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        // Initialization code
+        self.backgroundColor = [UIColor clearColor];
+        self.alpha = 0.7;
+        self.userInteractionEnabled = NO;
+    }
+    return self;
+}
+
+
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect
+{
+    CGContextRef ctx = UIGraphicsGetCurrentContext();
+    if (!ctx) {
+        return;
+    }
+    
+    CGContextSetStrokeColorWithColor(ctx, _lineColor.CGColor);
+    if (CPDFAnnotionMarkUpTypeUnderline == _markUpType ||
+        CPDFAnnotionMarkUpTypeStrikeout == _markUpType) {
+        CGContextMoveToPoint(ctx, 0, 0);
+        CGContextSetLineWidth(ctx, self.frame.size.width);
+        CGContextAddLineToPoint(ctx, self.frame.size.width, 0);
+    }else if (CPDFAnnotionMarkUpTypeHighlight == _markUpType){
+        CGContextMoveToPoint(ctx, 0, self.frame.size.height/2);
+        CGContextSetLineWidth(ctx, self.frame.size.height);
+        CGContextAddLineToPoint(ctx, self.frame.size.width, self.frame.size.height/2);
+    } else if (CPDFAnnotionMarkUpTypeSquiggly == _markUpType || CPDFAnnotionMarkUpTypeFreehand == _markUpType) {
+        float tWidth = self.frame.size.width / 6.0;
+        CGContextMoveToPoint(ctx, 0, self.frame.size.height/2.0);//设置Path的起点
+        CGContextSetLineWidth(ctx, 2.0);
+        CGContextAddCurveToPoint(ctx,tWidth,self.frame.size.height,tWidth*2.0,0.0,tWidth*3.0,self.frame.size.height/2.0);
+        CGContextAddCurveToPoint(ctx,tWidth*4.0,self.frame.size.height,tWidth*5.0,0.0,tWidth*6.0,self.frame.size.height/2.0);
+    }
+    CGContextStrokePath(ctx);
+}
+
+
+@end

+ 22 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationFreehand.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "ic.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "ic 1.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 78 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationFreehand.imageset/ic 1.pdf

@@ -0,0 +1,78 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+0.707107 -0.707107 0.707107 0.707107 -1.393567 2.849231 cm
+1.000000 1.000000 1.000000 scn
+0.000000 16.970581 m
+6.000000 16.970581 l
+6.000000 13.955862 l
+0.000000 13.955862 l
+0.000000 16.970581 l
+h
+0.000000 12.955862 m
+0.000000 3.970581 l
+3.000000 -1.029419 l
+6.000000 3.970581 l
+6.000000 12.955862 l
+0.000000 12.955862 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  360
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 14.849121 14.849243 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000450 00000 n
+0000000472 00000 n
+0000000645 00000 n
+0000000719 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+778
+%%EOF

+ 78 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationFreehand.imageset/ic.pdf

@@ -0,0 +1,78 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+0.707107 -0.707107 0.707107 0.707107 -1.393554 2.849244 cm
+0.262745 0.278431 0.301961 scn
+0.000000 16.970562 m
+6.000000 16.970562 l
+6.000000 13.955843 l
+0.000000 13.955843 l
+0.000000 16.970562 l
+h
+0.000000 12.955843 m
+0.000000 3.970562 l
+3.000000 -1.029438 l
+6.000000 3.970562 l
+6.000000 12.955843 l
+0.000000 12.955843 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  360
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 14.849121 14.849243 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000450 00000 n
+0000000472 00000 n
+0000000645 00000 n
+0000000719 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+778
+%%EOF

+ 12 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationHighlight.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "ic.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 88 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationHighlight.imageset/ic.pdf

@@ -0,0 +1,88 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
+0.262745 0.278431 0.301961 scn
+12.607775 0.999998 m
+7.696358 13.278542 l
+6.303642 13.278542 l
+1.392225 0.999998 l
+0.000000 0.999998 l
+0.000000 -0.000002 l
+4.000000 -0.000002 l
+4.000000 0.999998 l
+3.007762 0.999998 l
+4.107717 3.749998 l
+9.892282 3.749998 l
+10.992238 0.999998 l
+10.000000 0.999998 l
+10.000000 -0.000002 l
+14.000000 -0.000002 l
+14.000000 0.999998 l
+12.607775 0.999998 l
+h
+9.492299 4.749998 m
+7.000000 10.980999 l
+4.507701 4.749998 l
+9.492299 4.749998 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  564
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 14.000000 13.278542 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000654 00000 n
+0000000676 00000 n
+0000000849 00000 n
+0000000923 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+982
+%%EOF

+ 22 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationNote.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "note.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "note 1.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 86 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationNote.imageset/note 1.pdf

@@ -0,0 +1,86 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 2.000000 2.000000 cm
+1.000000 1.000000 1.000000 scn
+16.000000 15.000000 m
+0.000000 15.000000 l
+0.000000 3.000000 l
+3.000000 3.000000 l
+3.000000 0.000000 l
+8.000000 3.000000 l
+16.000000 3.000000 l
+16.000000 15.000000 l
+h
+3.000000 12.000000 m
+9.000000 12.000000 l
+9.000000 10.500000 l
+3.000000 10.500000 l
+3.000000 12.000000 l
+h
+3.000000 8.500000 m
+13.000000 8.500000 l
+13.000000 7.000000 l
+3.000000 7.000000 l
+3.000000 8.500000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  505
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000595 00000 n
+0000000617 00000 n
+0000000790 00000 n
+0000000864 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+923
+%%EOF

+ 86 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationNote.imageset/note.pdf

@@ -0,0 +1,86 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 2.000000 2.000000 cm
+0.262745 0.278431 0.301961 scn
+16.000000 15.000000 m
+0.000000 15.000000 l
+0.000000 3.000000 l
+3.000000 3.000000 l
+3.000000 0.000000 l
+8.000000 3.000000 l
+16.000000 3.000000 l
+16.000000 15.000000 l
+h
+3.000000 12.000000 m
+9.000000 12.000000 l
+9.000000 10.500000 l
+3.000000 10.500000 l
+3.000000 12.000000 l
+h
+3.000000 8.500000 m
+13.000000 8.500000 l
+13.000000 7.000000 l
+3.000000 7.000000 l
+3.000000 8.500000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  505
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000595 00000 n
+0000000617 00000 n
+0000000790 00000 n
+0000000864 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+923
+%%EOF

+ 22 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationPhoto.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "nor.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "nor 1.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 87 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationPhoto.imageset/nor 1.pdf

@@ -0,0 +1,87 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 1.250000 3.250000 cm
+1.000000 1.000000 1.000000 scn
+0.000000 13.500000 m
+17.500000 13.500000 l
+17.500000 0.000000 l
+0.000000 0.000000 l
+0.000000 13.500000 l
+h
+16.000000 12.000000 m
+1.500000 12.000000 l
+1.500000 3.540523 l
+4.544956 6.750000 l
+8.814282 3.250000 l
+11.121848 5.682244 l
+15.894180 1.500000 l
+16.000000 1.500000 l
+16.000000 12.000000 l
+h
+13.250000 7.750000 m
+14.078427 7.750000 14.750000 8.421573 14.750000 9.250000 c
+14.750000 10.078427 14.078427 10.750000 13.250000 10.750000 c
+12.421573 10.750000 11.750000 10.078427 11.750000 9.250000 c
+11.750000 8.421573 12.421573 7.750000 13.250000 7.750000 c
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  687
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000777 00000 n
+0000000799 00000 n
+0000000972 00000 n
+0000001046 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1105
+%%EOF

+ 87 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationPhoto.imageset/nor.pdf

@@ -0,0 +1,87 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 1.250000 3.250000 cm
+0.262745 0.278431 0.301961 scn
+0.000000 13.500000 m
+17.500000 13.500000 l
+17.500000 0.000000 l
+0.000000 0.000000 l
+0.000000 13.500000 l
+h
+16.000000 12.000000 m
+1.500000 12.000000 l
+1.500000 3.540523 l
+4.544956 6.750000 l
+8.814282 3.250000 l
+11.121848 5.682244 l
+15.894180 1.500000 l
+16.000000 1.500000 l
+16.000000 12.000000 l
+h
+13.250000 7.750000 m
+14.078427 7.750000 14.750000 8.421573 14.750000 9.250000 c
+14.750000 10.078427 14.078427 10.750000 13.250000 10.750000 c
+12.421573 10.750000 11.750000 10.078427 11.750000 9.250000 c
+11.750000 8.421573 12.421573 7.750000 13.250000 7.750000 c
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  687
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000777 00000 n
+0000000799 00000 n
+0000000972 00000 n
+0000001046 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1105
+%%EOF

+ 22 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationRecord.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "music 1.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "music.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 109 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationRecord.imageset/music 1.pdf

@@ -0,0 +1,109 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.719458 cm
+0.262745 0.278431 0.301961 scn
+9.500000 16.680542 m
+9.500000 15.340271 l
+9.500000 1.340271 l
+9.500000 0.000000 l
+8.357699 0.701053 l
+3.975866 3.390271 l
+0.750000 3.390271 l
+0.000000 3.390271 l
+0.000000 4.140271 l
+0.000000 12.540271 l
+0.000000 13.290271 l
+0.750000 13.290271 l
+3.975867 13.290271 l
+8.357699 15.979489 l
+9.500000 16.680542 l
+h
+8.000000 14.000000 m
+4.579960 11.901052 l
+4.399451 11.790271 l
+4.187658 11.790271 l
+1.500000 11.790271 l
+1.500000 4.890271 l
+4.187658 4.890271 l
+4.399451 4.890271 l
+4.579959 4.779489 l
+8.000000 2.680542 l
+8.000000 14.000000 l
+h
+16.672375 8.609959 m
+16.672375 11.367714 14.461385 13.590271 11.750000 13.590271 c
+11.750000 15.090271 l
+15.304147 15.090271 18.172375 12.181732 18.172375 8.609959 c
+18.172375 5.038186 15.304147 2.129646 11.750000 2.129646 c
+11.750000 3.629646 l
+14.461385 3.629646 16.672375 5.852204 16.672375 8.609959 c
+h
+12.000000 10.530542 m
+12.542832 10.530542 13.250000 9.911864 13.250000 8.780542 c
+13.250000 7.649220 12.542832 7.030542 12.000000 7.030542 c
+12.000000 5.530542 l
+13.666307 5.530542 14.750000 7.150440 14.750000 8.780542 c
+14.750000 10.410645 13.666307 12.030542 12.000000 12.030542 c
+12.000000 10.530542 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  1278
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000001368 00000 n
+0000001391 00000 n
+0000001564 00000 n
+0000001638 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1697
+%%EOF

+ 109 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationRecord.imageset/music.pdf

@@ -0,0 +1,109 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 1.000000 1.719482 cm
+1.000000 1.000000 1.000000 scn
+9.500000 16.680542 m
+9.500000 15.340271 l
+9.500000 1.340271 l
+9.500000 0.000000 l
+8.357699 0.701053 l
+3.975866 3.390271 l
+0.750000 3.390271 l
+0.000000 3.390271 l
+0.000000 4.140271 l
+0.000000 12.540271 l
+0.000000 13.290271 l
+0.750000 13.290271 l
+3.975867 13.290271 l
+8.357699 15.979489 l
+9.500000 16.680542 l
+h
+8.000000 14.000000 m
+4.579960 11.901052 l
+4.399451 11.790271 l
+4.187658 11.790271 l
+1.500000 11.790271 l
+1.500000 4.890271 l
+4.187658 4.890271 l
+4.399451 4.890271 l
+4.579959 4.779489 l
+8.000000 2.680542 l
+8.000000 14.000000 l
+h
+16.672375 8.609959 m
+16.672375 11.367714 14.461385 13.590271 11.750000 13.590271 c
+11.750000 15.090271 l
+15.304147 15.090271 18.172375 12.181732 18.172375 8.609959 c
+18.172375 5.038186 15.304147 2.129646 11.750000 2.129646 c
+11.750000 3.629646 l
+14.461385 3.629646 16.672375 5.852204 16.672375 8.609959 c
+h
+12.000000 10.530542 m
+12.542832 10.530542 13.250000 9.911864 13.250000 8.780542 c
+13.250000 7.649220 12.542832 7.030542 12.000000 7.030542 c
+12.000000 5.530542 l
+13.666307 5.530542 14.750000 7.150440 14.750000 8.780542 c
+14.750000 10.410645 13.666307 12.030542 12.000000 12.030542 c
+12.000000 10.530542 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  1278
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000001368 00000 n
+0000001391 00000 n
+0000001564 00000 n
+0000001638 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1697
+%%EOF

+ 22 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeArrow.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "arrow 1.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "arrow.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 76 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeArrow.imageset/arrow 1.pdf

@@ -0,0 +1,76 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 1.469727 1.469669 cm
+0.262745 0.278431 0.301961 scn
+15.280330 8.530331 m
+15.280330 15.280331 l
+8.530330 15.280331 l
+8.530330 13.780331 l
+12.719670 13.780331 l
+0.000000 1.060660 l
+1.060660 0.000000 l
+13.780330 12.719669 l
+13.780330 8.530331 l
+15.280330 8.530331 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  339
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000429 00000 n
+0000000451 00000 n
+0000000624 00000 n
+0000000698 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+757
+%%EOF

+ 76 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeArrow.imageset/arrow.pdf

@@ -0,0 +1,76 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 1.469727 1.469727 cm
+1.000000 1.000000 1.000000 scn
+15.280330 8.530273 m
+15.280330 15.280273 l
+8.530330 15.280273 l
+8.530330 13.780273 l
+12.719670 13.780273 l
+0.000000 1.060603 l
+1.060660 -0.000057 l
+13.780330 12.719612 l
+13.780330 8.530273 l
+15.280330 8.530273 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  340
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000430 00000 n
+0000000452 00000 n
+0000000625 00000 n
+0000000699 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+758
+%%EOF

+ 22 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeCircle.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "oval.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "oval 1.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 77 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeCircle.imageset/oval 1.pdf

@@ -0,0 +1,77 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 1.750000 1.750000 cm
+1.000000 1.000000 1.000000 scn
+8.250000 16.500000 m
+3.693651 16.500000 0.000000 12.806349 0.000000 8.250000 c
+0.000000 3.693651 3.693651 0.000000 8.250000 0.000000 c
+12.806349 0.000000 16.500000 3.693651 16.500000 8.250000 c
+16.500000 12.806349 12.806349 16.500000 8.250000 16.500000 c
+h
+8.250000 15.000000 m
+11.977922 15.000000 15.000000 11.977922 15.000000 8.250000 c
+15.000000 4.522078 11.977922 1.500000 8.250000 1.500000 c
+4.522078 1.500000 1.500000 4.522078 1.500000 8.250000 c
+1.500000 11.977922 4.522078 15.000000 8.250000 15.000000 c
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  640
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000730 00000 n
+0000000752 00000 n
+0000000925 00000 n
+0000000999 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1058
+%%EOF

+ 77 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeCircle.imageset/oval.pdf

@@ -0,0 +1,77 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 1.750000 1.750000 cm
+0.262745 0.278431 0.301961 scn
+8.250000 16.500000 m
+3.693651 16.500000 0.000000 12.806349 0.000000 8.250000 c
+0.000000 3.693651 3.693651 0.000000 8.250000 0.000000 c
+12.806349 0.000000 16.500000 3.693651 16.500000 8.250000 c
+16.500000 12.806349 12.806349 16.500000 8.250000 16.500000 c
+h
+8.250000 15.000000 m
+11.977922 15.000000 15.000000 11.977922 15.000000 8.250000 c
+15.000000 4.522078 11.977922 1.500000 8.250000 1.500000 c
+4.522078 1.500000 1.500000 4.522078 1.500000 8.250000 c
+1.500000 11.977922 4.522078 15.000000 8.250000 15.000000 c
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  640
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000730 00000 n
+0000000752 00000 n
+0000000925 00000 n
+0000000999 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1058
+%%EOF

+ 22 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeLine.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "line 1.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "line.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 71 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeLine.imageset/line 1.pdf

@@ -0,0 +1,71 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 2.469727 1.469669 cm
+0.262745 0.278431 0.301961 scn
+14.000000 15.060661 m
+15.060660 14.000001 l
+1.060660 0.000001 l
+0.000000 1.060661 l
+14.000000 15.060661 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  234
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000324 00000 n
+0000000346 00000 n
+0000000519 00000 n
+0000000593 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+652
+%%EOF

+ 71 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeLine.imageset/line.pdf

@@ -0,0 +1,71 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 2.469727 1.469604 cm
+1.000000 1.000000 1.000000 scn
+14.000000 15.060669 m
+15.060660 14.000009 l
+1.060660 0.000009 l
+0.000000 1.060669 l
+14.000000 15.060669 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  234
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000324 00000 n
+0000000346 00000 n
+0000000519 00000 n
+0000000593 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+652
+%%EOF

+ 22 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeRectangle.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "rec.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "rec 1.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 77 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeRectangle.imageset/rec 1.pdf

@@ -0,0 +1,77 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 1.250000 3.250000 cm
+1.000000 1.000000 1.000000 scn
+17.500000 13.500000 m
+0.000000 13.500000 l
+0.000000 0.000000 l
+17.500000 0.000000 l
+17.500000 13.500000 l
+h
+16.000000 12.000000 m
+16.000000 1.500000 l
+1.500000 1.500000 l
+1.500000 12.000000 l
+16.000000 12.000000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  342
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000432 00000 n
+0000000454 00000 n
+0000000627 00000 n
+0000000701 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+760
+%%EOF

+ 77 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationShapeRectangle.imageset/rec.pdf

@@ -0,0 +1,77 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 1.250000 3.250000 cm
+0.262745 0.278431 0.301961 scn
+17.500000 13.500000 m
+0.000000 13.500000 l
+0.000000 0.000000 l
+17.500000 0.000000 l
+17.500000 13.500000 l
+h
+16.000000 12.000000 m
+16.000000 1.500000 l
+1.500000 1.500000 l
+1.500000 12.000000 l
+16.000000 12.000000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  342
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000432 00000 n
+0000000454 00000 n
+0000000627 00000 n
+0000000701 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+760
+%%EOF

+ 22 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationSign.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "nor.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "nor 1.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 108 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationSign.imageset/nor 1.pdf

@@ -0,0 +1,108 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 0.889160 1.483276 cm
+1.000000 1.000000 1.000000 scn
+16.202795 12.859945 m
+11.253048 17.809692 l
+8.071068 13.213499 l
+4.181981 12.152838 l
+4.181981 12.152838 3.982433 10.430017 3.474874 8.617305 c
+3.115443 7.333624 2.023970 4.853914 1.417502 3.515867 c
+1.048270 3.685406 0.597010 3.618120 0.292893 3.314004 c
+-0.097631 2.923479 -0.097631 2.290315 0.292893 1.899790 c
+0.683417 1.509266 1.316582 1.509266 1.707107 1.899790 c
+2.017654 2.210338 2.081248 2.674317 1.897897 3.047709 c
+3.084634 3.614276 5.232831 4.584049 7.010407 5.081771 c
+9.617112 5.811648 10.545941 5.788877 10.545941 5.788877 c
+11.606602 9.677964 l
+16.202795 12.859945 l
+h
+14.865218 3.172400 m
+14.560407 3.678793 13.990632 3.872368 13.176373 3.853580 c
+11.843590 3.822828 9.380374 3.204309 5.335240 1.847342 c
+4.073792 1.417948 l
+4.562962 -0.000048 l
+4.980837 0.143490 l
+9.106980 1.554564 11.658496 2.237961 12.965968 2.341055 c
+13.210973 2.353979 l
+13.332891 2.354455 l
+13.408545 2.353151 13.472960 2.348739 13.526207 2.342020 c
+13.535913 2.340799 l
+13.458778 1.967508 l
+13.397528 1.661427 13.385180 1.500134 13.421536 1.267578 c
+13.497416 0.782209 13.827616 0.423435 14.336223 0.284988 c
+14.995405 0.105551 16.097439 0.270704 17.958416 0.817015 c
+18.539791 0.992378 l
+18.096962 2.425522 l
+17.826523 2.342947 l
+16.414690 1.917196 15.490141 1.724684 15.008798 1.710440 c
+14.936913 1.710800 l
+15.008714 2.059508 l
+15.092236 2.520182 15.076522 2.821354 14.865218 3.172400 c
+h
+8.778174 8.970858 m
+7.363961 10.385071 l
+5.242641 6.849538 l
+8.778174 8.970858 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  1595
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000001685 00000 n
+0000001708 00000 n
+0000001881 00000 n
+0000001955 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+2014
+%%EOF

+ 108 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationSign.imageset/nor.pdf

@@ -0,0 +1,108 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 0.889160 1.483231 cm
+0.262745 0.278431 0.301961 scn
+16.202795 12.859991 m
+11.253048 17.809738 l
+8.071068 13.213545 l
+4.181981 12.152884 l
+4.181981 12.152884 3.982433 10.430062 3.474874 8.617351 c
+3.115443 7.333670 2.023970 4.853960 1.417502 3.515913 c
+1.048270 3.685452 0.597010 3.618166 0.292893 3.314050 c
+-0.097631 2.923525 -0.097631 2.290360 0.292893 1.899836 c
+0.683417 1.509312 1.316582 1.509312 1.707107 1.899836 c
+2.017654 2.210383 2.081248 2.674363 1.897897 3.047755 c
+3.084634 3.614322 5.232831 4.584095 7.010407 5.081817 c
+9.617112 5.811694 10.545941 5.788923 10.545941 5.788923 c
+11.606602 9.678010 l
+16.202795 12.859991 l
+h
+14.865218 3.172445 m
+14.560407 3.678839 13.990632 3.872414 13.176373 3.853626 c
+11.843590 3.822874 9.380374 3.204355 5.335240 1.847388 c
+4.073792 1.417994 l
+4.562962 -0.000002 l
+4.980837 0.143536 l
+9.106980 1.554609 11.658496 2.238007 12.965968 2.341101 c
+13.210973 2.354025 l
+13.332891 2.354501 l
+13.408545 2.353197 13.472960 2.348784 13.526207 2.342066 c
+13.535913 2.340845 l
+13.458778 1.967554 l
+13.397528 1.661472 13.385180 1.500179 13.421536 1.267624 c
+13.497416 0.782255 13.827616 0.423481 14.336223 0.285034 c
+14.995405 0.105597 16.097439 0.270750 17.958416 0.817060 c
+18.539791 0.992424 l
+18.096962 2.425568 l
+17.826523 2.342993 l
+16.414690 1.917242 15.490141 1.724730 15.008798 1.710485 c
+14.936913 1.710846 l
+15.008714 2.059554 l
+15.092236 2.520227 15.076522 2.821400 14.865218 3.172445 c
+h
+8.778174 8.970903 m
+7.363961 10.385117 l
+5.242641 6.849584 l
+8.778174 8.970903 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  1595
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000001685 00000 n
+0000001708 00000 n
+0000001881 00000 n
+0000001955 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+2014
+%%EOF

+ 22 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationStamp.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "nor.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "nor 1.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 86 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationStamp.imageset/nor 1.pdf

@@ -0,0 +1,86 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 2.000000 2.500000 cm
+1.000000 1.000000 1.000000 scn
+9.982011 7.524785 m
+11.187527 8.213807 12.000000 9.512022 12.000000 11.000000 c
+12.000000 13.209139 10.209139 15.000000 8.000000 15.000000 c
+5.790861 15.000000 4.000000 13.209139 4.000000 11.000000 c
+4.000000 9.512019 4.812476 8.213802 6.017996 7.524781 c
+6.107453 7.396823 6.500000 6.803784 6.500000 6.250000 c
+6.500000 5.625000 6.000000 5.000000 6.000000 5.000000 c
+0.000000 5.000000 l
+0.000000 3.500000 l
+16.000000 3.500000 l
+16.000000 5.000000 l
+10.000000 5.000000 l
+10.000000 5.000000 9.500000 5.625000 9.500000 6.250000 c
+9.500000 6.803790 9.892559 7.396836 9.982011 7.524785 c
+h
+16.000000 0.000000 m
+16.000000 1.500000 l
+0.000000 1.500000 l
+0.000000 0.000000 l
+16.000000 0.000000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  817
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000907 00000 n
+0000000929 00000 n
+0000001102 00000 n
+0000001176 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1235
+%%EOF

+ 86 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationStamp.imageset/nor.pdf

@@ -0,0 +1,86 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 2.000000 2.500000 cm
+0.262745 0.278431 0.301961 scn
+9.982011 7.524785 m
+11.187527 8.213807 12.000000 9.512022 12.000000 11.000000 c
+12.000000 13.209139 10.209139 15.000000 8.000000 15.000000 c
+5.790861 15.000000 4.000000 13.209139 4.000000 11.000000 c
+4.000000 9.512019 4.812476 8.213802 6.017996 7.524781 c
+6.107453 7.396823 6.500000 6.803784 6.500000 6.250000 c
+6.500000 5.625000 6.000000 5.000000 6.000000 5.000000 c
+0.000000 5.000000 l
+0.000000 3.500000 l
+16.000000 3.500000 l
+16.000000 5.000000 l
+10.000000 5.000000 l
+10.000000 5.000000 9.500000 5.625000 9.500000 6.250000 c
+9.500000 6.803790 9.892559 7.396836 9.982011 7.524785 c
+h
+16.000000 0.000000 m
+16.000000 1.500000 l
+0.000000 1.500000 l
+0.000000 0.000000 l
+16.000000 0.000000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  817
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000907 00000 n
+0000000929 00000 n
+0000001102 00000 n
+0000001176 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1235
+%%EOF

+ 22 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationStrikethrough.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "ic.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "ic 1.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 82 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationStrikethrough.imageset/ic 1.pdf

@@ -0,0 +1,82 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
+1.000000 1.000000 1.000000 scn
+11.849375 1.000000 m
+10.713867 1.000000 l
+10.713867 0.000000 l
+14.999581 0.000000 l
+14.999581 1.000000 l
+13.464911 1.000000 l
+8.196358 14.171387 l
+6.803642 14.171387 l
+1.535083 0.999987 l
+0.000000 0.999987 l
+0.000000 -0.000013 l
+4.285714 -0.000013 l
+4.285714 0.999987 l
+3.150620 0.999987 l
+7.500000 11.873844 l
+11.849375 1.000000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  460
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 14.999512 14.171387 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000550 00000 n
+0000000572 00000 n
+0000000745 00000 n
+0000000819 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+878
+%%EOF

+ 82 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationStrikethrough.imageset/ic.pdf

@@ -0,0 +1,82 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
+0.262745 0.278431 0.301961 scn
+11.849375 1.000015 m
+10.713867 1.000015 l
+10.713867 0.000015 l
+14.999581 0.000015 l
+14.999581 1.000015 l
+13.464911 1.000015 l
+8.196358 14.171402 l
+6.803642 14.171402 l
+1.535083 1.000002 l
+0.000000 1.000002 l
+0.000000 0.000002 l
+4.285714 0.000002 l
+4.285714 1.000002 l
+3.150620 1.000002 l
+7.500000 11.873859 l
+11.849375 1.000015 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  458
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 14.999512 14.171402 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000548 00000 n
+0000000570 00000 n
+0000000743 00000 n
+0000000817 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+876
+%%EOF

+ 22 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationText.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "text.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "text 1.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 83 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationText.imageset/text 1.pdf

@@ -0,0 +1,83 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 3.250000 2.250000 cm
+1.000000 1.000000 1.000000 scn
+13.500000 15.000000 m
+13.500000 11.750000 l
+12.000000 11.750000 l
+12.000000 13.500000 l
+7.500000 13.500000 l
+7.500000 1.500000 l
+9.083658 1.500000 l
+9.083658 0.000000 l
+4.416992 0.000000 l
+4.416992 1.500000 l
+6.000000 1.500000 l
+6.000000 13.500000 l
+1.500000 13.500000 l
+1.500000 11.750000 l
+0.000000 11.750000 l
+0.000000 15.000000 l
+13.500000 15.000000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  484
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000574 00000 n
+0000000596 00000 n
+0000000769 00000 n
+0000000843 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+902
+%%EOF

+ 83 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationText.imageset/text.pdf

@@ -0,0 +1,83 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 3.250000 2.250000 cm
+0.262745 0.278431 0.301961 scn
+13.500000 15.000000 m
+13.500000 11.750000 l
+12.000000 11.750000 l
+12.000000 13.500000 l
+7.500000 13.500000 l
+7.500000 1.500000 l
+9.083658 1.500000 l
+9.083658 0.000000 l
+4.416992 0.000000 l
+4.416992 1.500000 l
+6.000000 1.500000 l
+6.000000 13.500000 l
+1.500000 13.500000 l
+1.500000 11.750000 l
+0.000000 11.750000 l
+0.000000 15.000000 l
+13.500000 15.000000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  484
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000574 00000 n
+0000000596 00000 n
+0000000769 00000 n
+0000000843 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+902
+%%EOF

+ 22 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationUnderline.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "ic.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "ic 1.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 88 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationUnderline.imageset/ic 1.pdf

@@ -0,0 +1,88 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
+1.000000 1.000000 1.000000 scn
+10.000000 1.000021 m
+10.992238 1.000021 l
+9.892282 3.750021 l
+4.107718 3.750021 l
+3.007762 1.000021 l
+4.000000 1.000021 l
+4.000000 0.000021 l
+0.000000 0.000021 l
+0.000000 1.000021 l
+1.392225 1.000021 l
+6.303642 13.278564 l
+7.696358 13.278564 l
+12.607775 1.000021 l
+14.000000 1.000021 l
+14.000000 0.000021 l
+10.000000 0.000021 l
+10.000000 1.000021 l
+h
+4.507701 4.750021 m
+9.492299 4.750021 l
+7.000000 10.981022 l
+4.507701 4.750021 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  560
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 14.000000 13.278564 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000650 00000 n
+0000000672 00000 n
+0000000845 00000 n
+0000000919 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+978
+%%EOF

+ 88 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/CImageNamePDFAnnotationUnderline.imageset/ic.pdf

@@ -0,0 +1,88 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
+0.262745 0.278431 0.301961 scn
+10.000000 0.999998 m
+10.992238 0.999998 l
+9.892282 3.749998 l
+4.107718 3.749998 l
+3.007762 0.999998 l
+4.000000 0.999998 l
+4.000000 -0.000002 l
+0.000000 -0.000002 l
+0.000000 0.999998 l
+1.392225 0.999998 l
+6.303642 13.278542 l
+7.696358 13.278542 l
+12.607775 0.999998 l
+14.000000 0.999998 l
+14.000000 -0.000002 l
+10.000000 -0.000002 l
+10.000000 0.999998 l
+h
+4.507701 4.749998 m
+9.492299 4.749998 l
+7.000000 10.980999 l
+4.507701 4.749998 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  564
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 14.000000 13.278542 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000654 00000 n
+0000000676 00000 n
+0000000849 00000 n
+0000000923 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+982
+%%EOF

+ 6 - 0
compdfkit-tools/compdfkit-tools/Viewer/PDFAnnotation/Image.xcassets/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}