Quellcode durchsuchen

【综合】DMG购买成功UI补充

tangchao vor 1 Woche
Ursprung
Commit
09523eb059
16 geänderte Dateien mit 557 neuen und 0 gelöschten Zeilen
  1. 6 0
      PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/Purchase/Contents.json
  2. 22 0
      PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/Purchase/KMImageNamePurchaseImage.imageset/Contents.json
  3. BIN
      PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/Purchase/KMImageNamePurchaseImage.imageset/Frame 1000007032.pdf
  4. BIN
      PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/Purchase/KMImageNamePurchaseImage.imageset/Frame 1000007033.pdf
  5. 22 0
      PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/Purchase/KMImageNamePurchaseImage2.imageset/Contents.json
  6. BIN
      PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/Purchase/KMImageNamePurchaseImage2.imageset/Frame 1000007031.pdf
  7. BIN
      PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/Purchase/KMImageNamePurchaseImage2.imageset/Frame 1000007032.pdf
  8. 22 0
      PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/Purchase/KMImageNamePurchaseSuccessIcon.imageset/Contents.json
  9. 86 0
      PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/Purchase/KMImageNamePurchaseSuccessIcon.imageset/success 1.pdf
  10. 86 0
      PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/Purchase/KMImageNamePurchaseSuccessIcon.imageset/success.pdf
  11. 123 0
      PDF Office/PDF Master/Class/Purchase/DMG/Window/KMPurchaseSuccessWindowController.swift
  12. 148 0
      PDF Office/PDF Master/Class/Purchase/DMG/Window/KMPurchaseSuccessWindowController.xib
  13. 6 0
      PDF Office/PDF Master/MemberCenter/Assets/en.lproj/MemberCenterLocalizable.strings
  14. 6 0
      PDF Office/PDF Master/MemberCenter/Assets/zh-Hans.lproj/MemberCenterLocalizable.strings
  15. 6 0
      PDF Office/PDF Master/MemberCenter/Assets/zh-Hant.lproj/MemberCenterLocalizable.strings
  16. 24 0
      PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

+ 6 - 0
PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/Purchase/Contents.json

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

+ 22 - 0
PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/Purchase/KMImageNamePurchaseImage.imageset/Contents.json

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

BIN
PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/Purchase/KMImageNamePurchaseImage.imageset/Frame 1000007032.pdf


BIN
PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/Purchase/KMImageNamePurchaseImage.imageset/Frame 1000007033.pdf


+ 22 - 0
PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/Purchase/KMImageNamePurchaseImage2.imageset/Contents.json

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

BIN
PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/Purchase/KMImageNamePurchaseImage2.imageset/Frame 1000007031.pdf


BIN
PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/Purchase/KMImageNamePurchaseImage2.imageset/Frame 1000007032.pdf


+ 22 - 0
PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/Purchase/KMImageNamePurchaseSuccessIcon.imageset/Contents.json

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

+ 86 - 0
PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/Purchase/KMImageNamePurchaseSuccessIcon.imageset/success 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.909180 2.909058 cm
+0.235294 0.803922 0.458824 scn
+29.090910 58.181763 m
+13.024418 58.181763 0.000000 45.157345 0.000000 29.090853 c
+0.000000 13.024361 13.024418 -0.000057 29.090910 -0.000057 c
+45.157402 -0.000057 58.181820 13.024361 58.181820 29.090853 c
+58.181820 45.157345 45.157402 58.181763 29.090910 58.181763 c
+h
+14.886293 29.049620 m
+14.431865 29.504047 14.431864 30.240824 14.886292 30.695251 c
+18.177551 33.986511 l
+18.631979 34.440941 19.368753 34.440941 19.823183 33.986511 c
+26.576174 27.233522 l
+39.728943 40.386292 l
+40.183369 40.840721 40.920143 40.840721 41.374573 40.386292 c
+44.665833 37.095032 l
+45.120262 36.640602 45.120262 35.903831 44.665833 35.449402 c
+27.386717 18.170284 l
+26.932289 17.715855 26.195515 17.715855 25.741085 18.170284 c
+22.449825 21.461544 l
+22.401272 21.510098 22.357904 21.561874 22.319727 21.616184 c
+14.886293 29.049620 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  945
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 64.000000 64.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
+0000001035 00000 n
+0000001057 00000 n
+0000001230 00000 n
+0000001304 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1363
+%%EOF

+ 86 - 0
PDF Office/PDF Master/Class/Appearance/Image.xcassets/Other/Purchase/KMImageNamePurchaseSuccessIcon.imageset/success.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.909180 2.909058 cm
+0.235294 0.803922 0.458824 scn
+29.090910 58.181763 m
+13.024418 58.181763 0.000000 45.157345 0.000000 29.090853 c
+0.000000 13.024361 13.024418 -0.000057 29.090910 -0.000057 c
+45.157402 -0.000057 58.181820 13.024361 58.181820 29.090853 c
+58.181820 45.157345 45.157402 58.181763 29.090910 58.181763 c
+h
+14.886293 29.049620 m
+14.431865 29.504047 14.431864 30.240824 14.886292 30.695251 c
+18.177551 33.986511 l
+18.631979 34.440941 19.368753 34.440941 19.823183 33.986511 c
+26.576174 27.233522 l
+39.728943 40.386292 l
+40.183369 40.840721 40.920143 40.840721 41.374573 40.386292 c
+44.665833 37.095032 l
+45.120262 36.640602 45.120262 35.903831 44.665833 35.449402 c
+27.386717 18.170284 l
+26.932289 17.715855 26.195515 17.715855 25.741085 18.170284 c
+22.449825 21.461544 l
+22.401272 21.510098 22.357904 21.561874 22.319727 21.616184 c
+14.886293 29.049620 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  945
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 64.000000 64.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
+0000001035 00000 n
+0000001057 00000 n
+0000001230 00000 n
+0000001304 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1363
+%%EOF

+ 123 - 0
PDF Office/PDF Master/Class/Purchase/DMG/Window/KMPurchaseSuccessWindowController.swift

@@ -0,0 +1,123 @@
+//
+//  KMPurchaseSuccessWindowController.swift
+//  PDF Reader Pro
+//
+//  Created by User-Tangchao on 2024/11/18.
+//
+
+import Cocoa
+
+let kUserCenterURL          = "https://pdfmaster.pdfreaderpro.com/user-center/account-benefits";
+let kUserCenterGiftURL      = "https://pdfmaster.pdfreaderpro.com/gift-management";
+
+class KMPurchaseSuccessWindowController: KMBaseWindowController {
+    @IBOutlet weak var iconIv: NSImageView!
+    @IBOutlet weak var titleLabel: NSTextField!
+    
+    @IBOutlet weak var imageView: NSImageView!
+    @IBOutlet var textView: NSTextView!
+    @IBOutlet weak var imageView2: NSImageView!
+    @IBOutlet var textView2: NSTextView!
+    
+    convenience init() {
+        self.init(windowNibName: "KMPurchaseSuccessWindowController")
+    }
+    
+    static let shared = KMPurchaseSuccessWindowController()
+    
+    override func windowDidLoad() {
+        super.windowDidLoad()
+        
+        iconIv.image = NSImage(named: "KMImageNamePurchaseSuccessIcon")
+        titleLabel.stringValue = NSLocalizedString("Purchased Successfully!", tableName: "MemberCenterLocalizable", comment: "")
+        titleLabel.font = .SFProTextRegularFont(20)
+        
+        
+        imageView.image = NSImage(named: "KMImageNamePurchaseImage")
+        imageView2.image = NSImage(named: "KMImageNamePurchaseImage2")
+        
+        window?.titleVisibility = .hidden
+        if KMAppearance.isDarkMode() {
+            window?.backgroundColor = NSColor(hex: "#0E1114")
+            titleLabel.textColor = NSColor(hex: "#4E7FDB")
+        } else {
+            window?.backgroundColor = .white
+            titleLabel.textColor = NSColor(hex: "#002143")
+        }
+        
+        textView.drawsBackground = false
+        textView.backgroundColor = .clear
+        textView.isEditable = false
+        textView.isSelectable = true
+        textView.textColor = NSColor.black
+        textView.font = NSFont.SFProTextRegularFont(14)
+        let tipsString = NSLocalizedString("Check your order information and benefit in Account Center.%@", tableName: "MemberCenterLocalizable", comment: "")
+        let specialOffer = NSLocalizedString("Check Now", tableName: "MemberCenterLocalizable", comment: "")
+        let fullString = String(format: tipsString, specialOffer)
+        let paragraphStyle = NSMutableParagraphStyle()
+//        paragraphStyle.alignment = .center
+        
+        let attributedString = NSMutableAttributedString(string: fullString)
+        let specialOfferRange = (fullString as NSString).range(of: specialOffer)
+        let linkColor = NSColor(named: "4982E6") ?? NSColor.blue
+        let font = NSFont.SFProTextRegularFont(14)
+        attributedString.addAttributes([
+            .foregroundColor: NSColor(named: "42464D") ?? NSColor.black as Any,
+            .font: font,
+            .paragraphStyle: paragraphStyle
+        ], range: (fullString as NSString).range(of: fullString))
+        attributedString.addAttributes([
+            .foregroundColor: linkColor,
+            .link: "action://checkNow",
+            .font: font
+        ], range: specialOfferRange)
+        textView.textStorage?.setAttributedString(attributedString)
+        textView.delegate = self
+        
+        textView2.drawsBackground = false
+        textView2.backgroundColor = .clear
+        textView2.isEditable = false
+        textView2.isSelectable = true
+        textView2.textColor = NSColor.black
+        textView2.font = NSFont.SFProTextRegularFont(14)
+        let tipsString2 = NSLocalizedString("If you have purchased multiple PDF Reader Pro Permanent in volume, check them in Account Center -> Transfer Benefits. %@", tableName: "MemberCenterLocalizable", comment: "")
+        let specialOffer2 = NSLocalizedString("Check Benefit", tableName: "MemberCenterLocalizable", comment: "")
+        let fullString2 = String(format: tipsString2, specialOffer2)
+        let paragraphStyle2 = NSMutableParagraphStyle()
+//        paragraphStyle.alignment = .center
+        
+        let attributedString2 = NSMutableAttributedString(string: fullString2)
+        let specialOfferRange2 = (fullString2 as NSString).range(of: specialOffer2)
+//        let linkColor = NSColor(named: "4982E6") ?? NSColor.blue
+//        let font = NSFont.SFProTextRegularFont(12)
+        attributedString2.addAttributes([
+            .foregroundColor: NSColor(named: "42464D") ?? NSColor.black as Any,
+            .font: font,
+            .paragraphStyle: paragraphStyle2
+        ], range: (fullString as NSString).range(of: fullString2))
+        attributedString2.addAttributes([
+            .foregroundColor: linkColor,
+            .link: "action://checkBenefit",
+            .font: font
+        ], range: specialOfferRange2)
+        textView2.textStorage?.setAttributedString(attributedString2)
+        textView2.delegate = self
+        
+        
+    }
+    
+}
+
+extension KMPurchaseSuccessWindowController: NSTextViewDelegate {
+    
+    func textView(_ textView: NSTextView, clickedOnLink link: Any, at charIndex: Int) -> Bool {
+        if let urlString = link as? String, urlString == "action://checkNow" {
+            KMTools.openURL(urlString: kUserCenterURL)
+            return true
+        } else if let urlString = link as? String, urlString == "action://checkBenefit" {
+            KMTools.openURL(urlString: kUserCenterGiftURL)
+            return true
+        }
+        return false
+    }
+}

+ 148 - 0
PDF Office/PDF Master/Class/Purchase/DMG/Window/KMPurchaseSuccessWindowController.xib

@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMPurchaseSuccessWindowController" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <connections>
+                <outlet property="iconIv" destination="y16-E4-UAz" id="y40-ea-onK"/>
+                <outlet property="imageView" destination="W2F-Je-bMO" id="cSG-nD-o49"/>
+                <outlet property="imageView2" destination="Dv4-g2-mbu" id="BKN-kj-Bv9"/>
+                <outlet property="textView" destination="PAY-TY-Qaj" id="lSL-42-Lud"/>
+                <outlet property="textView2" destination="3XM-8N-38A" id="c46-ic-qAs"/>
+                <outlet property="titleLabel" destination="vlv-KS-Ypq" id="a6i-Bs-jnD"/>
+                <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" titlebarAppearsTransparent="YES" id="F0z-JX-Cv5">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
+            <rect key="contentRect" x="196" y="240" width="695" height="342"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1440" height="875"/>
+            <value key="minSize" type="size" width="695" height="342"/>
+            <value key="maxSize" type="size" width="695" height="342"/>
+            <value key="minFullScreenContentSize" type="size" width="695" height="342"/>
+            <value key="maxFullScreenContentSize" type="size" width="695" height="342"/>
+            <view key="contentView" id="se5-gp-TjO">
+                <rect key="frame" x="0.0" y="0.0" width="695" height="342"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="y16-E4-UAz">
+                        <rect key="frame" x="316" y="258" width="64" height="64"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="64" id="h8z-zz-Am7"/>
+                            <constraint firstAttribute="height" constant="64" id="urL-8x-VAS"/>
+                        </constraints>
+                        <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="xBB-Ho-1sg"/>
+                    </imageView>
+                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vlv-KS-Ypq">
+                        <rect key="frame" x="329" y="222" width="37" height="16"/>
+                        <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="mHt-c7-2QE">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="W2F-Je-bMO">
+                        <rect key="frame" x="66" y="138" width="36" height="36"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="36" id="Gvg-IL-Ksp"/>
+                            <constraint firstAttribute="height" constant="36" id="QRU-PR-5Rj"/>
+                        </constraints>
+                        <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="g5Y-kX-Dh7"/>
+                    </imageView>
+                    <scrollView borderType="none" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bPh-s0-1T3">
+                        <rect key="frame" x="118" y="124" width="511" height="40"/>
+                        <clipView key="contentView" drawsBackground="NO" id="bgS-S5-EvM">
+                            <rect key="frame" x="0.0" y="0.0" width="511" height="40"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <textView importsGraphics="NO" richText="NO" verticallyResizable="YES" spellingCorrection="YES" smartInsertDelete="YES" id="PAY-TY-Qaj">
+                                    <rect key="frame" x="0.0" y="0.0" width="511" height="40"/>
+                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                    <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    <size key="minSize" width="511" height="40"/>
+                                    <size key="maxSize" width="511" height="10000000"/>
+                                    <color key="insertionPointColor" name="textColor" catalog="System" colorSpace="catalog"/>
+                                </textView>
+                            </subviews>
+                        </clipView>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="40" id="89X-lP-TGu"/>
+                        </constraints>
+                        <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="bP0-F8-9MT">
+                            <rect key="frame" x="-100" y="-100" width="240" height="16"/>
+                            <autoresizingMask key="autoresizingMask"/>
+                        </scroller>
+                        <scroller key="verticalScroller" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="GnD-ac-Q3P">
+                            <rect key="frame" x="495" y="0.0" width="16" height="40"/>
+                            <autoresizingMask key="autoresizingMask"/>
+                        </scroller>
+                    </scrollView>
+                    <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Dv4-g2-mbu">
+                        <rect key="frame" x="66" y="78" width="36" height="36"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="36" id="iMM-JA-Kfy"/>
+                            <constraint firstAttribute="width" constant="36" id="uuH-Jg-zQJ"/>
+                        </constraints>
+                        <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="rRE-XH-BX2"/>
+                    </imageView>
+                    <scrollView borderType="none" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Gwt-ec-WhT">
+                        <rect key="frame" x="118" y="70" width="511" height="40"/>
+                        <clipView key="contentView" drawsBackground="NO" id="aYo-kk-eN5">
+                            <rect key="frame" x="0.0" y="0.0" width="511" height="40"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <textView importsGraphics="NO" richText="NO" verticallyResizable="YES" spellingCorrection="YES" smartInsertDelete="YES" id="3XM-8N-38A">
+                                    <rect key="frame" x="0.0" y="0.0" width="511" height="40"/>
+                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                    <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    <size key="minSize" width="511" height="40"/>
+                                    <size key="maxSize" width="511" height="10000000"/>
+                                    <color key="insertionPointColor" name="textColor" catalog="System" colorSpace="catalog"/>
+                                </textView>
+                            </subviews>
+                        </clipView>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="40" id="kgs-He-oK9"/>
+                        </constraints>
+                        <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="3nf-hf-FOw">
+                            <rect key="frame" x="-100" y="-100" width="240" height="16"/>
+                            <autoresizingMask key="autoresizingMask"/>
+                        </scroller>
+                        <scroller key="verticalScroller" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="8Vi-If-Ype">
+                            <rect key="frame" x="495" y="0.0" width="16" height="40"/>
+                            <autoresizingMask key="autoresizingMask"/>
+                        </scroller>
+                    </scrollView>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="Gwt-ec-WhT" firstAttribute="leading" secondItem="W2F-Je-bMO" secondAttribute="trailing" constant="16" id="06U-ZA-qr0"/>
+                    <constraint firstItem="bPh-s0-1T3" firstAttribute="leading" secondItem="W2F-Je-bMO" secondAttribute="trailing" constant="16" id="25s-dP-RBa"/>
+                    <constraint firstItem="Gwt-ec-WhT" firstAttribute="top" secondItem="Dv4-g2-mbu" secondAttribute="top" constant="4" id="2MN-8L-rx8"/>
+                    <constraint firstItem="bPh-s0-1T3" firstAttribute="top" secondItem="W2F-Je-bMO" secondAttribute="top" constant="10" id="5CO-EK-mWt"/>
+                    <constraint firstItem="y16-E4-UAz" firstAttribute="centerX" secondItem="se5-gp-TjO" secondAttribute="centerX" id="6Sp-lI-EKl"/>
+                    <constraint firstItem="Dv4-g2-mbu" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" constant="66" id="Bv6-Xg-bZ5"/>
+                    <constraint firstItem="vlv-KS-Ypq" firstAttribute="centerX" secondItem="se5-gp-TjO" secondAttribute="centerX" id="FGB-wA-o3L"/>
+                    <constraint firstAttribute="trailing" secondItem="Gwt-ec-WhT" secondAttribute="trailing" constant="66" id="GS7-7o-2s6"/>
+                    <constraint firstAttribute="trailing" secondItem="bPh-s0-1T3" secondAttribute="trailing" constant="66" id="GfU-Eg-3C1"/>
+                    <constraint firstItem="W2F-Je-bMO" firstAttribute="top" secondItem="vlv-KS-Ypq" secondAttribute="bottom" constant="48" id="YDN-cc-b8b"/>
+                    <constraint firstItem="Dv4-g2-mbu" firstAttribute="top" secondItem="bPh-s0-1T3" secondAttribute="bottom" constant="10" id="eny-31-rty"/>
+                    <constraint firstItem="vlv-KS-Ypq" firstAttribute="top" secondItem="y16-E4-UAz" secondAttribute="bottom" constant="20" id="fEG-OX-00U"/>
+                    <constraint firstItem="y16-E4-UAz" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" constant="20" id="idh-HF-XXF"/>
+                    <constraint firstItem="W2F-Je-bMO" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" constant="66" id="kcz-qj-4E1"/>
+                </constraints>
+            </view>
+            <connections>
+                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
+            </connections>
+            <point key="canvasLocation" x="-28" y="125"/>
+        </window>
+    </objects>
+</document>

+ 6 - 0
PDF Office/PDF Master/MemberCenter/Assets/en.lproj/MemberCenterLocalizable.strings

@@ -174,3 +174,9 @@
 "This user is already a permanent member of PDF Reader Pro. You don't need to share benefits anymore." = "This user is already a permanent member of PDF Reader Pro. You don't need to share benefits anymore.";
 "User does not exist." = "User does not exist.";
 "The user already has a prize draw!" = "The user already has a prize draw!";
+
+"Purchase Succeesfully" = "Purchase Succeesfully";
+"Check your order information and benefit in Account Center.%@" = "Check your order information and benefit in Account Center.%@";
+"Check Now" = "Check Now";
+"If you have purchased multiple PDF Reader Pro Permanent in volume, check them in Account Center -> Transfer Benefits. %@" = "If you have purchased multiple PDF Reader Pro Permanent in volume, check them in Account Center -> Transfer Benefits. %@";
+"Check Benefit" = "Check Benefit";

+ 6 - 0
PDF Office/PDF Master/MemberCenter/Assets/zh-Hans.lproj/MemberCenterLocalizable.strings

@@ -170,3 +170,9 @@
 "This user is already a permanent member of PDF Reader Pro. You don't need to share benefits anymore." = "该用户已经是PDF Reader Pro永久版会员,无需再赠送哦~";
 "User does not exist." = "用户不存在。";
 "The user already has a prize draw!" = "用户已经抽过奖啦!";
+
+"Purchase Succeesfully" = "购买成功";
+"Check your order information and benefit in Account Center.%@" = "可在用户中心查看您的订单和账号权益,%@";
+"Check Now" = "立即查看";
+"If you have purchased multiple PDF Reader Pro Permanent in volume, check them in Account Center -> Transfer Benefits. %@" = "如您购买了多个永久版会员,可在用户中心-赠送会员中查看,%@";
+"Check Benefit" = "立即查看";

+ 6 - 0
PDF Office/PDF Master/MemberCenter/Assets/zh-Hant.lproj/MemberCenterLocalizable.strings

@@ -171,3 +171,9 @@
 "This user is already a permanent member of PDF Reader Pro. You don't need to share benefits anymore." = "該用戶已經是PDF Reader Pro永久版會員,不用再贈送~";
 "User does not exist." = "用戶不存在。";
 "The user already has a prize draw!" = "用戶已經抽獎啦!";
+
+"Purchase Succeesfully" = "購買成功";
+"Check your order information and benefit in Account Center.%@" = "可在用戶中心查看您的訂單和帳戶權益,%@";
+"Check Now" = "立即查看";
+"If you have purchased multiple PDF Reader Pro Permanent in volume, check them in Account Center -> Transfer Benefits. %@" = "若您購買了多位永久版會員,可在用戶中心-積分會員中查看,%@";
+"Check Benefit" = "立即查看";

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

@@ -88,6 +88,12 @@
 		65AED4B32CAA55A8005C44B3 /* KMMergeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65AED4B22CAA55A8005C44B3 /* KMMergeViewModel.swift */; };
 		65AED4B42CAA55A8005C44B3 /* KMMergeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65AED4B22CAA55A8005C44B3 /* KMMergeViewModel.swift */; };
 		65AED4B52CAA55A8005C44B3 /* KMMergeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65AED4B22CAA55A8005C44B3 /* KMMergeViewModel.swift */; };
+		65B95BAA2CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65B95BA82CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.swift */; };
+		65B95BAB2CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65B95BA82CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.swift */; };
+		65B95BAC2CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65B95BA82CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.swift */; };
+		65B95BAD2CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 65B95BA92CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.xib */; };
+		65B95BAE2CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 65B95BA92CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.xib */; };
+		65B95BAF2CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 65B95BA92CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.xib */; };
 		65C9CAEA2CA16232009794E5 /* libpaddle2onnx.1.0.7.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 65C9CAE62CA16231009794E5 /* libpaddle2onnx.1.0.7.dylib */; };
 		65C9CAEB2CA16232009794E5 /* libpaddle2onnx.1.0.7.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 65C9CAE62CA16231009794E5 /* libpaddle2onnx.1.0.7.dylib */; };
 		65C9CAEC2CA16232009794E5 /* libpaddle2onnx.1.0.7.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 65C9CAE62CA16231009794E5 /* libpaddle2onnx.1.0.7.dylib */; };
@@ -5791,6 +5797,8 @@
 		65A971272CBA1792008DB0F9 /* KMToolbarPageInputItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMToolbarPageInputItemView.swift; sourceTree = "<group>"; };
 		65AD98882CB615F000927779 /* KMNoteFilterStateViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMNoteFilterStateViewModel.swift; sourceTree = "<group>"; };
 		65AED4B22CAA55A8005C44B3 /* KMMergeViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMMergeViewModel.swift; sourceTree = "<group>"; };
+		65B95BA82CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPurchaseSuccessWindowController.swift; sourceTree = "<group>"; };
+		65B95BA92CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMPurchaseSuccessWindowController.xib; sourceTree = "<group>"; };
 		65C9CAE62CA16231009794E5 /* libpaddle2onnx.1.0.7.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libpaddle2onnx.1.0.7.dylib; sourceTree = "<group>"; };
 		65C9CAE72CA16232009794E5 /* ComDocumentAIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ComDocumentAIKit.framework; sourceTree = "<group>"; };
 		65C9CAE82CA16232009794E5 /* libDocumentAI.3.3.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libDocumentAI.3.3.3.dylib; sourceTree = "<group>"; };
@@ -8256,6 +8264,15 @@
 			path = Model;
 			sourceTree = "<group>";
 		};
+		65B95BA72CEB5BC600BC0BC0 /* Window */ = {
+			isa = PBXGroup;
+			children = (
+				65B95BA82CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.swift */,
+				65B95BA92CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.xib */,
+			);
+			path = Window;
+			sourceTree = "<group>";
+		};
 		65C9CAFF2CA16B36009794E5 /* Resource */ = {
 			isa = PBXGroup;
 			children = (
@@ -13888,6 +13905,7 @@
 		BBA922102B4E77CA0061057A /* DMG */ = {
 			isa = PBXGroup;
 			children = (
+				65B95BA72CEB5BC600BC0BC0 /* Window */,
 				65EF3A7B2C81C1F500CCFC8F /* Tools */,
 				BBA922122B4E783F0061057A /* KMPurchaseCompareDMGWindowController.h */,
 				BBA922142B4E783F0061057A /* KMPurchaseCompareDMGWindowController.m */,
@@ -15540,6 +15558,7 @@
 				BB4F7E912B0C80000077EC8C /* KMNoteColorCollectionViewItem.xib in Resources */,
 				ADF1569C29A63CBF001D1018 /* KMLightMember.xcassets in Resources */,
 				ADAFDA792AEB5FCD00F084BC /* KMHomeHistoryCollectionItem.xib in Resources */,
+				65B95BAD2CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.xib in Resources */,
 				899700EB28F3E4D3009AF911 /* MainWindowController.xib in Resources */,
 				BB49ED01293F459500C82CA2 /* KMConvertPPTsWindowController.xib in Resources */,
 				9FF371C42C69A6BB005F9CC5 /* CAreaSettingWindowController.xib in Resources */,
@@ -16126,6 +16145,7 @@
 				AD3AAD1F2B0B5B4400DE5FE7 /* KMCompareCoveringWindowController.xib in Resources */,
 				BB24D4AB2977BE6700041659 /* KMRedactConfirmWindowController.xib in Resources */,
 				BB234F052BA3D798008B3754 /* KMAIIconGuideView.xib in Resources */,
+				65B95BAE2CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.xib in Resources */,
 				ADFA8F162B60E02B002595A4 /* KMSecureAlertView.xib in Resources */,
 				BB1EC8022967B26700EC0BC3 /* KMPDFEditViewController.xib in Resources */,
 				ADAFDA5F2AEB455500F084BC /* KMHomeContentView.xib in Resources */,
@@ -16425,6 +16445,7 @@
 				AD7D5CE12B957693006562CD /* KMBookmarkOutlineFileCellView.xib in Resources */,
 				AD1CA4162A061CCD0070541F /* KMAnnotationScreenColorViewItem.xib in Resources */,
 				ADE787B02AA5AA50002EC85A /* KMAccountExceptionView.xib in Resources */,
+				65B95BAF2CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.xib in Resources */,
 				AD1CA3FC2A05FCB60070541F /* KMAnnotationScreenViewController.xib in Resources */,
 				9FF371D52C69B8C6005F9CC5 /* CPerimeterMeasureInfoWindowController.xib in Resources */,
 				ADD1B6F62946C07800C3FFF7 /* KMPrintChoosePageSizePosterView.xib in Resources */,
@@ -17526,6 +17547,7 @@
 				89752E042939DB42003FF08E /* KMToolbarViewController.swift in Sources */,
 				BB146FD5299DC0D100784A6A /* GTLRObject.m in Sources */,
 				8942F7F02926087200389627 /* KMSearchViewController.swift in Sources */,
+				65B95BAA2CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.swift in Sources */,
 				BB32BF232A5EA05900D11348 /* KMAnalytics.swift in Sources */,
 				ADE787A22AA5A833002EC85A /* KMAccountExceptionWindowController.swift in Sources */,
 				9F1FE4AE29406E4700E952CA /* CTPresentationModeController.m in Sources */,
@@ -19408,6 +19430,7 @@
 				ADD1B70B29471FA500C3FFF7 /* KMPrintChoosePresenter.swift in Sources */,
 				BB09477F2C1A9E50005C4DEE /* KMPDFThumbBaseModel.swift in Sources */,
 				AD055E612B85E04C0035F824 /* KMTextWithIconCell.swift in Sources */,
+				65B95BAB2CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.swift in Sources */,
 				AD8810AA29A8463600178CA1 /* KMAccountInfoWindowController.swift in Sources */,
 				89752DF329389F82003FF08E /* KMToolbarItem.m in Sources */,
 				9F0CB526298656BA00007028 /* KMDesignToken+BorderWidth.swift in Sources */,
@@ -19825,6 +19848,7 @@
 				BB4F7E832B0C4E140077EC8C /* KMNoteFilterCollevtionViewItem.swift in Sources */,
 				BB60138E2AD3A94200A76FB2 /* CPDFSignatureAnnotation+PDFListView.swift in Sources */,
 				BBBAED162B57E97000266BD3 /* SKTypeSelectHelper.swift in Sources */,
+				65B95BAC2CEB5C0100BC0BC0 /* KMPurchaseSuccessWindowController.swift in Sources */,
 				BB6347B62AF224D600F5438E /* KMConvertCollectionViewHeader.swift in Sources */,
 				9F4ACEA62CC5F328005CF727 /* KMMemberCenterManager.swift in Sources */,
 				ADBC2D2A299DCA76006280C8 /* NSTextField+Layer.swift in Sources */,