Browse Source

【书签】书签添加

lizhe 1 year ago
parent
commit
e72128804a

+ 18 - 0
PDF Office/PDF Master/Class/PDFTools/KMBookmark/Controller/KMBookmarkController.swift

@@ -0,0 +1,18 @@
+//
+//  KMBookmarkController.swift
+//  PDF Reader Pro
+//
+//  Created by lizhe on 2024/2/5.
+//
+
+import Cocoa
+
+class KMBookmarkController: NSWindowController {
+
+    override func windowDidLoad() {
+        super.windowDidLoad()
+
+        // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
+    }
+    
+}

+ 118 - 0
PDF Office/PDF Master/Class/PDFTools/KMBookmark/Controller/KMBookmarkController.xib

@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMBookmarkController" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <connections>
+                <outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="196" y="240" width="512" height="233"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
+            <view key="contentView" id="se5-gp-TjO">
+                <rect key="frame" x="0.0" y="0.0" width="512" height="233"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <view translatesAutoresizingMaskIntoConstraints="NO" id="8va-Ju-ebM">
+                        <rect key="frame" x="0.0" y="0.0" width="512" height="233"/>
+                        <subviews>
+                            <customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2O4-Fv-tBM" customClass="SKStatusBar">
+                                <rect key="frame" x="0.0" y="0.0" width="512" height="22"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
+                            </customView>
+                            <scrollView fixedFrame="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="18" horizontalPageScroll="10" verticalLineScroll="18" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3xo-BF-qal">
+                                <rect key="frame" x="0.0" y="22" width="512" height="212"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                <clipView key="contentView" id="one-Qw-MTE">
+                                    <rect key="frame" x="0.0" y="0.0" width="512" height="212"/>
+                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                    <subviews>
+                                        <outlineView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="firstColumnOnly" alternatingRowBackgroundColors="YES" columnReordering="NO" typeSelect="NO" autosaveName="SKBookmarksTable" rowHeight="16" headerView="DUP-Q2-ASL" indentationPerLevel="13" outlineTableColumn="qcP-Ly-Zi3" id="O1w-IL-33b" customClass="SKOutlineView">
+                                            <rect key="frame" x="0.0" y="0.0" width="512" height="184"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <size key="intercellSpacing" width="3" height="2"/>
+                                            <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                            <color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
+                                            <tableColumns>
+                                                <tableColumn identifier="label" width="248" minWidth="40" maxWidth="1000" id="qcP-Ly-Zi3">
+                                                    <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Label">
+                                                        <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
+                                                        <color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
+                                                    </tableHeaderCell>
+                                                    <textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" id="FJd-fo-cum" customClass="SKTextWithIconCell">
+                                                        <font key="font" metaFont="cellTitle"/>
+                                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                    </textFieldCell>
+                                                    <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
+                                                </tableColumn>
+                                                <tableColumn identifier="file" editable="NO" width="172" minWidth="40" maxWidth="1000" id="RMM-iD-ibU">
+                                                    <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="File">
+                                                        <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
+                                                        <color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
+                                                    </tableHeaderCell>
+                                                    <textFieldCell key="dataCell" lineBreakMode="truncatingHead" selectable="YES" editable="YES" alignment="left" id="Pkb-BD-zcC">
+                                                        <font key="font" metaFont="cellTitle"/>
+                                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                    </textFieldCell>
+                                                    <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
+                                                </tableColumn>
+                                                <tableColumn identifier="page" width="54" minWidth="33" maxWidth="1000" id="xru-nh-dav">
+                                                    <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Page">
+                                                        <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
+                                                        <color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
+                                                    </tableHeaderCell>
+                                                    <textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" id="XQM-N4-Y0O">
+                                                        <numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" formatWidth="-1" groupingSize="0" minimumIntegerDigits="1" maximumIntegerDigits="42" id="8Md-aC-vmN">
+                                                            <real key="minimum" value="1"/>
+                                                        </numberFormatter>
+                                                        <font key="font" metaFont="cellTitle"/>
+                                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                                        <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                    </textFieldCell>
+                                                    <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
+                                                </tableColumn>
+                                            </tableColumns>
+                                        </outlineView>
+                                    </subviews>
+                                </clipView>
+                                <scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="eYW-Tg-ICX">
+                                    <rect key="frame" x="1" y="-30" width="385" height="15"/>
+                                    <autoresizingMask key="autoresizingMask"/>
+                                </scroller>
+                                <scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="dj7-LR-uzh">
+                                    <rect key="frame" x="-30" y="17" width="15" height="213"/>
+                                    <autoresizingMask key="autoresizingMask"/>
+                                </scroller>
+                                <tableHeaderView key="headerView" wantsLayer="YES" id="DUP-Q2-ASL">
+                                    <rect key="frame" x="0.0" y="0.0" width="512" height="28"/>
+                                    <autoresizingMask key="autoresizingMask"/>
+                                </tableHeaderView>
+                            </scrollView>
+                        </subviews>
+                    </view>
+                </subviews>
+                <constraints>
+                    <constraint firstAttribute="bottom" secondItem="8va-Ju-ebM" secondAttribute="bottom" id="1wY-7j-DHS"/>
+                    <constraint firstItem="8va-Ju-ebM" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" id="BUz-q7-6sj"/>
+                    <constraint firstItem="8va-Ju-ebM" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" id="Z90-ES-jeu"/>
+                    <constraint firstAttribute="trailing" secondItem="8va-Ju-ebM" secondAttribute="trailing" id="nsS-qJ-TkF"/>
+                </constraints>
+            </view>
+            <connections>
+                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
+            </connections>
+            <point key="canvasLocation" x="126" y="116.5"/>
+        </window>
+    </objects>
+</document>

+ 18 - 0
PDF Office/PDF Master/Class/PDFTools/KMBookmark/Controller/KMBookmarkSheetController.swift

@@ -0,0 +1,18 @@
+//
+//  KMBookmarkSheetController.swift
+//  PDF Reader Pro
+//
+//  Created by lizhe on 2024/2/5.
+//
+
+import Cocoa
+
+class KMBookmarkSheetController: NSWindowController {
+
+    override func windowDidLoad() {
+        super.windowDidLoad()
+
+        // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
+    }
+    
+}

+ 115 - 0
PDF Office/PDF Master/Class/PDFTools/KMBookmark/Controller/KMBookmarkSheetController.xib

@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMBookmarkSheetController" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <connections>
+                <outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="196" y="240" width="350" height="122"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
+            <view key="contentView" id="se5-gp-TjO">
+                <rect key="frame" x="0.0" y="0.0" width="350" height="122"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <view translatesAutoresizingMaskIntoConstraints="NO" id="rTZ-Vg-N1g">
+                        <rect key="frame" x="0.0" y="0.0" width="350" height="122"/>
+                        <subviews>
+                            <textField focusRingType="none" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="s1L-CE-Y2L">
+                                <rect key="frame" x="17" y="84" width="72" height="17"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Bookmark:" id="YqR-LW-fxz">
+                                    <font key="font" metaFont="system"/>
+                                    <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                </textFieldCell>
+                            </textField>
+                            <button tag="1" imageHugsTitle="YES" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="3eE-dU-7Kz">
+                                <rect key="frame" x="254" y="12" width="82" height="32"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
+                                <buttonCell key="cell" type="push" title="OK" bezelStyle="rounded" alignment="center" borderStyle="border" tag="1" inset="2" id="e3e-c6-KCC">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                    <string key="keyEquivalent" base64-UTF8="YES">
+DQ
+</string>
+                                </buttonCell>
+                                <connections>
+                                    <accessibilityConnection property="link" destination="zqw-vB-SGL" id="Hgc-3q-yde"/>
+                                </connections>
+                            </button>
+                            <button imageHugsTitle="YES" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zqw-vB-SGL">
+                                <rect key="frame" x="172" y="12" width="82" height="32"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
+                                <buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="OXC-ec-E6o">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                    <string key="keyEquivalent" base64-UTF8="YES">
+Gw
+</string>
+                                </buttonCell>
+                            </button>
+                            <textField focusRingType="none" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="p8e-MI-ByW">
+                                <rect key="frame" x="94" y="82" width="236" height="22"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
+                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="sgQ-rS-y3Y">
+                                    <font key="font" metaFont="system"/>
+                                    <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                </textFieldCell>
+                                <connections>
+                                    <accessibilityConnection property="title" destination="s1L-CE-Y2L" id="D6l-IC-4WG"/>
+                                </connections>
+                            </textField>
+                            <popUpButton imageHugsTitle="YES" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="plc-mT-b5y">
+                                <rect key="frame" x="91" y="50" width="242" height="26"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
+                                <popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" selectedItem="Ez5-vL-MEw" id="gFv-pL-Na1">
+                                    <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                    <menu key="menu" id="QCH-VJ-LAu">
+                                        <items>
+                                            <menuItem state="on" id="Ez5-vL-MEw"/>
+                                        </items>
+                                    </menu>
+                                </popUpButtonCell>
+                                <connections>
+                                    <accessibilityConnection property="title" destination="P1I-FS-CN8" id="M9d-Do-Pz9"/>
+                                </connections>
+                            </popUpButton>
+                            <textField focusRingType="none" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="P1I-FS-CN8">
+                                <rect key="frame" x="17" y="56" width="72" height="17"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Add to:" id="zVX-Pd-Udl">
+                                    <font key="font" metaFont="system"/>
+                                    <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                </textFieldCell>
+                            </textField>
+                        </subviews>
+                    </view>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="rTZ-Vg-N1g" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" id="CbT-17-jAy"/>
+                    <constraint firstItem="rTZ-Vg-N1g" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" id="RSb-z8-wLI"/>
+                    <constraint firstAttribute="trailing" secondItem="rTZ-Vg-N1g" secondAttribute="trailing" id="cP2-Rq-AiR"/>
+                    <constraint firstAttribute="bottom" secondItem="rTZ-Vg-N1g" secondAttribute="bottom" id="ckS-9L-4qA"/>
+                </constraints>
+            </view>
+            <connections>
+                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
+            </connections>
+            <point key="canvasLocation" x="70" y="130"/>
+        </window>
+    </objects>
+</document>

+ 12 - 0
PDF Office/PDF Master/Class/PDFTools/KMBookmark/Model/KMBookmark.swift

@@ -0,0 +1,12 @@
+//
+//  KMBookmark.swift
+//  PDF Reader Pro
+//
+//  Created by lizhe on 2024/2/5.
+//
+
+import Cocoa
+
+class KMBookmark: NSObject {
+
+}

+ 64 - 0
PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

@@ -1204,6 +1204,21 @@
 		AD0257402A8601CD00EAD5D5 /* KMAppleLoginManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD02573E2A8601CD00EAD5D5 /* KMAppleLoginManager.swift */; };
 		AD0257412A8601CD00EAD5D5 /* KMAppleLoginManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD02573E2A8601CD00EAD5D5 /* KMAppleLoginManager.swift */; };
 		AD032CBA2A525DAC00F1D745 /* KMInAppPurchaseManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD0E8AAF2A31B76300DBFD3C /* KMInAppPurchaseManager.swift */; };
+		AD055E1F2B70B3840035F824 /* KMBookmark.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD055E1E2B70B3840035F824 /* KMBookmark.swift */; };
+		AD055E202B70B3840035F824 /* KMBookmark.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD055E1E2B70B3840035F824 /* KMBookmark.swift */; };
+		AD055E212B70B3840035F824 /* KMBookmark.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD055E1E2B70B3840035F824 /* KMBookmark.swift */; };
+		AD055E252B70B3C10035F824 /* KMBookmarkController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD055E232B70B3C10035F824 /* KMBookmarkController.swift */; };
+		AD055E262B70B3C10035F824 /* KMBookmarkController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD055E232B70B3C10035F824 /* KMBookmarkController.swift */; };
+		AD055E272B70B3C10035F824 /* KMBookmarkController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD055E232B70B3C10035F824 /* KMBookmarkController.swift */; };
+		AD055E282B70B3C10035F824 /* KMBookmarkController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD055E242B70B3C10035F824 /* KMBookmarkController.xib */; };
+		AD055E292B70B3C10035F824 /* KMBookmarkController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD055E242B70B3C10035F824 /* KMBookmarkController.xib */; };
+		AD055E2A2B70B3C10035F824 /* KMBookmarkController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD055E242B70B3C10035F824 /* KMBookmarkController.xib */; };
+		AD055E2D2B70B3D50035F824 /* KMBookmarkSheetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD055E2B2B70B3D50035F824 /* KMBookmarkSheetController.swift */; };
+		AD055E2E2B70B3D50035F824 /* KMBookmarkSheetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD055E2B2B70B3D50035F824 /* KMBookmarkSheetController.swift */; };
+		AD055E2F2B70B3D50035F824 /* KMBookmarkSheetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD055E2B2B70B3D50035F824 /* KMBookmarkSheetController.swift */; };
+		AD055E302B70B3D50035F824 /* KMBookmarkSheetController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD055E2C2B70B3D50035F824 /* KMBookmarkSheetController.xib */; };
+		AD055E312B70B3D50035F824 /* KMBookmarkSheetController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD055E2C2B70B3D50035F824 /* KMBookmarkSheetController.xib */; };
+		AD055E322B70B3D50035F824 /* KMBookmarkSheetController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD055E2C2B70B3D50035F824 /* KMBookmarkSheetController.xib */; };
 		AD0E8AB02A31B76300DBFD3C /* KMInAppPurchaseManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD0E8AAF2A31B76300DBFD3C /* KMInAppPurchaseManager.swift */; };
 		AD0E8AB12A31B76300DBFD3C /* KMInAppPurchaseManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD0E8AAF2A31B76300DBFD3C /* KMInAppPurchaseManager.swift */; };
 		AD0E8AB42A31B78900DBFD3C /* KMDMGPurchaseManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD0E8AB32A31B78900DBFD3C /* KMDMGPurchaseManager.swift */; };
@@ -5445,6 +5460,11 @@
 		AD0257392A8601AA00EAD5D5 /* KMLoginManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMLoginManager.swift; sourceTree = "<group>"; };
 		AD02573E2A8601CD00EAD5D5 /* KMAppleLoginManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMAppleLoginManager.swift; sourceTree = "<group>"; };
 		AD032CB62A4E6A7E00F1D745 /* Starscream.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Starscream.framework; sourceTree = "<group>"; };
+		AD055E1E2B70B3840035F824 /* KMBookmark.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBookmark.swift; sourceTree = "<group>"; };
+		AD055E232B70B3C10035F824 /* KMBookmarkController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBookmarkController.swift; sourceTree = "<group>"; };
+		AD055E242B70B3C10035F824 /* KMBookmarkController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMBookmarkController.xib; sourceTree = "<group>"; };
+		AD055E2B2B70B3D50035F824 /* KMBookmarkSheetController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBookmarkSheetController.swift; sourceTree = "<group>"; };
+		AD055E2C2B70B3D50035F824 /* KMBookmarkSheetController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMBookmarkSheetController.xib; sourceTree = "<group>"; };
 		AD0E8AAF2A31B76300DBFD3C /* KMInAppPurchaseManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMInAppPurchaseManager.swift; sourceTree = "<group>"; };
 		AD0E8AB32A31B78900DBFD3C /* KMDMGPurchaseManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMDMGPurchaseManager.swift; sourceTree = "<group>"; };
 		AD0E8AB82A31BDDD00DBFD3C /* KMProduct.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMProduct.swift; sourceTree = "<group>"; };
@@ -7512,6 +7532,7 @@
 		9F1F82C6292F631A0092C4B4 /* PDFTools */ = {
 			isa = PBXGroup;
 			children = (
+				AD055E1A2B70B2460035F824 /* KMBookmark */,
 				ADFA8F072B57861A002595A4 /* FindSearch */,
 				AD2BF23B2B5647C80029F03F /* AutoFlow */,
 				BBD922282B50D43800DB9585 /* Rate */,
@@ -8103,6 +8124,34 @@
 			path = Apple;
 			sourceTree = "<group>";
 		};
+		AD055E1A2B70B2460035F824 /* KMBookmark */ = {
+			isa = PBXGroup;
+			children = (
+				AD055E1D2B70B3660035F824 /* Model */,
+				AD055E1C2B70B3580035F824 /* Controller */,
+			);
+			path = KMBookmark;
+			sourceTree = "<group>";
+		};
+		AD055E1C2B70B3580035F824 /* Controller */ = {
+			isa = PBXGroup;
+			children = (
+				AD055E232B70B3C10035F824 /* KMBookmarkController.swift */,
+				AD055E242B70B3C10035F824 /* KMBookmarkController.xib */,
+				AD055E2B2B70B3D50035F824 /* KMBookmarkSheetController.swift */,
+				AD055E2C2B70B3D50035F824 /* KMBookmarkSheetController.xib */,
+			);
+			path = Controller;
+			sourceTree = "<group>";
+		};
+		AD055E1D2B70B3660035F824 /* Model */ = {
+			isa = PBXGroup;
+			children = (
+				AD055E1E2B70B3840035F824 /* KMBookmark.swift */,
+			);
+			path = Model;
+			sourceTree = "<group>";
+		};
 		AD0E8AAD2A31B6F300DBFD3C /* Appstore */ = {
 			isa = PBXGroup;
 			children = (
@@ -13026,6 +13075,7 @@
 				AD1CA41C2A061CE10070541F /* KMAnnotationScreenTypeViewItem.xib in Resources */,
 				9FB2210A2B19BD8B00A5B208 /* KMGeneralAnnotationViewController.xib in Resources */,
 				9F8539F62947137500DF644E /* sadfavicon.png in Resources */,
+				AD055E302B70B3D50035F824 /* KMBookmarkSheetController.xib in Resources */,
 				BB1B0AEF2B4FC6E900889528 /* KMFunctionGuideNameItemView.xib in Resources */,
 				ADBC372429CA923E00D93208 /* KMComparative.plist in Resources */,
 				ADAFDA5E2AEB455500F084BC /* KMHomeContentView.xib in Resources */,
@@ -13133,6 +13183,7 @@
 				ADB2D6FD294882B70029D2B3 /* KMTextFieldStepperView.xib in Resources */,
 				BB69C95F299116FD0001A9B1 /* plaid.pdf in Resources */,
 				89D2D2FE294C806000BFF5FE /* KMPDFThumbnailItem.xib in Resources */,
+				AD055E282B70B3C10035F824 /* KMBookmarkController.xib in Resources */,
 				BBF62C6C2B033B5B007B7E86 /* KMPDFEditExtractWindow.xib in Resources */,
 				BB88106A2B4F771D00AFA63E /* KMVerificationInfoViewController.xib in Resources */,
 				BB6DD80F29347F77001F0544 /* KMSecureEncryptWindowController.xib in Resources */,
@@ -13527,6 +13578,7 @@
 				AD2D74B129F0CEB300EDC5E4 /* KMCancellationWindowController.xib in Resources */,
 				9F1FE4DF29406E4700E952CA /* .gclient in Resources */,
 				ADC63E4C2A49BEDD00854E02 /* KMSubscribeWaterMarkCollectionItem.xib in Resources */,
+				AD055E292B70B3C10035F824 /* KMBookmarkController.xib in Resources */,
 				BB3D970F2B2FEAF9007094C8 /* KMPDFRedactViewController.xib in Resources */,
 				BB69C960299116FD0001A9B1 /* plaid.pdf in Resources */,
 				ADE86AC42B034C7100414DFA /* KMBackgroundWindowController.xib in Resources */,
@@ -13727,6 +13779,7 @@
 				9FD0FA4F29D43D6800F2AB0D /* KMDeviceBrowserWindowController.xib in Resources */,
 				9F1F82CE292F6CF90092C4B4 /* KMPDFInsertPageWindow.xib in Resources */,
 				9F0201822A1BAC1600C9B673 /* KMAIRewritingVC.xib in Resources */,
+				AD055E312B70B3D50035F824 /* KMBookmarkSheetController.xib in Resources */,
 				89E4E7422964160F002DBA6F /* KMAnnotationLinkViewController.xib in Resources */,
 				BB1E7F2D2B4FE2C6002D9785 /* GuideInfoImages.xcassets in Resources */,
 				89752DEE293875FC003FF08E /* KMMainToolbarController.xib in Resources */,
@@ -14016,6 +14069,7 @@
 				BB7F7C0229AA586900A3E4E7 /* signAdd.png in Resources */,
 				ADD1B6CD2942E85300C3FFF7 /* KMPrintBottomView.xib in Resources */,
 				BB1B0AF12B4FC6E900889528 /* KMFunctionGuideNameItemView.xib in Resources */,
+				AD055E322B70B3D50035F824 /* KMBookmarkSheetController.xib in Resources */,
 				9F853A012947137500DF644E /* throbber.png in Resources */,
 				AD1CA41E2A061CE10070541F /* KMAnnotationScreenTypeViewItem.xib in Resources */,
 				ADAFDA602AEB455500F084BC /* KMHomeContentView.xib in Resources */,
@@ -14123,6 +14177,7 @@
 				BB6BA4CA2B0B4A4200462CAE /* KMLeftSideEmptyFileViewController.xib in Resources */,
 				BB2F615D2966B69D001CB369 /* KMWatermarkPropertyHomeController.xib in Resources */,
 				ADD1B6C12942DD3D00C3FFF7 /* KMPrintChooseView.xib in Resources */,
+				AD055E2A2B70B3C10035F824 /* KMBookmarkController.xib in Resources */,
 				BB88106C2B4F771D00AFA63E /* KMVerificationInfoViewController.xib in Resources */,
 				9F1F82C1292E01860092C4B4 /* KMCloudEmptyCollectionViewItem.xib in Resources */,
 				9F00CF562A38657400AC462E /* GoogleService-Info.plist in Resources */,
@@ -14858,6 +14913,7 @@
 				BBC3481C295593F0008D2CD1 /* KMBackgroundListController.swift in Sources */,
 				ADFCEB752B4FC1660001EBAF /* KMAdsWebView.swift in Sources */,
 				9F5664872988B16F00020985 /* KMTextfieldVC.swift in Sources */,
+				AD055E252B70B3C10035F824 /* KMBookmarkController.swift in Sources */,
 				9F1F82DA292F84D60092C4B4 /* KMHomeInsertActionViewController.swift in Sources */,
 				BB31DA622AFA3088006D63CB /* KMPreferenceController.swift in Sources */,
 				9FD0D2AF2AD51BCC00DA3FF8 /* CPDFListEditAnnotationViewController.swift in Sources */,
@@ -14983,6 +15039,7 @@
 				BB332D532995D8B500CABB58 /* KMCloudDocumentTools.swift in Sources */,
 				BBA93D3329BF0ECE0044E0DD /* SKKeychain.m in Sources */,
 				BBC8A7682B05EB8000FA9377 /* KMThumbnailTableviewCell.swift in Sources */,
+				AD055E2D2B70B3D50035F824 /* KMBookmarkSheetController.swift in Sources */,
 				9F0CB5152986566D00007028 /* KMDesignToken+BorderRadiusTopLeft.swift in Sources */,
 				AD867F8629D94F5100F00440 /* KMBOTAOutlineView.swift in Sources */,
 				ADDF837D2B391A5D00A81A4E /* DSignatureDetailsViewController.swift in Sources */,
@@ -15310,6 +15367,7 @@
 				ADAFDA162AE8DD6600F084BC /* KMAdvertisementCollectionHeadView.swift in Sources */,
 				BBBAECF42B57672200266BD3 /* SKPresentationOptionsSheetController.swift in Sources */,
 				BBFA1CD62B60A0670053AD4A /* KMScreenShotMaskView.swift in Sources */,
+				AD055E1F2B70B3840035F824 /* KMBookmark.swift in Sources */,
 				ADE8BC2F29F8CD7200570F89 /* KMPDFThumbnailModel.swift in Sources */,
 				BBBAECFC2B57713F00266BD3 /* KMTransitionInfo.swift in Sources */,
 				BB4EEF4029764FCC003A3537 /* KMWatermarkColorView.swift in Sources */,
@@ -15669,6 +15727,7 @@
 				9FDD0F65294AB645000C4DAD /* KMMainViewController.swift in Sources */,
 				9FCFEC692AC2EAD500EAD2CB /* CPDFListViewColorMenuItemView.swift in Sources */,
 				ADAFDA262AE8DE1B00F084BC /* KMAdvertisementModel.swift in Sources */,
+				AD055E2E2B70B3D50035F824 /* KMBookmarkSheetController.swift in Sources */,
 				ADBC372A29CA950500D93208 /* KMComparativeOutlineView.swift in Sources */,
 				9FDD0FA729533494000C4DAD /* KMJSONParser.swift in Sources */,
 				9FDD0F70294AD13C000C4DAD /* KMMainViewController+Action.swift in Sources */,
@@ -15729,6 +15788,7 @@
 				BBFDFAA72AF3899400E08AA2 /* PasswordWindowController.swift in Sources */,
 				8942F80029260EC700389627 /* KMLeftMethodMode.swift in Sources */,
 				BB49ED1E293F4FB200C82CA2 /* KMConvertPPTsSettingView.swift in Sources */,
+				AD055E202B70B3840035F824 /* KMBookmark.swift in Sources */,
 				BBEFD0192AF9BD24003FABD8 /* KMDataVersionManager.swift in Sources */,
 				9FA607DA28F8227500B46586 /* KMBox.swift in Sources */,
 				BB146FD3299DC0D100784A6A /* GTLRDateTime.m in Sources */,
@@ -16473,6 +16533,7 @@
 				BB6B43672A04919200E02B54 /* KMBaseViewController.swift in Sources */,
 				BB1A91742AFB8D95005E5FD8 /* KMBookletMaskView.swift in Sources */,
 				BB146FD0299DC0D100784A6A /* GTMMIMEDocument.m in Sources */,
+				AD055E262B70B3C10035F824 /* KMBookmarkController.swift in Sources */,
 				AD3AAD142B0B5B2700DE5FE7 /* KMCompareContentWindowController.swift in Sources */,
 				9F705F8E291E579F005199AD /* KMHistoryFileTableView.swift in Sources */,
 				9F0CB49029683DEE00007028 /* KMPropertiesPanelLineSubVC.swift in Sources */,
@@ -16635,6 +16696,7 @@
 				ADE3C1EF29A5AFB100793B13 /* KMRequestServerManager.swift in Sources */,
 				BBC70EB22AEA80EC00AC1585 /* KMToolbarCustomWindowController.swift in Sources */,
 				9F1FE4B629406E4700E952CA /* CTBrowser.m in Sources */,
+				AD055E272B70B3C10035F824 /* KMBookmarkController.swift in Sources */,
 				ADAFDA2A2AE8DE1B00F084BC /* KMAdvertisementModelTransition.swift in Sources */,
 				ADC63E412A49816900854E02 /* KMSubscribeSuccessView.swift in Sources */,
 				BBA19F4529ADE6A3001A285A /* KMBookMarkRowView.swift in Sources */,
@@ -16922,6 +16984,7 @@
 				BB2C6ACF28F41BA000478A33 /* CPDFListView.m in Sources */,
 				BB6013822AD38E0100A76FB2 /* CPDFTextAnnotation+PDFListView.swift in Sources */,
 				BB1331502AD78DC0008F6791 /* KMPDFMergeSizeTabelViewCell.swift in Sources */,
+				AD055E2F2B70B3D50035F824 /* KMBookmarkSheetController.swift in Sources */,
 				ADDDCE232B43A32A005B4AB5 /* AppSandboxFileAccessPersist.m in Sources */,
 				AD199DFA2B26A36500D56FEE /* KMPrintPosterPreviewView.swift in Sources */,
 				ADFA8EFF2B5649AE002595A4 /* KMAutoFlowOptionsSheetController.swift in Sources */,
@@ -17142,6 +17205,7 @@
 				BB8810A22B4F7D1000AFA63E /* KMVerificationActivateViewController.m in Sources */,
 				BB67EE192B54FFEF00573BF0 /* ASIDataCompressor.m in Sources */,
 				BBE78F212B3875B50071AC1A /* KMLeftSideViewController+Search.swift in Sources */,
+				AD055E212B70B3840035F824 /* KMBookmark.swift in Sources */,
 				ADFCEB382B4F78220001EBAF /* KMFile.swift in Sources */,
 				ADD1B6EA2946C02600C3FFF7 /* KMPrintChoosePageSizeMultipageView.swift in Sources */,
 				BBF2455F2AE78FF900037D08 /* KMBatchWindow.swift in Sources */,