Pārlūkot izejas kodu

【打印】Pro打印代码迁移

lizhe 10 mēneši atpakaļ
vecāks
revīzija
2510d9cded
30 mainītis faili ar 9290 papildinājumiem un 75 dzēšanām
  1. 19 75
      PDF Office/PDF Master/Class/Common/Tools/KMPageSizeTool.swift
  2. 59 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMBookletManager.h
  3. 396 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMBookletManager.m
  4. 13 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMBookletPDFView.h
  5. 31 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMBookletPDFView.m
  6. 68 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMBookletParameterModel.h
  7. 18 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMBookletParameterModel.m
  8. 16 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMMaskView.h
  9. 47 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMMaskView.m
  10. 18 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMPDFBookletWindowController.h
  11. 1074 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMPDFBookletWindowController.m
  12. 549 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMPDFBookletWindowController.xib
  13. 21 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/NSMutableArray+KMOddEvenPartFetch.h
  14. 32 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/NSMutableArray+KMOddEvenPartFetch.m
  15. 17 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/KMPageRangeRecordTool.h
  16. 32 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/KMPageRangeRecordTool.m
  17. 70 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Multiple/KMPDFMultipleManager.h
  18. 531 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Multiple/KMPDFMultipleManager.m
  19. 17 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Multiple/KMPDFMultiplePrintWindowController.h
  20. 1104 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Multiple/KMPDFMultiplePrintWindowController.m
  21. 971 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Multiple/KMPDFMultiplePrintWindowController.xib
  22. 17 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Poster/KMPDFPosterPrintWindowController.h
  23. 1020 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Poster/KMPDFPosterPrintWindowController.m
  24. 823 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Poster/KMPDFPosterPrintWindowController.xib
  25. 78 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Poster/KMPosterPrintManager.h
  26. 650 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Poster/KMPosterPrintManager.m
  27. 21 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/PrintManage/KMPDFPrintManageWindowController.h
  28. 973 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/PrintManage/KMPDFPrintManageWindowController.m
  29. 413 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/PrintManage/KMPDFPrintManageWindowController.xib
  30. 192 0
      PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

+ 19 - 75
PDF Office/PDF Master/Class/Common/Tools/KMPageSizeTool.swift

@@ -6,80 +6,24 @@
 //
 
 import Cocoa
+let KMPaperSizeNameA3: String = NSLocalizedString("A3", comment: "")
+let KMPaperSizeNameA4: String = NSLocalizedString("A4", comment: "")
+let KMPaperSizeNameA5: String = NSLocalizedString("A5", comment: "")
+let KMPaperSizeNameB5: String = NSLocalizedString("B5", comment: "")
+let KMPaperSizeNameEnvelope10: String = NSLocalizedString("Envelope #10", comment: "")
+let KMPaperSizeNameEnvelopeChoukei: String = NSLocalizedString("Envelope Choukei 3", comment: "")
+let KMPaperSizeNameEnvelopeDL: String = NSLocalizedString("Envelope DL", comment: "")
+let KMPaperSizeNameJISB5: String = NSLocalizedString("JIS B5", comment: "")
+let KMPaperSizeNameROC16K: String = NSLocalizedString("ROC 16K", comment: "")
+let KMPaperSizeNameSuper: String = NSLocalizedString("Super B/A3", comment: "")
+let KMPaperSizeNameTabloid: String = NSLocalizedString("Tabloid", comment: "")
+let KMPaperSizeNameTabloidOversize: String = NSLocalizedString("Tabloid Oversize", comment: "")
+let KMPaperSizeNameUSLegal: String = NSLocalizedString("US Legal", comment: "")
+let KMPaperSizeNameUSLetter: String = NSLocalizedString("US Letter", comment: "")
 
-class KMPageSizeTool: NSObject {
-    class var KMPaperSizeNameA3: String {
-        get {
-            return NSLocalizedString("A3", comment: "")
-        }
-    }
-    class var KMPaperSizeNameA4: String {
-        get {
-            return NSLocalizedString("A4", comment: "")
-        }
-    }
-    class var KMPaperSizeNameA5: String {
-        get {
-            return NSLocalizedString("A5", comment: "")
-        }
-    }
-    class var KMPaperSizeNameB5: String {
-        get {
-            return NSLocalizedString("B5", comment: "")
-        }
-    }
-    class var KMPaperSizeNameEnvelope10: String {
-        get {
-            return NSLocalizedString("Envelope #10", comment: "")
-        }
-    }
-    class var KMPaperSizeNameEnvelopeChoukei: String {
-        get {
-            return NSLocalizedString("Envelope Choukei 3", comment: "")
-        }
-    }
-    class var KMPaperSizeNameEnvelopeDL: String {
-        get {
-            return NSLocalizedString("Envelope DL", comment: "")
-        }
-    }
-    class var KMPaperSizeNameJISB5: String {
-        get {
-            return NSLocalizedString("JIS B5", comment: "")
-        }
-    }
-    class var KMPaperSizeNameROC16K: String {
-        get {
-            return NSLocalizedString("ROC 16K", comment: "")
-        }
-    }
-    class var KMPaperSizeNameSuper: String {
-        get {
-            return NSLocalizedString("Super B/A3", comment: "")
-        }
-    }
-    class var KMPaperSizeNameTabloid: String {
-        get {
-            return NSLocalizedString("Tabloid", comment: "")
-        }
-    }
-    class var KMPaperSizeNameTabloidOversize: String {
-        get {
-            return NSLocalizedString("Tabloid Oversize", comment: "")
-        }
-    }
-    class var KMPaperSizeNameUSLegal: String {
-        get {
-            return NSLocalizedString("US Legal", comment: "")
-        }
-    }
-    class var KMPaperSizeNameUSLetter: String {
-        get {
-            return NSLocalizedString("US Letter", comment: "")
-        }
-    }
+@objcMembers class KMPageSizeTool: NSObject {
     
-    class func paperSize() -> [String] {
+    static func paperSize() -> [String] {
         return [KMPaperSizeNameA3,
                  KMPaperSizeNameA4,
                  KMPaperSizeNameA5,
@@ -96,7 +40,7 @@ class KMPageSizeTool: NSObject {
                  KMPaperSizeNameUSLetter]
     }
     
-    class func getPaperSize(paperName: String) -> NSSize {
+    static func getPaperSize(paperName: String) -> NSSize {
         var size = CGSizeZero
         if (paperName == KMPaperSizeNameA3) {
             size = CGSizeMake(297, 420)
@@ -130,7 +74,7 @@ class KMPageSizeTool: NSObject {
         return size
     }
     
-    class func conversion(withUnit: String, value: CGFloat) -> String {
+    static func conversion(withUnit: String, value: CGFloat) -> String {
         var f = value
         if (withUnit == "cm") {
             f = value / 10.0
@@ -149,7 +93,7 @@ class KMPageSizeTool: NSObject {
         }
     }
     
-    class func conversion(with unit: String, from funit: String, value: CGFloat) -> String {
+    static func conversion(with unit: String, from funit: String, value: CGFloat) -> String {
         var f = value
         if (unit == funit) {
             

+ 59 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMBookletManager.h

@@ -0,0 +1,59 @@
+//
+//  BLBookletManager.h
+//  Booklet
+//
+//  Created by 蒋志鹏 on 2018/5/3.
+//  Copyright © 2018年 NO1. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <Quartz/Quartz.h>
+
+@class PDFPage;
+@class KMBookletParameterModel;
+
+typedef void(^Booklet_GenerateNewPDFBlock)(BOOL success,NSString *urlString);
+
+@interface KMBookletManager : NSObject
+
+//单例方法
++ (instancetype)sharedManager;
+
+
+/**
+ 根据参数对象生成PDF
+
+ @param parameterModel 参数对象
+ @param handle 回调
+ */
+- (void)generateNewPDFWithParameterModel:(KMBookletParameterModel*)parameterModel
+                       completionHandler:(Booklet_GenerateNewPDFBlock) handle;
+
+/**
+ 根据模型对象,生成最后用来绘制的数组,其中,每个数组两个元素(一张page画两个page)
+
+ @param parameterModel 参数对象
+ @return 绘制数组
+ */
+- (NSArray *)fetchDrawPageArraysWithModel:(KMBookletParameterModel *)parameterModel;
+
+/**
+ 绘制PDF
+
+ @param myPDFContext 画布对象
+ @param parameterModel 参数对象
+ @param subArr 绘制page数组
+ */
+- (void)drawPageWithContext:(CGContextRef) myPDFContext
+             parameterModel:(KMBookletParameterModel *)parameterModel
+                 printArray:(NSArray *)subArr;
+
+/**
+ 对原始数组进行重组,比如0,1,2,3,4,5--> [0,5],[4,1],[2,3],数字代表数组下标
+
+ @param primaryArray 待处理数组
+ @return 处理好的数组
+ */
+- (NSMutableArray *)regroupBothSidesPrintArrayWithPrimaryArray:(NSArray *)primaryArray;
+
+@end

+ 396 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMBookletManager.m

@@ -0,0 +1,396 @@
+//
+//  BLBookletManager.m
+//  Booklet
+//
+//  Created by 蒋志鹏 on 2018/5/3.
+//  Copyright © 2018年 NO1. All rights reserved.
+//
+
+#import "KMBookletManager.h"
+#import "KMBookletParameterModel.h"
+#import "NSMutableArray+KMOddEvenPartFetch.h"
+
+NSString *const BLBlankPageCountKey = @"blankPageNum";//空白页面数量key
+NSString *const BLBookletInfoKey = @"bookletInfo";//小册子编号和页数信息key
+
+@interface KMBookletManager()
+
+
+@end
+
+@implementation KMBookletManager
+
+- (void)dealloc
+{
+
+}
+
+//单例方法
+static KMBookletManager *manager = nil;
+
++ (instancetype)sharedManager
+{
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        manager = [[KMBookletManager alloc] init];
+    });
+    return manager;
+}
+
+//根据参数,生成PDF并回调
+- (void)generateNewPDFWithParameterModel:(KMBookletParameterModel *)parameterModel
+                       completionHandler:(Booklet_GenerateNewPDFBlock)handle
+{
+    //获取数组,如果数组为空,回调错误,不处理
+    NSArray *printArr = [self fetchDrawPageArraysWithModel:parameterModel];
+    if (printArr.count == 0) {
+        if (handle) {
+            handle(NO,parameterModel.savePath);
+        }
+        return;
+    }
+
+    //添加,统一后缀名为pdf
+    if (!parameterModel.savePath.pathExtension) {
+        parameterModel.savePath = [parameterModel.savePath stringByAppendingString:@".pdf"];
+    }else{
+        NSString *lowString = [parameterModel.savePath.pathExtension lowercaseString];
+        if (![lowString isEqualToString:@"pdf"]) {
+            parameterModel.savePath = [parameterModel.savePath stringByAppendingString:@".pdf"];
+        }else{
+            NSMutableString *mNewName = [parameterModel.savePath mutableCopy];
+            parameterModel.savePath = [mNewName stringByReplacingOccurrencesOfString:parameterModel.savePath.pathExtension withString:@"pdf"];
+        }
+    }
+    
+    //创建画布
+    CGRect mediaBox;
+    CGContextRef myPDFContext = NULL;
+    mediaBox = CGRectMake(0, 0, parameterModel.pageSize.width, parameterModel.pageSize.height);
+    CFStringRef ref = (__bridge CFStringRef)parameterModel.savePath;
+    myPDFContext = MyPDFContextCreate (&mediaBox, ref);
+    //如果画布为空,回调错误,返回
+    if (!myPDFContext) {
+        if (handle) {
+            handle(NO,parameterModel.savePath);
+        }
+        return;
+    }
+    CFStringRef myKeys[1];
+    CFTypeRef myValues[1];
+    myKeys[0] = kCGPDFContextMediaBox;
+    myValues[0] = (CFTypeRef) CFDataCreate(NULL,(const UInt8 *)&mediaBox, sizeof (CGRect));
+    CFDictionaryRef pageDictionary = CFDictionaryCreate(NULL, (const void **) myKeys,
+                                                        (const void **) myValues, 1,
+                                                        &kCFTypeDictionaryKeyCallBacks,&kCFTypeDictionaryValueCallBacks);
+    //遍历将要打印的数组,打印PDFpage
+    for (NSInteger j = 0 ;j <printArr.count;j++ )
+    {
+        //开始画PDF
+        NSArray *subArr = printArr[j];
+        CGPDFContextBeginPage(myPDFContext, pageDictionary);
+        [self drawPageWithContext:myPDFContext parameterModel:parameterModel printArray:subArr];
+        CGContextEndPage(myPDFContext);
+    }
+    CFRelease(pageDictionary);// 8
+    CFRelease(myValues[0]);
+    CGPDFContextClose(myPDFContext);
+    CGContextRelease(myPDFContext);
+    if (handle) {
+        handle(YES,parameterModel.savePath);
+    }
+   
+}
+
+//获取最终用来绘制的数组
+- (NSArray *)fetchDrawPageArraysWithModel:(KMBookletParameterModel *)parameterModel
+{
+    //获取page数组(双面打印时)
+    NSMutableArray *printArr = [self regroupBothSidesPrintArrayWithPrimaryArray:parameterModel.pageArray];
+    //如果是正面或者背面,那么对数组做处理
+    if (parameterModel.printStyle == kBLPrintStyle_FrontOnly) {
+        [printArr subArrayWithType:KMSubArrayTypeOdd];
+    }else if (parameterModel.printStyle == kBLPrintStyle_BackOnly){
+        [printArr subArrayWithType:KMSubArrayTypeEven];
+    }
+    
+    //是否需要交换位置,当为左边,或者为左高的时候,需要交换两个Page的左右位置
+    BOOL reverse = NO;
+    switch (parameterModel.layoutStyle) {
+        case kBLLayoutStyle_left:
+            reverse = YES;
+            break;
+            
+        case kBLLayoutStyle_leftTall:
+            reverse = YES;
+            break;
+        default:
+            break;
+    }
+    if (reverse) {
+        for (NSMutableArray *arr in printArr) {
+            PDFPage *page = [arr.firstObject copy];
+            [arr removeObjectAtIndex:0];
+            [arr addObject:page];
+        }
+    }
+    
+    //需要颠倒顺序如:@[@"1",@"2",@"3"] --> @[@"3",@"2",@"1"];
+    if (parameterModel.reversePages) {
+        //只有数组个数大于1才有换序的必要
+        if (printArr.count > 1) {
+            NSMutableArray *reverseArray = [NSMutableArray new];
+            for (NSInteger i = printArr.count; i > 0 ; i--) {
+                [reverseArray addObject:printArr[i -1]];
+            }
+            [printArr removeAllObjects];
+            [printArr  addObjectsFromArray:reverseArray];
+        }
+    }
+    
+    //计算最终的数组,页数
+    NSMutableArray *newArray = [NSMutableArray new];
+    //数组的起点和终点
+    NSInteger firstPageIndexPlusOne = 0;
+    NSInteger lastPageIndexPlusOne = 0;
+    //如果是双面打印,那么就要乘以2
+    if (parameterModel.printStyle == kBLPrintStyle_BothSide) {
+        firstPageIndexPlusOne =  2 * parameterModel.sheetFromIndex;
+        lastPageIndexPlusOne = 2 * parameterModel.sheetEndindex;
+    }else{
+        firstPageIndexPlusOne = parameterModel.sheetFromIndex;
+        lastPageIndexPlusOne = parameterModel.sheetEndindex;
+    }
+    //提取数组元素
+    for (NSInteger i = firstPageIndexPlusOne; i < lastPageIndexPlusOne ; i ++) {
+        [newArray addObject:printArr[i]];
+    }
+    
+    [printArr removeAllObjects];
+    [printArr addObjectsFromArray:newArray];
+    
+    return printArr;
+}
+
+- (void)drawPageWithContext:(CGContextRef) myPDFContext
+             parameterModel:(KMBookletParameterModel *)parameterModel
+                 printArray:(NSArray *)subArr
+
+{
+ 
+    for (NSInteger i = 0; i < subArr.count; i++) {
+        {
+            //定义X偏移,Y偏移,缩放比例
+            CGFloat xTransform = 0;
+            CGFloat yTransform = 0;
+            CGFloat scale = 0;
+            
+            //将用来绘制的PDFPage对象
+            PDFPage *page = subArr[i];
+            
+            //是否需要移除注释
+            NSMutableArray *annotations = [NSMutableArray array];
+            for (PDFAnnotation *annotation in page.annotations) {
+                [annotations addObject:annotation];
+            }
+            
+            if (parameterModel.commentForms == kBookletCommentForms_DocumentOnly) {
+                for (PDFAnnotation *annotation in annotations) {
+                    [annotation.page removeAnnotation:annotation];
+                }
+            } else if (parameterModel.commentForms == kBookletCommentForms_DocumentAndStamps) {
+                for (PDFAnnotation *annotation in annotations) {
+                    if (![annotation isKindOfClass:[PDFAnnotationStamp class]]) {
+                        [annotation.page removeAnnotation:annotation];
+                    }
+                }
+            }
+            
+            //page原尺寸
+            CGSize originalPageSize = [page boundsForBox:kPDFDisplayBoxCropBox].size;
+            
+            //自动旋转
+            if (parameterModel.autoRotatePage) {
+                //旋转规则:如果当前的实际宽高(由宽高和旋转角度得到)的关系是宽大于高,那么要逆时针旋转90度;
+                if (page.rotation == 0) {
+                    CGFloat actualWidth = originalPageSize.width;
+                    CGFloat actualHeight = originalPageSize.height;
+                    if (actualWidth > actualHeight) {
+                        page.rotation = page.rotation - 90;
+                    }
+                }else if (page.rotation == 90){
+                    CGFloat actualWidth = originalPageSize.height;
+                    CGFloat actualHeight = originalPageSize.width;
+                    if (actualWidth > actualHeight) {
+                        page.rotation = page.rotation -90;
+                    }
+                }else if (page.rotation == 180){
+                    CGFloat actualWidth = originalPageSize.width;
+                    CGFloat actualHeight = originalPageSize.height;
+                    if (actualWidth > actualHeight) {
+                        page.rotation = page.rotation - 90;
+                    }
+                }else if (page.rotation == 270){
+                    CGFloat actualWidth = originalPageSize.height;
+                    CGFloat actualHeight = originalPageSize.width;
+                    if (actualWidth > actualHeight) {
+                        page.rotation = page.rotation - 90;
+                    }
+                }
+            }
+            
+            //如果page的旋转角度对180求余还真,那么要将宽高大小交换
+            if (page.rotation%180) {
+                originalPageSize = CGSizeMake(originalPageSize.height, originalPageSize.width);
+            }
+            
+            //画布大小
+            CGSize availableSize = CGSizeMake((parameterModel.pageSize.width - parameterModel.gap)/2, parameterModel.pageSize.height);
+            //画布和原来的page宽之比
+            CGFloat wRatio = availableSize.width/originalPageSize.width;
+            //画布和原来的page高之比
+            CGFloat hRatio = availableSize.height/originalPageSize.height;
+            //取最小值
+            CGFloat ratio = MIN(wRatio, hRatio);
+            //如果scale大于1那么等于1(只允许缩小,不可以放大)
+            scale = ratio > 1 ? 1 : ratio;
+            //在画布上page的实际尺寸
+            CGSize realSize = CGSizeMake(originalPageSize.width * scale, originalPageSize.height *scale);
+            //画第一张和画第二张x偏移区分
+            if (i == 0) {
+                xTransform = (availableSize.width - realSize.width)/2;
+            }else{
+                xTransform = (availableSize.width - realSize.width)/2 + parameterModel.pageSize.width/2 + parameterModel.gap/2;
+            }
+            //Y偏移
+            yTransform = (availableSize.height - realSize.height)/2;
+            //画布状态入栈
+            CGContextSaveGState(myPDFContext);
+            //偏移
+            CGContextTranslateCTM(myPDFContext, xTransform, yTransform);
+            //缩放
+            CGContextScaleCTM(myPDFContext, scale, scale);
+            //系统区分,绘制
+            if (@available(macOS 10.12, *)) {
+                [page drawWithBox:kPDFDisplayBoxCropBox toContext:myPDFContext];
+                [page transformContext:myPDFContext forBox:kPDFDisplayBoxCropBox];
+            } else {
+                [NSGraphicsContext saveGraphicsState];
+                [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithGraphicsPort:myPDFContext flipped:YES]];
+                [page drawWithBox:kPDFDisplayBoxCropBox];
+                
+                [NSGraphicsContext restoreGraphicsState];
+                [page transformContextForBox:kPDFDisplayBoxCropBox];
+            }
+            //画布状态出栈
+            CGContextRestoreGState(myPDFContext);
+        }
+    }
+   
+}
+
+//创建一个图形上下文对象
+CGContextRef MyPDFContextCreate (const CGRect *inMediaBox,
+                                 CFStringRef path)
+{
+    CGContextRef myOutContext = NULL;
+    CFURLRef url;
+    
+    url = CFURLCreateWithFileSystemPath (NULL, // 1
+                                         path,
+                                         kCFURLPOSIXPathStyle,
+                                         false);
+    if (url != NULL) {
+        myOutContext = CGPDFContextCreateWithURL (url,// 2
+                                                  inMediaBox,
+                                                  NULL);
+        CFRelease(url);// 3
+    }
+    return myOutContext;// 4
+}
+
+#pragma mark - caculate
+
+- (NSMutableArray *)regroupBothSidesPrintArrayWithPrimaryArray:(NSArray *)primaryArray
+{
+    
+    NSMutableArray * backArray = [NSMutableArray array];
+    NSDictionary *infoDict = [self calculatePagesPerBookletWithBookletNumber:1 totalPage:primaryArray.count];
+    
+    //小册子对应的页数信息
+    NSDictionary *detailInfoDict = infoDict[BLBookletInfoKey];
+    
+    //空白页数量
+    NSInteger blankPageCount = [(NSNumber *)infoDict[BLBlankPageCountKey] integerValue];
+   
+    NSMutableArray *tempArray = [NSMutableArray arrayWithArray:primaryArray];
+    for (NSInteger i = 0; i < blankPageCount; i ++) {
+        PDFPage *page = [[PDFPage alloc] init];
+        [tempArray addObject:page];
+    }
+    
+    NSInteger sheetCount = [detailInfoDict.allValues.lastObject integerValue];
+    for (NSInteger i = 0; i < sheetCount; i ++) {
+        
+        NSMutableArray *tArr1 = [NSMutableArray new];
+        PDFPage *addingPage1 = tempArray[tempArray.count - 2 * i - 1];
+        PDFPage *addingPage2 = tempArray[2 * i];
+        
+        [tArr1 addObject:addingPage2];
+        [tArr1 addObject:addingPage1];
+        [backArray addObject:tArr1];
+        
+        NSMutableArray *tArr2 = [NSMutableArray new];
+        PDFPage *addingPage3 = tempArray[2 * i + 1];
+        PDFPage *addingPage4 = tempArray[tempArray.count - 2 * i -2];
+        
+        [tArr2 addObject:addingPage4];
+        [tArr2 addObject:addingPage3];
+        [backArray addObject:tArr2];
+        
+        
+    }
+    
+    return backArray;
+}
+
+- (NSDictionary *)calculatePagesPerBookletWithBookletNumber:(NSInteger)bookletNum
+                                                  totalPage:(NSInteger)totalPageNum
+
+{
+    NSMutableDictionary *backDict = [NSMutableDictionary dictionary];
+    NSMutableDictionary *bookletPageNumInfoDict = [NSMutableDictionary dictionary];
+    
+    //对4取余,得到最后一个sheet会有多少张page
+    NSInteger surplusPages = totalPageNum % 4;
+    //总页数(每一页四页)= 总页数/4+是否有余数的bool值
+    NSInteger tTotalPageNum = totalPageNum/4 + (surplusPages > 0 ? 1:0);
+    
+    //平均每一个册子有的页数
+    NSInteger averagePageNum = tTotalPageNum / bookletNum;
+    //平均分完还剩余多少页
+    NSInteger surplusPageNum = tTotalPageNum % bookletNum;
+    
+    //遍历,给小册子赋值(数量)
+    for (NSInteger i = 0; i < bookletNum; i++) {
+        [bookletPageNumInfoDict setObject:[NSNumber numberWithInteger:averagePageNum] forKey:[NSString stringWithFormat:@"%ld",i]];
+    }
+    
+    //遍历,给靠前的小册子添加页数
+    for (NSInteger j = 0; j < surplusPageNum; j++) {
+        [bookletPageNumInfoDict setObject:[NSNumber numberWithInteger:averagePageNum + 1] forKey:[NSString stringWithFormat:@"%ld",j]];
+    }
+    //空白页数量(分完了之后,最后一个小册子的空白页数量)
+    NSInteger blankPageNum = tTotalPageNum * 4 - totalPageNum;
+    
+    [backDict setObject:[NSNumber numberWithInteger:blankPageNum] forKey:BLBlankPageCountKey];
+    
+    [backDict setObject:bookletPageNumInfoDict forKey:BLBookletInfoKey];
+
+    return backDict;
+    
+}
+
+
+
+@end

+ 13 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMBookletPDFView.h

@@ -0,0 +1,13 @@
+//
+//  KMBookletPDFView.h
+//  PDF Reader
+//
+//  Created by 蒋志鹏 on 2018/5/24.
+//  Copyright © 2018 Kdan Mobile. All rights reserved.
+//
+
+#import <Quartz/Quartz.h>
+
+@class KMBookletParameterModel;
+@interface KMBookletPDFView : PDFView
+@end

+ 31 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMBookletPDFView.m

@@ -0,0 +1,31 @@
+//
+//  KMBookletPDFView.m
+//  PDF Reader
+//
+//  Created by 蒋志鹏 on 2018/5/24.
+//  Copyright © 2018 Kdan Mobile. All rights reserved.
+//
+
+#import "KMBookletPDFView.h"
+#import "KMBookletParameterModel.h"
+#import "KMBookletManager.h"
+
+@interface PDFPage ()
+
+@property (nonatomic, assign) NSInteger pageNum;
+
+@end
+
+@interface KMBookletPDFView()
+
+
+@end
+
+@implementation KMBookletPDFView
+
+-(void)dealloc
+{
+    
+}
+
+@end

+ 68 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMBookletParameterModel.h

@@ -0,0 +1,68 @@
+//
+//  BLParameterModel.h
+//  Booklet
+//
+//  Created by 蒋志鹏 on 2018/5/21.
+//  Copyright © 2018 Booklet. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <Cocoa/Cocoa.h>
+
+//Booklet布局方式
+typedef NS_ENUM(NSUInteger, kBLLayoutStyle) {
+    kBLLayoutStyle_left = 0,
+    kBLLayoutStyle_right,
+    kBLLayoutStyle_leftTall,
+    kBLLayoutStyle_rightTall
+};
+
+//打印方式
+typedef NS_ENUM(NSUInteger, kBLPrintStyle) {
+    kBLPrintStyle_FrontOnly = 0,
+    kBLPrintStyle_BackOnly,
+    kBLPrintStyle_BothSide
+};
+
+//距离单位
+typedef NS_ENUM(NSUInteger, kBookletPagesGapUnit) {
+    kBookletPagesGapUnit_MM = 0,
+    kBookletPagesGapUnit_CM,
+    kBookletPagesGapUnit_IN,
+};
+
+//是否保留注释
+typedef NS_ENUM(NSUInteger, kBookletCommentForms) {
+    kBookletCommentForms_DocumentOnly = 0,
+    kBookletCommentForms_DocumentAndMarkups,
+    kBookletCommentForms_DocumentAndStamps,
+};
+
+@interface KMBookletParameterModel : NSObject
+
+//page数组
+@property (nonatomic, retain) NSMutableArray *pageArray;
+//新page的页面大小
+@property (nonatomic, assign) CGSize pageSize;
+//页间距
+@property (nonatomic, assign) CGFloat gap;
+//保存路径
+@property (nonatomic, retain) NSString *savePath;
+//布局样式
+@property (nonatomic, assign) kBLLayoutStyle layoutStyle;
+//打印样式
+@property (nonatomic, assign) kBLPrintStyle printStyle;
+//是否自动调整
+@property (nonatomic, assign) BOOL autoRotatePage;
+//是否自动旋转
+@property (nonatomic, assign) BOOL reversePages;
+//sheet起点
+@property (nonatomic, assign) NSInteger sheetFromIndex;
+//sheet终点
+@property (nonatomic, assign) NSInteger sheetEndindex;
+//间距单位
+@property (nonatomic, assign) kBookletPagesGapUnit gapUnit;
+//批注选择(去除注释 ,保留所有注释,保留所有PDFAnnotationStamp类型注释)
+@property (nonatomic, assign) kBookletCommentForms commentForms;
+
+@end

+ 18 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMBookletParameterModel.m

@@ -0,0 +1,18 @@
+//
+//  BLParameterModel.m
+//  Booklet
+//
+//  Created by 蒋志鹏 on 2018/5/21.
+//  Copyright © 2018 Booklet. All rights reserved.
+//
+
+#import "KMBookletParameterModel.h"
+
+@implementation KMBookletParameterModel
+
+- (void)dealloc
+{
+
+}
+
+@end

+ 16 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMMaskView.h

@@ -0,0 +1,16 @@
+//
+//  KMMaskView.h
+//  PDF Reader Pro Edition
+//
+//  Created by zenghong on 6/20/23.
+//
+
+#import <Cocoa/Cocoa.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KMMaskView : NSView
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 47 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMMaskView.m

@@ -0,0 +1,47 @@
+//
+//  KMMaskView.m
+//  PDF Reader Pro Edition
+//
+//  Created by zenghong on 6/20/23.
+//
+
+#import "KMMaskView.h"
+
+@implementation KMMaskView
+
+
+- (void)dealloc
+{
+
+}
+
+- (void)drawRect:(NSRect)dirtyRect {
+    [super drawRect:dirtyRect];
+
+    self.wantsLayer = YES;
+    self.layer.backgroundColor = [NSColor clearColor].CGColor;
+}
+
+- (instancetype)initWithFrame:(NSRect)frameRect
+{
+    self = [super initWithFrame:frameRect];
+    if (self) {
+        
+    }
+    return self;
+}
+
+#pragma mark - Mouse Event
+
+//重写是为了防止时间传递到父视图上去。具体的体现是隔着一个View还能操作window
+- (void)mouseDown:(NSEvent *)event
+{
+    
+}
+
+- (void)mouseUp:(NSEvent *)event
+{
+    
+}
+
+@end

+ 18 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMPDFBookletWindowController.h

@@ -0,0 +1,18 @@
+//
+//  KMPDFBookletWindowController.h
+//  PDF Reader
+//
+//  Created by 蒋志鹏 on 2018/5/22.
+//  Copyright © 2018 Kdan Mobile. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import <Quartz/Quartz.h>
+
+@interface KMPDFBookletWindowController : NSWindowController
+
+- (id)initWithPDFFilePath:(NSString *)filePath password:(nullable NSString *)password;
+
+- (id)initWithDocument:(PDFDocument *)pdfDocument;
+
+@end

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1074 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMPDFBookletWindowController.m


+ 549 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/KMPDFBookletWindowController.xib

@@ -0,0 +1,549 @@
+<?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"/>
+        <plugIn identifier="com.apple.pdfkit.ibplugin" version="22505"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMPDFBookletWindowController">
+            <connections>
+                <outlet property="BookletCommentsFormsLabel" destination="RbO-tQ-Awd" id="Jk4-GS-LJh"/>
+                <outlet property="bookletBindingComboBox" destination="c76-JW-f5N" id="Feq-oP-GOj"/>
+                <outlet property="bookletBindingLabel" destination="zCy-Jf-BEW" id="qzu-cX-glP"/>
+                <outlet property="bookletCacelButton" destination="Slq-mE-F4P" id="2Ee-Il-L38"/>
+                <outlet property="bookletCommentFormsComboBox" destination="XtV-b1-whS" id="Bed-MH-Mc5"/>
+                <outlet property="bookletDoneButton" destination="gHM-mB-Mfq" id="Ke0-yd-u5R"/>
+                <outlet property="bookletGapUnitLabel" destination="fvR-kb-yJO" id="2gc-qA-UxW"/>
+                <outlet property="bookletNeedAutoRotatePagesButton" destination="9JN-7K-Cax" id="q7I-0P-8eJ"/>
+                <outlet property="bookletNewPageSizeLabel" destination="veO-8P-6dm" id="yQy-Xh-JmO"/>
+                <outlet property="bookletPDFPreViewHeightConstant" destination="GLj-Mb-kHe" id="CHw-f5-oEo"/>
+                <outlet property="bookletPDFPreViewWidthConstant" destination="Vki-ep-ept" id="fq4-tN-ARS"/>
+                <outlet property="bookletPDFView" destination="nhd-so-DtZ" id="x2b-Lt-eUy"/>
+                <outlet property="bookletPageGapLabel" destination="uTJ-Kr-Qtl" id="ijY-xq-mcx"/>
+                <outlet property="bookletPageGapTextField" destination="CVS-cx-N98" id="g1T-Fs-jfO"/>
+                <outlet property="bookletPageRangeComboBox" destination="LqM-sY-JOE" id="szC-Kz-H1S"/>
+                <outlet property="bookletPageRangeLabel" destination="b4S-kG-8fr" id="jv2-Qh-PuD"/>
+                <outlet property="bookletPageSizeComboBox" destination="NVR-U8-Wb5" id="qXT-pU-R5X"/>
+                <outlet property="bookletPageSizeLabel" destination="M5u-of-PzD" id="wZd-0K-WOb"/>
+                <outlet property="bookletPagesGapStepper" destination="aCZ-H2-ve9" id="ke7-XY-saf"/>
+                <outlet property="bookletPrintButton" destination="7dG-tY-dKD" id="h8e-hS-iA0"/>
+                <outlet property="bookletReversePagesButton" destination="16E-or-M6w" id="TIv-sw-3yY"/>
+                <outlet property="bookletSheetEndTextField" destination="toO-JH-f74" id="jLz-gs-p9d"/>
+                <outlet property="bookletSheetFromLabel" destination="ZUg-eZ-8RO" id="eD5-4r-0nQ"/>
+                <outlet property="bookletSheetPickToLabel" destination="RCB-rd-EZ8" id="md9-9z-o1p"/>
+                <outlet property="bookletSheetStartTextField" destination="WxO-wg-Zmd" id="T1D-pX-7hV"/>
+                <outlet property="bookletSubsetComboBox" destination="9Xi-ee-DsW" id="X5f-Mt-Lwp"/>
+                <outlet property="bookletSubsetLable" destination="6Wp-K4-AmA" id="zOI-Na-mOy"/>
+                <outlet property="bookletTotalPageLabel" destination="heG-Qw-oLL" id="dXU-Hx-6uU"/>
+                <outlet property="bookletUnitComboBox" destination="jgj-gx-eri" id="dYA-fx-dMa"/>
+                <outlet property="bookletUnitLabel" destination="Sz6-vy-KYw" id="7hV-Ed-Pg5"/>
+                <outlet property="pageHeightTextField" destination="Uee-Gw-JLm" id="RuM-qK-R4g"/>
+                <outlet property="pageWidthTextField" destination="ICX-9S-1eQ" id="nXu-Em-LhB"/>
+                <outlet property="previewPaginationTextField" destination="MzQ-9J-3t2" id="CH6-Om-Wli"/>
+                <outlet property="unitTLabel" destination="bVk-vk-CdQ" id="yQO-nR-0V2"/>
+                <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="Booklet" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="F0z-JX-Cv5">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="485" y="100" width="700" height="524"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
+            <value key="minSize" type="size" width="700" height="524"/>
+            <value key="maxSize" type="size" width="700" height="524"/>
+            <view key="contentView" wantsLayer="YES" id="se5-gp-TjO">
+                <rect key="frame" x="0.0" y="0.0" width="700" height="524"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="9Oq-hn-b2J">
+                        <rect key="frame" x="0.0" y="50" width="350" height="474"/>
+                        <subviews>
+                            <pdfView autoresizesSubviews="NO" wantsLayer="YES" displayMode="singlePage" displaysPageBreaks="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nhd-so-DtZ" customClass="KMBookletPDFView">
+                                <rect key="frame" x="30" y="35" width="290" height="404"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="404" id="GLj-Mb-kHe"/>
+                                    <constraint firstAttribute="width" constant="290" id="Vki-ep-ept"/>
+                                </constraints>
+                            </pdfView>
+                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="veO-8P-6dm">
+                                <rect key="frame" x="161" y="449" width="28" height="16"/>
+                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="size" id="rE3-cM-exY">
+                                    <font key="font" metaFont="system"/>
+                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                </textFieldCell>
+                            </textField>
+                            <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="bYi-AE-G2e">
+                                <rect key="frame" x="84" y="8" width="26" height="26"/>
+                                <buttonCell key="cell" type="round" bezelStyle="circular" image="NSGoLeftTemplate" imagePosition="overlaps" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="lZo-HV-7SM">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                                <connections>
+                                    <action selector="bookletPreviewButtonClicked_PreviousPage:" target="-2" id="GJN-xf-WYT"/>
+                                </connections>
+                            </button>
+                            <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="88v-dt-rB3">
+                                <rect key="frame" x="240" y="8" width="26" height="26"/>
+                                <buttonCell key="cell" type="round" bezelStyle="circular" image="NSGoRightTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="XBd-uL-JjD">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                                <connections>
+                                    <action selector="bookletPrevireButtonClicked_NextPage:" target="-2" id="zB3-OI-2bS"/>
+                                </connections>
+                            </button>
+                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="2eU-OJ-dFW">
+                                <rect key="frame" x="147" y="10" width="56" height="22"/>
+                                <subviews>
+                                    <textField focusRingType="none" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="MzQ-9J-3t2">
+                                        <rect key="frame" x="0.0" y="0.0" width="40" height="22"/>
+                                        <constraints>
+                                            <constraint firstAttribute="width" constant="40" id="pAv-oQ-Kmg"/>
+                                            <constraint firstAttribute="height" constant="22" id="wPf-1k-pCR"/>
+                                        </constraints>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="center" drawsBackground="YES" id="C8a-ir-aDa">
+                                            <numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="bC8-DQ-3c2">
+                                                <real key="minimum" value="1"/>
+                                            </numberFormatter>
+                                            <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>
+                                            <outlet property="delegate" destination="-2" id="Kmw-Mg-9C5"/>
+                                        </connections>
+                                    </textField>
+                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="heG-Qw-oLL">
+                                        <rect key="frame" x="38" y="3" width="20" height="16"/>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="/ 0" id="ypP-Hj-ePu">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstAttribute="bottom" secondItem="MzQ-9J-3t2" secondAttribute="bottom" id="Jkj-IL-BI3"/>
+                                    <constraint firstItem="heG-Qw-oLL" firstAttribute="leading" secondItem="MzQ-9J-3t2" secondAttribute="trailing" id="abc-AG-Zt6"/>
+                                    <constraint firstItem="MzQ-9J-3t2" firstAttribute="leading" secondItem="2eU-OJ-dFW" secondAttribute="leading" id="fwg-Ze-GkN"/>
+                                    <constraint firstItem="heG-Qw-oLL" firstAttribute="centerY" secondItem="MzQ-9J-3t2" secondAttribute="centerY" id="iyi-cc-GTY"/>
+                                    <constraint firstAttribute="trailing" secondItem="heG-Qw-oLL" secondAttribute="trailing" id="k6B-6t-mBw"/>
+                                    <constraint firstItem="MzQ-9J-3t2" firstAttribute="top" secondItem="2eU-OJ-dFW" secondAttribute="top" id="rJb-Zy-d0X"/>
+                                </constraints>
+                            </customView>
+                        </subviews>
+                        <constraints>
+                            <constraint firstAttribute="bottom" secondItem="2eU-OJ-dFW" secondAttribute="bottom" constant="10" id="9aE-ed-w0F"/>
+                            <constraint firstAttribute="height" constant="474" id="Ftt-oK-beV"/>
+                            <constraint firstItem="2eU-OJ-dFW" firstAttribute="leading" secondItem="bYi-AE-G2e" secondAttribute="trailing" constant="40" id="OQd-vD-d8Z"/>
+                            <constraint firstItem="88v-dt-rB3" firstAttribute="leading" secondItem="2eU-OJ-dFW" secondAttribute="trailing" constant="40" id="Rok-gZ-YFs"/>
+                            <constraint firstItem="veO-8P-6dm" firstAttribute="centerX" secondItem="9Oq-hn-b2J" secondAttribute="centerX" id="ULu-k0-C5i"/>
+                            <constraint firstItem="2eU-OJ-dFW" firstAttribute="centerY" secondItem="bYi-AE-G2e" secondAttribute="centerY" id="ZLS-SH-qJn"/>
+                            <constraint firstItem="nhd-so-DtZ" firstAttribute="centerY" secondItem="9Oq-hn-b2J" secondAttribute="centerY" id="bYh-L2-mBE"/>
+                            <constraint firstItem="nhd-so-DtZ" firstAttribute="top" secondItem="veO-8P-6dm" secondAttribute="bottom" constant="10" id="ciH-JC-2zi"/>
+                            <constraint firstItem="88v-dt-rB3" firstAttribute="centerY" secondItem="bYi-AE-G2e" secondAttribute="centerY" id="gqW-qS-BbM"/>
+                            <constraint firstItem="88v-dt-rB3" firstAttribute="centerY" secondItem="bYi-AE-G2e" secondAttribute="centerY" id="mS0-62-0Se"/>
+                            <constraint firstAttribute="width" constant="350" id="wEi-HY-QUh"/>
+                            <constraint firstItem="2eU-OJ-dFW" firstAttribute="centerX" secondItem="9Oq-hn-b2J" secondAttribute="centerX" id="wOJ-aB-uTf"/>
+                            <constraint firstItem="nhd-so-DtZ" firstAttribute="centerX" secondItem="9Oq-hn-b2J" secondAttribute="centerX" id="wOU-4W-Vhy"/>
+                        </constraints>
+                    </customView>
+                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Sz6-vy-KYw">
+                        <rect key="frame" x="358" y="457" width="33" height="16"/>
+                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Unit:" id="p8N-Pd-QMB">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <comboBox focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="jgj-gx-eri">
+                        <rect key="frame" x="393" y="453" width="54" height="23"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="50" id="1DT-DB-s3Y"/>
+                            <constraint firstAttribute="height" constant="20" id="BLw-fb-5qe"/>
+                        </constraints>
+                        <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="jDd-fj-btO">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </comboBoxCell>
+                    </comboBox>
+                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="M5u-of-PzD">
+                        <rect key="frame" x="358" y="423" width="68" height="17"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="17" id="o8x-Ch-UhH"/>
+                        </constraints>
+                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Page Size:" id="Nre-Nh-M3h">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <comboBox focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NVR-U8-Wb5">
+                        <rect key="frame" x="359" y="386" width="144" height="23"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="140" id="g2o-5c-Yq6"/>
+                            <constraint firstAttribute="height" constant="20" id="sQs-Rz-0zB"/>
+                        </constraints>
+                        <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="cvv-qQ-PPk">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </comboBoxCell>
+                    </comboBox>
+                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6Wp-K4-AmA">
+                        <rect key="frame" x="358" y="331" width="99" height="17"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="17" id="jZ2-4b-aOd"/>
+                        </constraints>
+                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Booklet subset:" id="4tw-QP-egb">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="zCy-Jf-BEW">
+                        <rect key="frame" x="358" y="266" width="54" height="16"/>
+                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Binding:" id="i1H-CX-0Zk">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="uTJ-Kr-Qtl">
+                        <rect key="frame" x="559" y="266" width="33" height="16"/>
+                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Gap:" id="9Jh-LF-bjR">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <comboBox focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9Xi-ee-DsW">
+                        <rect key="frame" x="459" y="328" width="124" height="23"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="20" id="1rW-zS-m1X"/>
+                            <constraint firstAttribute="width" constant="120" id="oBW-ta-hXl"/>
+                        </constraints>
+                        <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="hhr-pa-bnZ">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </comboBoxCell>
+                    </comboBox>
+                    <comboBox focusRingType="none" verticalHuggingPriority="750" allowsExpansionToolTips="YES" translatesAutoresizingMaskIntoConstraints="NO" id="c76-JW-f5N">
+                        <rect key="frame" x="414" y="263" width="104" height="22"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="19" id="9s0-va-3fu"/>
+                            <constraint firstAttribute="width" constant="100" id="Ohx-u4-ahl"/>
+                        </constraints>
+                        <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="Z9n-4r-YSd">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </comboBoxCell>
+                    </comboBox>
+                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Slq-mE-F4P">
+                        <rect key="frame" x="444" y="8" width="76" height="32"/>
+                        <buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="maw-BI-DfA">
+                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                            <string key="keyEquivalent" base64-UTF8="YES">
+Gw
+</string>
+                        </buttonCell>
+                        <connections>
+                            <action selector="bookletButtonClicked_Cancel:" target="-2" id="qQ3-FH-mgj"/>
+                        </connections>
+                    </button>
+                    <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="CVS-cx-N98">
+                        <rect key="frame" x="595" y="264" width="50" height="21"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="50" id="54H-2z-OIG"/>
+                        </constraints>
+                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" title="0" drawsBackground="YES" id="y2x-Kh-tyn">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="b4S-kG-8fr">
+                        <rect key="frame" x="358" y="130" width="77" height="16"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="16" id="WWm-Ps-r0o"/>
+                        </constraints>
+                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Page Range" id="Twt-Ae-1fS">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <comboBox focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="LqM-sY-JOE">
+                        <rect key="frame" x="359" y="99" width="204" height="22"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="200" id="e5Q-jX-WAb"/>
+                            <constraint firstAttribute="height" constant="19" id="gQ6-HW-nAA"/>
+                        </constraints>
+                        <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="Uex-XF-g1I">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </comboBoxCell>
+                        <connections>
+                            <action selector="comboBoxClick_PageRanage:" target="-2" id="Ne9-fX-lrM"/>
+                        </connections>
+                    </comboBox>
+                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ZUg-eZ-8RO">
+                        <rect key="frame" x="358" y="296" width="78" height="16"/>
+                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Sheet from:" id="JWW-Jp-ZBH">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="RCB-rd-EZ8">
+                        <rect key="frame" x="492" y="296" width="17" height="16"/>
+                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="to" id="IPq-NG-SEo">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="toO-JH-f74">
+                        <rect key="frame" x="512" y="294" width="50" height="21"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="50" id="OQH-kJ-CA0"/>
+                        </constraints>
+                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="Tyu-sw-Kgq">
+                            <numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="SNt-X4-JzB"/>
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="WxO-wg-Zmd">
+                        <rect key="frame" x="439" y="294" width="50" height="21"/>
+                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="0Lz-lq-KKX">
+                            <numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="3tj-Sf-Ndc"/>
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aCZ-H2-ve9">
+                        <rect key="frame" x="642" y="260" width="19" height="28"/>
+                        <stepperCell key="cell" continuous="YES" alignment="left" increment="0.10000000000000001" maxValue="1000" doubleValue="1" id="75N-95-DNe"/>
+                        <connections>
+                            <action selector="bookletStepperClicked_PagesGap:" target="-2" id="R55-Bi-fOt"/>
+                        </connections>
+                    </stepper>
+                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7dG-tY-dKD">
+                        <rect key="frame" x="624" y="8" width="63" height="32"/>
+                        <buttonCell key="cell" type="push" title="Print" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="uwH-aV-o43">
+                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                            <string key="keyEquivalent" base64-UTF8="YES">
+DQ
+</string>
+                        </buttonCell>
+                        <connections>
+                            <action selector="bookletButtonClicked_PrintPDF:" target="-2" id="cCh-jG-5ac"/>
+                        </connections>
+                    </button>
+                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gHM-mB-Mfq">
+                        <rect key="frame" x="526" y="7" width="92" height="33"/>
+                        <buttonCell key="cell" type="push" title="Save PDF" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="KEh-OP-qtj">
+                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                        </buttonCell>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="21" id="2NX-oj-dQi"/>
+                        </constraints>
+                        <connections>
+                            <action selector="bookletButtonClicked_Done:" target="-2" id="Gqh-jy-VRE"/>
+                        </connections>
+                    </button>
+                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="fvR-kb-yJO">
+                        <rect key="frame" x="656" y="266" width="27" height="16"/>
+                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="mm" id="X2c-Z0-5Iq">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="16E-or-M6w">
+                        <rect key="frame" x="358" y="170" width="115" height="18"/>
+                        <buttonCell key="cell" type="check" title="Reverse Pages" bezelStyle="regularSquare" imagePosition="left" inset="2" id="yGu-ao-20I">
+                            <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                            <font key="font" metaFont="system"/>
+                        </buttonCell>
+                        <connections>
+                            <action selector="bookletButtonClicked_ReversePages:" target="-2" id="7eZ-NW-K93"/>
+                        </connections>
+                    </button>
+                    <comboBox focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XtV-b1-whS">
+                        <rect key="frame" x="488" y="229" width="184" height="23"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="180" id="QkG-SH-xqy"/>
+                        </constraints>
+                        <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="EdE-2G-7tL">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </comboBoxCell>
+                        <connections>
+                            <action selector="bookletComboBoxClicked_Comments:" target="-2" id="CJa-BG-B3Y"/>
+                        </connections>
+                    </comboBox>
+                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="749" translatesAutoresizingMaskIntoConstraints="NO" id="RbO-tQ-Awd">
+                        <rect key="frame" x="358" y="233" width="128" height="17"/>
+                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Comments &amp; Forms:" id="Kxj-m3-hjW">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9JN-7K-Cax">
+                        <rect key="frame" x="358" y="201" width="137" height="18"/>
+                        <buttonCell key="cell" type="check" title="Auto-rotate pages" bezelStyle="regularSquare" imagePosition="left" inset="2" id="R1t-tN-q0o">
+                            <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                            <font key="font" metaFont="system"/>
+                        </buttonCell>
+                        <connections>
+                            <action selector="bookletButtonClicked_AutoRotatePage:" target="-2" id="xYE-lg-3OK"/>
+                        </connections>
+                    </button>
+                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aO0-85-4BL">
+                        <rect key="frame" x="573" y="391" width="11" height="16"/>
+                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="x" id="iaV-TB-JUh">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ICX-9S-1eQ">
+                        <rect key="frame" x="520" y="387" width="50" height="22"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="50" id="LPD-hk-NwQ"/>
+                            <constraint firstAttribute="height" constant="22" id="azV-LL-40g"/>
+                        </constraints>
+                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="center" drawsBackground="YES" id="n3g-Wa-OFy">
+                            <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>
+                            <outlet property="delegate" destination="-2" id="aJ2-wk-pCV"/>
+                        </connections>
+                    </textField>
+                    <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Uee-Gw-JLm">
+                        <rect key="frame" x="587" y="387" width="50" height="22"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="22" id="nrl-8B-3BZ"/>
+                            <constraint firstAttribute="width" constant="50" id="uFI-0d-h7v"/>
+                        </constraints>
+                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="center" drawsBackground="YES" id="KbM-2l-Vg3">
+                            <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>
+                            <outlet property="delegate" destination="-2" id="YWS-K4-8Ag"/>
+                        </connections>
+                    </textField>
+                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="bVk-vk-CdQ">
+                        <rect key="frame" x="637" y="390" width="27" height="16"/>
+                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="mm" id="EKe-YZ-T1i">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="CVS-cx-N98" firstAttribute="centerY" secondItem="c76-JW-f5N" secondAttribute="centerY" id="0DA-Tr-ULH"/>
+                    <constraint firstItem="9Oq-hn-b2J" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" id="0sR-Al-5G1"/>
+                    <constraint firstItem="NVR-U8-Wb5" firstAttribute="leading" secondItem="Sz6-vy-KYw" secondAttribute="leading" id="1bj-gt-AWf"/>
+                    <constraint firstAttribute="trailing" secondItem="7dG-tY-dKD" secondAttribute="trailing" constant="20" id="2pl-yi-Ouf"/>
+                    <constraint firstItem="9Xi-ee-DsW" firstAttribute="centerY" secondItem="6Wp-K4-AmA" secondAttribute="centerY" id="2r1-Vf-B9o"/>
+                    <constraint firstItem="WxO-wg-Zmd" firstAttribute="leading" secondItem="ZUg-eZ-8RO" secondAttribute="trailing" constant="5" id="33U-DY-bAn"/>
+                    <constraint firstItem="RCB-rd-EZ8" firstAttribute="leading" secondItem="WxO-wg-Zmd" secondAttribute="trailing" constant="5" id="47I-Up-soA"/>
+                    <constraint firstItem="WxO-wg-Zmd" firstAttribute="top" secondItem="9Xi-ee-DsW" secondAttribute="bottom" constant="15" id="52b-xq-ZKp"/>
+                    <constraint firstItem="16E-or-M6w" firstAttribute="leading" secondItem="9JN-7K-Cax" secondAttribute="leading" id="6B2-1k-3aH"/>
+                    <constraint firstItem="gHM-mB-Mfq" firstAttribute="leading" secondItem="Slq-mE-F4P" secondAttribute="trailing" constant="20" id="7lG-oA-GNs"/>
+                    <constraint firstItem="c76-JW-f5N" firstAttribute="centerY" secondItem="zCy-Jf-BEW" secondAttribute="centerY" id="8vj-uc-BqB"/>
+                    <constraint firstItem="Sz6-vy-KYw" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" constant="51" id="9L6-QB-5j4"/>
+                    <constraint firstItem="LqM-sY-JOE" firstAttribute="leading" secondItem="b4S-kG-8fr" secondAttribute="leading" id="A2f-Cw-9cf"/>
+                    <constraint firstItem="6Wp-K4-AmA" firstAttribute="top" secondItem="NVR-U8-Wb5" secondAttribute="bottom" constant="40" id="AFA-kn-c2H"/>
+                    <constraint firstItem="NVR-U8-Wb5" firstAttribute="top" secondItem="M5u-of-PzD" secondAttribute="bottom" constant="15" id="AXN-Xt-6qf"/>
+                    <constraint firstItem="RCB-rd-EZ8" firstAttribute="centerY" secondItem="ZUg-eZ-8RO" secondAttribute="centerY" id="C3e-Xj-PQF"/>
+                    <constraint firstItem="jgj-gx-eri" firstAttribute="centerY" secondItem="Sz6-vy-KYw" secondAttribute="centerY" id="CiW-Jt-s1w"/>
+                    <constraint firstItem="Sz6-vy-KYw" firstAttribute="leading" secondItem="9Oq-hn-b2J" secondAttribute="trailing" constant="10" id="CrQ-J5-rl7"/>
+                    <constraint firstItem="WxO-wg-Zmd" firstAttribute="leading" secondItem="ZUg-eZ-8RO" secondAttribute="trailing" constant="5" id="Djo-AL-GER"/>
+                    <constraint firstItem="zCy-Jf-BEW" firstAttribute="leading" secondItem="Sz6-vy-KYw" secondAttribute="leading" id="Eb5-0H-S6a"/>
+                    <constraint firstAttribute="bottom" secondItem="gHM-mB-Mfq" secondAttribute="bottom" constant="14" id="FIB-r0-wSK"/>
+                    <constraint firstItem="toO-JH-f74" firstAttribute="width" secondItem="WxO-wg-Zmd" secondAttribute="width" id="JiA-Ox-raf"/>
+                    <constraint firstItem="zCy-Jf-BEW" firstAttribute="leading" secondItem="ZUg-eZ-8RO" secondAttribute="leading" id="KXX-a3-1rX"/>
+                    <constraint firstItem="CVS-cx-N98" firstAttribute="centerY" secondItem="c76-JW-f5N" secondAttribute="centerY" id="LFg-OD-mZw"/>
+                    <constraint firstItem="aCZ-H2-ve9" firstAttribute="leading" secondItem="CVS-cx-N98" secondAttribute="trailing" id="MWG-si-m7M"/>
+                    <constraint firstItem="fvR-kb-yJO" firstAttribute="centerY" secondItem="aCZ-H2-ve9" secondAttribute="centerY" id="Mne-nI-2l2"/>
+                    <constraint firstItem="jgj-gx-eri" firstAttribute="leading" secondItem="Sz6-vy-KYw" secondAttribute="trailing" constant="5" id="NbJ-ZX-Ayq"/>
+                    <constraint firstItem="uTJ-Kr-Qtl" firstAttribute="centerY" secondItem="c76-JW-f5N" secondAttribute="centerY" id="NnQ-xa-ltp"/>
+                    <constraint firstItem="Uee-Gw-JLm" firstAttribute="leading" secondItem="aO0-85-4BL" secondAttribute="trailing" constant="5" id="Olk-oF-kW4"/>
+                    <constraint firstItem="c76-JW-f5N" firstAttribute="leading" secondItem="zCy-Jf-BEW" secondAttribute="trailing" constant="5" id="SVh-SJ-xMQ"/>
+                    <constraint firstItem="aO0-85-4BL" firstAttribute="firstBaseline" secondItem="ICX-9S-1eQ" secondAttribute="firstBaseline" id="TKr-lx-cRp"/>
+                    <constraint firstItem="c76-JW-f5N" firstAttribute="top" secondItem="WxO-wg-Zmd" secondAttribute="bottom" constant="10" id="TSF-n7-PlK"/>
+                    <constraint firstItem="toO-JH-f74" firstAttribute="centerY" secondItem="ZUg-eZ-8RO" secondAttribute="centerY" id="TmP-dZ-ogk"/>
+                    <constraint firstItem="CVS-cx-N98" firstAttribute="leading" secondItem="uTJ-Kr-Qtl" secondAttribute="trailing" constant="5" id="TsL-HF-hUn"/>
+                    <constraint firstItem="RbO-tQ-Awd" firstAttribute="top" secondItem="c76-JW-f5N" secondAttribute="bottom" constant="15" id="UtS-bu-GE9"/>
+                    <constraint firstItem="7dG-tY-dKD" firstAttribute="leading" secondItem="gHM-mB-Mfq" secondAttribute="trailing" constant="20" id="Vic-hF-S2W"/>
+                    <constraint firstAttribute="trailing" secondItem="fvR-kb-yJO" secondAttribute="trailing" constant="19" id="Vk6-zE-q3f"/>
+                    <constraint firstItem="LqM-sY-JOE" firstAttribute="top" secondItem="b4S-kG-8fr" secondAttribute="bottom" constant="10" id="YfR-aj-Z6n"/>
+                    <constraint firstItem="fvR-kb-yJO" firstAttribute="leading" secondItem="aCZ-H2-ve9" secondAttribute="trailing" id="a0b-q4-Nvv"/>
+                    <constraint firstItem="bVk-vk-CdQ" firstAttribute="centerY" secondItem="ICX-9S-1eQ" secondAttribute="centerY" id="a4p-To-BF9"/>
+                    <constraint firstItem="ZUg-eZ-8RO" firstAttribute="leading" secondItem="Sz6-vy-KYw" secondAttribute="leading" id="aMM-fb-P3b"/>
+                    <constraint firstItem="gHM-mB-Mfq" firstAttribute="centerY" secondItem="Slq-mE-F4P" secondAttribute="centerY" id="alg-Wv-Z0s"/>
+                    <constraint firstItem="9Xi-ee-DsW" firstAttribute="leading" secondItem="6Wp-K4-AmA" secondAttribute="trailing" constant="5" id="asZ-k5-8di"/>
+                    <constraint firstItem="LqM-sY-JOE" firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="9Oq-hn-b2J" secondAttribute="bottom" constant="-51" id="b3N-kf-9M2"/>
+                    <constraint firstItem="9JN-7K-Cax" firstAttribute="top" secondItem="RbO-tQ-Awd" secondAttribute="bottom" constant="15" id="cfD-c7-OLA"/>
+                    <constraint firstItem="aCZ-H2-ve9" firstAttribute="centerY" secondItem="CVS-cx-N98" secondAttribute="centerY" id="dDL-UQ-VN7"/>
+                    <constraint firstItem="WxO-wg-Zmd" firstAttribute="centerY" secondItem="ZUg-eZ-8RO" secondAttribute="centerY" id="dLu-1u-Dmx"/>
+                    <constraint firstItem="ICX-9S-1eQ" firstAttribute="leading" secondItem="NVR-U8-Wb5" secondAttribute="trailing" constant="20" id="dPZ-JR-UtR"/>
+                    <constraint firstItem="M5u-of-PzD" firstAttribute="leading" secondItem="Sz6-vy-KYw" secondAttribute="leading" id="eA1-ZE-aUQ"/>
+                    <constraint firstItem="b4S-kG-8fr" firstAttribute="top" secondItem="16E-or-M6w" secondAttribute="bottom" constant="25" id="eBi-Lr-8lJ"/>
+                    <constraint firstItem="RbO-tQ-Awd" firstAttribute="leading" secondItem="zCy-Jf-BEW" secondAttribute="leading" id="eQf-yW-p92"/>
+                    <constraint firstItem="toO-JH-f74" firstAttribute="leading" secondItem="RCB-rd-EZ8" secondAttribute="trailing" constant="5" id="eYN-9h-r7b"/>
+                    <constraint firstItem="7dG-tY-dKD" firstAttribute="centerY" secondItem="gHM-mB-Mfq" secondAttribute="centerY" id="elT-9R-NiN"/>
+                    <constraint firstItem="16E-or-M6w" firstAttribute="top" secondItem="9JN-7K-Cax" secondAttribute="bottom" constant="15" id="end-7t-yna"/>
+                    <constraint firstItem="M5u-of-PzD" firstAttribute="top" secondItem="jgj-gx-eri" secondAttribute="bottom" constant="15" id="ffM-cD-a5u"/>
+                    <constraint firstItem="aO0-85-4BL" firstAttribute="baseline" secondItem="ICX-9S-1eQ" secondAttribute="firstBaseline" id="gJd-GV-TJn"/>
+                    <constraint firstItem="b4S-kG-8fr" firstAttribute="leading" secondItem="Sz6-vy-KYw" secondAttribute="leading" id="iVa-Gc-4CE"/>
+                    <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="9JN-7K-Cax" secondAttribute="trailing" constant="20" id="iWN-wA-KtP"/>
+                    <constraint firstItem="ICX-9S-1eQ" firstAttribute="centerY" secondItem="NVR-U8-Wb5" secondAttribute="centerY" id="mGh-TD-Azk"/>
+                    <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="16E-or-M6w" secondAttribute="trailing" constant="20" id="nlD-Va-Y6t"/>
+                    <constraint firstItem="XtV-b1-whS" firstAttribute="centerY" secondItem="RbO-tQ-Awd" secondAttribute="centerY" id="p0c-hP-iCo"/>
+                    <constraint firstItem="9Oq-hn-b2J" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" id="pJI-NW-D3D"/>
+                    <constraint firstItem="Uee-Gw-JLm" firstAttribute="centerY" secondItem="ICX-9S-1eQ" secondAttribute="centerY" id="rTR-XP-19L"/>
+                    <constraint firstItem="9JN-7K-Cax" firstAttribute="leading" secondItem="ZUg-eZ-8RO" secondAttribute="leading" id="s9m-NL-1jj"/>
+                    <constraint firstItem="bVk-vk-CdQ" firstAttribute="leading" secondItem="Uee-Gw-JLm" secondAttribute="trailing" constant="2" id="t9I-uS-bjk"/>
+                    <constraint firstItem="6Wp-K4-AmA" firstAttribute="leading" secondItem="Sz6-vy-KYw" secondAttribute="leading" id="vz8-cX-6zQ"/>
+                    <constraint firstItem="XtV-b1-whS" firstAttribute="leading" secondItem="RbO-tQ-Awd" secondAttribute="trailing" constant="5" id="wGU-nF-63d"/>
+                    <constraint firstItem="aO0-85-4BL" firstAttribute="leading" secondItem="ICX-9S-1eQ" secondAttribute="trailing" constant="5" id="yjP-ba-mJj"/>
+                </constraints>
+            </view>
+            <contentBorderThickness minY="50"/>
+            <connections>
+                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
+            </connections>
+            <point key="canvasLocation" x="391" y="-1986"/>
+        </window>
+    </objects>
+    <resources>
+        <image name="NSGoLeftTemplate" width="12" height="17"/>
+        <image name="NSGoRightTemplate" width="12" height="17"/>
+    </resources>
+</document>

+ 21 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/NSMutableArray+KMOddEvenPartFetch.h

@@ -0,0 +1,21 @@
+//
+//  NSMutableArray+KMOddEvenPartFetch.h
+//  PDF Reader
+//
+//  Created by 蒋志鹏 on 2018/6/5.
+//  Copyright © 2018 Kdan Mobile. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "PDF_Reader_Pro-Swift.h"
+
+//typedef NS_ENUM(NSUInteger, KMSubArrayTypeOC) {
+//    KMSubArraytype_Odd = 0,
+//    KMSubArrayType_Even,
+//};
+
+@interface NSMutableArray (KMOddEvenPartFetch)
+
+- (void)subArrayWithType:(KMSubArrayType)type;
+
+@end

+ 32 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Booklet/NSMutableArray+KMOddEvenPartFetch.m

@@ -0,0 +1,32 @@
+//
+//  NSMutableArray+KMOddEvenPartFetch.m
+//  PDF Reader
+//
+//  Created by 蒋志鹏 on 2018/6/5.
+//  Copyright © 2018 Kdan Mobile. All rights reserved.
+//
+
+#import "NSMutableArray+KMOddEvenPartFetch.h"
+
+@implementation NSMutableArray (KMOddEvenPartFetch)
+
+- (void)subArrayWithType:(KMSubArrayType)type
+{
+    if (self.count == 0) {
+        return;
+    }
+    if (type > KMSubArrayTypeEven || type < KMSubArrayTypeOdd) {
+        return;
+    }
+    NSMutableArray *newArray = [NSMutableArray new];
+    for (NSInteger i = 0; i < self.count; i++) {
+        if (i%2 == type) {
+            [newArray addObject:self[i]];
+        }
+    }
+    
+    [self removeAllObjects];
+    [self addObjectsFromArray:newArray];
+}
+
+@end

+ 17 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/KMPageRangeRecordTool.h

@@ -0,0 +1,17 @@
+//
+//  KMPageRangeRecordTool.h
+//  PDF Reader Pro Edition
+//
+//  Created by lxy on 2022/4/26.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface KMPageRangeRecordTool : NSObject
+
++ (instancetype)sharedInstance;
+
+
+@end
+
+

+ 32 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/KMPageRangeRecordTool.m

@@ -0,0 +1,32 @@
+//
+//  KMPageRangeRecordTool.m
+//  PDF Reader Pro Edition
+//
+//  Created by lxy on 2022/4/26.
+//
+
+#import "KMPageRangeRecordTool.h"
+
+@implementation KMPageRangeRecordTool
+
++ (instancetype)sharedInstance {
+    static KMPageRangeRecordTool *_recordTool = nil;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        _recordTool = [[super allocWithZone:NULL] init];
+    });
+    return _recordTool;
+}
+
++ (instancetype)allocWithZone:(struct _NSZone *)zone {
+    return [KMPageRangeRecordTool sharedInstance];
+}
+
+- (id)copyWithZone:(nullable NSZone *)zone {
+    return [KMPageRangeRecordTool sharedInstance];
+}
+
+- (id)mutableCopyWithZone:(nullable NSZone *)zone {
+    return [KMPageRangeRecordTool sharedInstance];
+}
+@end

+ 70 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Multiple/KMPDFMultipleManager.h

@@ -0,0 +1,70 @@
+//
+//  KMPDFMorePagePrintManager.h
+//  PDF Reader Pro Edition
+//
+//  Created by 丁林圭 on 2018/5/17.
+//
+
+#import <Cocoa/Cocoa.h>
+#import <Quartz/Quartz.h>
+
+typedef NS_OPTIONS(NSUInteger, kKMPDFMultiplePageOrder) {
+    kKMPDFMultiplePageOrder_Transverse   = 0 ,
+    kKMPDFMultiplePageOrder_TransverseAntitone,
+    kKMPDFMultiplePageOrder_Longitudinal,
+    kKMPDFMultiplePageOrder_LongitudinalAntitone,
+};
+
+typedef NS_OPTIONS(NSUInteger, kKMPDFMultiplePageDirection) {
+    kKMPDFMultiplePageDirection_Portrait   = 0 ,
+    kKMPDFMultiplePageDirection_Landscape,
+};
+
+typedef NS_OPTIONS(NSUInteger, kKMPDFCommentsForms) {
+    kKMPDFCommentsForms_Documents  =0,
+    kKMPDFCommentsForms_DocumentMarkups ,
+    kKMPDFCommentsForms_DocumentStamps,
+};
+
+@interface KMEachPageProperties : NSObject
+
+@property (nonatomic,assign) NSInteger rowCount;
+
+@property (nonatomic,assign) NSInteger columnCout;
+
+@property (nonatomic, assign) kKMPDFMultiplePageOrder order;//页面顺序
+
+@property (nonatomic, assign) kKMPDFCommentsForms commentsForms;//页面顺序
+
+@property (nonatomic,assign) BOOL isAutoRotate;
+
+@property (nonatomic,assign) BOOL isHasBorder;
+
+@property (nonatomic,assign) BOOL isReversePage;
+
+@property (nonatomic,assign) kKMPDFMultiplePageDirection direction;
+
+@property (nonatomic,assign) CGSize pageSize;
+
+@property (nonatomic, assign) NSEdgeInsets edgeInsets;//裁剪区域周边大小
+
+@property (nonatomic, assign) CGFloat rowSpace;//行间距
+
+@property (nonatomic, assign) CGFloat columnSpace;//列间距
+
+@end
+
+
+
+@interface KMPDFMultipleManager : NSObject
+
++ (KMPDFMultipleManager *)defaultManager;
+
+- (void)drawPageToContext:(CGContextRef)context eachPages:(NSArray<PDFPage *> *)pages multipleOption:(KMEachPageProperties *)properties;
+
+- (void)savePDFDocumentPath:(NSString *)path drawPages:(NSArray<PDFPage *> *)pages multipleOption:(KMEachPageProperties *)properties completionHandler:(void (^)(BOOL isSuccessfully))handler;
+
+@end
+
+
+

+ 531 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Multiple/KMPDFMultipleManager.m

@@ -0,0 +1,531 @@
+//
+//  KMPDFMorePagePrintManager.m
+//  PDF Reader Pro Edition
+//
+//  Created by 丁林圭 on 2018/5/17.
+//
+
+#import "KMPDFMultipleManager.h"
+
+#pragma mark - KMPDFMultiple
+@interface KMEachPageProperties()
+
+
+@end
+
+@implementation KMEachPageProperties
+
+-(void)dealloc {
+}
+
+@end
+
+#pragma mark - KMPDFMultipleManager
+
+@interface KMPDFMultipleManager()
+
+@end
+
+@implementation KMPDFMultipleManager
+
+- (void)dealloc {
+}
+
+#pragma mark Private Action
+
+- (void)PDFKitDrawPageToContext:(CGContextRef)context eachPages:(NSArray *)pages multipleOption:(KMEachPageProperties *)properties
+{
+    CGSize size = properties.pageSize;
+    CGFloat width = size.width;
+    CGFloat height =size.height;
+    
+    if (kKMPDFMultiplePageDirection_Landscape == properties.direction) {
+        width = size.height;
+        height = size.width;
+    }
+    
+    CGFloat contextWidth = width- properties.edgeInsets.left - properties.edgeInsets.right;//实际画page的总宽度
+    CGFloat contextHeight = height - properties.edgeInsets.bottom - properties.edgeInsets.top;//实际画page的总高度
+    
+    NSInteger columnCout = properties.columnCout;
+    NSInteger rowCount = properties.rowCount;
+    
+    CGFloat columnSpace = properties.columnSpace;
+    NSInteger rowSpace = properties.rowSpace;
+    
+    CGFloat drawPageMaxW = (contextWidth - (columnCout - 1) * columnSpace)/ columnCout; //page的能画的最大宽度
+    CGFloat drawPageMaxH = (contextHeight - (rowCount -1) * rowSpace) / rowCount;//page能画的最大高度
+    
+    CGFloat scanl = 1.0;
+    CGFloat xTransform = 0;
+    CGFloat yTransform = 0;
+    
+    if (kKMPDFMultiplePageOrder_LongitudinalAntitone == properties.order || kKMPDFMultiplePageOrder_Longitudinal == properties.order) {
+        rowCount = properties.columnCout;
+        columnCout = properties.rowCount;
+    }
+    
+    for (NSInteger i = 0; i < rowCount; i++) {
+        for (NSInteger j = 0;j < columnCout; j++) {
+            NSUInteger index = j + i * columnCout;
+            
+            if (index >= pages.count) {
+                break;
+            }
+            PDFPage *drawPage = pages[index];
+            NSRect pageBounds = [drawPage boundsForBox:kPDFDisplayBoxCropBox];
+            CGFloat orgPageWidth = pageBounds.size.width;//原始page的宽度(不管有没有旋转,都是旋转度数等于0)
+            CGFloat orgPageHeight = pageBounds.size.height;//原始page的高度
+            
+            NSMutableArray *annotations = [NSMutableArray array];
+            for (PDFAnnotation *annotation in drawPage.annotations) {
+                [annotations addObject:annotation];
+            }
+
+            if (kKMPDFCommentsForms_Documents == properties.commentsForms) {
+                for (PDFAnnotation *annotation in annotations) {
+                    [annotation.page removeAnnotation:annotation];
+                }
+            } else if (kKMPDFCommentsForms_DocumentStamps == properties.commentsForms) {
+                for (PDFAnnotation *annotation in annotations) {
+                    if (![annotation isKindOfClass:[PDFAnnotationStamp class]]) {
+                        [annotation.page removeAnnotation:annotation];
+                    }
+                }
+            }
+            
+            NSInteger rotate = drawPage.rotation;
+            if (90 == rotate || 270 == rotate) {
+                orgPageWidth = pageBounds.size.height;
+                orgPageHeight = pageBounds.size.width;
+            }
+            scanl = MIN(drawPageMaxW/orgPageWidth,drawPageMaxH/orgPageHeight);
+
+            //取出page横竖时能显示的最大Rect
+            if (properties.isAutoRotate) {
+                CGFloat tScanl1 = MIN(drawPageMaxW/pageBounds.size.width,drawPageMaxH/pageBounds.size.height);//page旋转度数为0度或者180度时,在指定的大小内,能显示的比例
+                CGFloat tScanl2 = MIN(drawPageMaxW/pageBounds.size.height,drawPageMaxH/pageBounds.size.width);//page旋转度数为90度或者270度时,在指定的大小内,能显示的比例
+                
+                scanl =  MAX(tScanl1, tScanl2);
+                
+                if (tScanl1 > tScanl2) {
+                    //高为竖直排列时,显示最大,则需将page时90度或者270度需要进行旋转
+                    if (rotate == 90 || rotate == 270) {
+                        [drawPage setRotation:rotate - 90];
+                    }
+                } else {
+                    //宽为竖直排列时,显示最大,则需将page时0度或者180度需要进行旋转
+                    if (rotate == 0 || rotate == 180) {
+                        [drawPage setRotation:rotate - 90];
+                    }
+                }
+                
+                if ( 90 == drawPage.rotation || 270 == drawPage.rotation) {
+                    orgPageWidth = pageBounds.size.height;
+                    orgPageHeight = pageBounds.size.width;
+                } else {
+                    orgPageWidth = pageBounds.size.width;
+                    orgPageHeight = pageBounds.size.height;
+                }
+            }
+            
+            if (scanl >1) {
+                scanl = 1;
+            }
+
+            //每一页都是它居中;
+            CGFloat spaceX = (drawPageMaxW - orgPageWidth * scanl)/2;
+            CGFloat spaceY = (drawPageMaxH - orgPageHeight* scanl)/2;
+            
+            if (kKMPDFMultiplePageOrder_Transverse == properties.order) {
+                xTransform = (drawPageMaxW + columnSpace)  * j + properties.edgeInsets.left + spaceX;
+                //页面内容高度 + 下边的行间距 - 第几个cell的高度 +居中
+                yTransform = contextHeight + properties.edgeInsets.bottom - (drawPageMaxH + rowSpace) * (i+1) + spaceY  + rowSpace;
+            } else if (kKMPDFMultiplePageOrder_TransverseAntitone == properties.order) {
+                xTransform = contextWidth + properties.edgeInsets.left - (drawPageMaxW + columnSpace) * (j + 1) + spaceX + columnSpace;
+                yTransform = contextHeight - (drawPageMaxH + rowSpace) * (i+1) + spaceY + properties.edgeInsets.bottom + rowSpace;
+            } else if (kKMPDFMultiplePageOrder_Longitudinal == properties.order) {
+                xTransform = (drawPageMaxW + columnSpace)  * i + properties.edgeInsets.left + spaceX;
+                yTransform = contextHeight - (drawPageMaxH + rowSpace) * (j+1) + spaceY + properties.edgeInsets.bottom + rowSpace;
+            } else if (kKMPDFMultiplePageOrder_LongitudinalAntitone == properties.order) {
+                xTransform = contextWidth + properties.edgeInsets.left - (drawPageMaxW + columnSpace) * (i + 1) + spaceX + columnSpace;
+                yTransform = contextHeight - (drawPageMaxH + rowSpace) * (j+1) + spaceY + properties.edgeInsets.bottom + rowSpace;
+            }
+            
+            [NSGraphicsContext saveGraphicsState];
+            
+            //平移
+            CGContextTranslateCTM(context, xTransform,yTransform);
+            
+            //缩放
+            CGContextScaleCTM(context, scanl, scanl);
+            if (@available(macOS 10.12, *)) {
+                [drawPage drawWithBox:kPDFDisplayBoxCropBox toContext:context];
+                [drawPage transformContext:context forBox:kPDFDisplayBoxCropBox];
+            } else {
+                [NSGraphicsContext saveGraphicsState];
+                [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithGraphicsPort:context flipped:YES]];
+                [drawPage drawWithBox:kPDFDisplayBoxCropBox];
+                [NSGraphicsContext restoreGraphicsState];
+                [drawPage transformContextForBox:kPDFDisplayBoxCropBox];
+            }
+            if (properties.isHasBorder) {
+                
+                CGFloat borderWidth = pageBounds.size.width;
+                CGFloat borderHeight = pageBounds.size.height;
+
+                if ( 90 == drawPage.rotation || 270 == drawPage.rotation) {
+                    borderWidth = pageBounds.size.height;
+                    borderWidth = pageBounds.size.width;
+                }
+                
+                CGRect dirtyRect = CGRectMake(pageBounds.origin.x, pageBounds.origin.y, borderWidth, borderHeight);
+                CGContextAddRect(context, dirtyRect);
+                CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 1.0);
+                CGContextStrokePath(context);
+            }
+            
+            [NSGraphicsContext restoreGraphicsState];
+        }
+    }
+}
+
+- (void)CGDrawPageToContext:(CGContextRef)context eachPages:(NSArray *)pages multipleOption:(KMEachPageProperties *)properties
+{
+    CGSize size = properties.pageSize;
+    CGFloat width = size.width;
+    CGFloat height =size.height;
+    
+    if (kKMPDFMultiplePageDirection_Landscape == properties.direction) {
+        width = size.height;
+        height = size.width;
+    }
+    
+    CGFloat contextWidth = width- properties.edgeInsets.left - properties.edgeInsets.right;
+    CGFloat contextHeight = height - properties.edgeInsets.bottom - properties.edgeInsets.top;
+    
+    NSInteger columnCout = properties.columnCout;
+    NSInteger rowCount = properties.rowCount;
+
+    CGFloat columnSpace = properties.columnSpace;
+    NSInteger rowSpace = properties.rowSpace;
+    
+    CGFloat drawPageW = (contextWidth - (columnCout - 1) * columnSpace)/ columnCout; //画page的宽度
+    CGFloat drawPageH = (contextHeight - (rowCount -1) * rowSpace) / rowCount;//画page的高度
+    
+    CGFloat scanl = 1.0;
+    CGFloat xTransform = 0;
+    CGFloat yTransform = 0;
+    
+    if (kKMPDFMultiplePageOrder_LongitudinalAntitone == properties.order || kKMPDFMultiplePageOrder_Longitudinal == properties.order) {
+        rowCount = properties.columnCout;
+        columnCout = properties.rowCount;
+    }
+    for (NSInteger i = 0; i < rowCount; i++) {
+        for (NSInteger j = 0;j < columnCout; j++) {
+            NSUInteger index = j + i * columnCout;
+            
+            if (index >= pages.count) {
+                break;
+            }
+            PDFPage *drawPage = pages[index];
+            NSRect pageBounds = [drawPage boundsForBox:kPDFDisplayBoxCropBox];
+            CGFloat orgPageWidth = pageBounds.size.width;//原始page的宽度
+            CGFloat orgPageHeight = pageBounds.size.height;//原始page的高度
+        
+            NSInteger rotate = drawPage.rotation;
+            
+            if (90 == rotate || 270 == rotate) {
+                orgPageWidth = pageBounds.size.height;
+                orgPageHeight = pageBounds.size.width;
+            }
+            
+            if (properties.isAutoRotate) {
+                CGFloat tScanl1 = MIN(drawPageW/pageBounds.size.width,drawPageH/pageBounds.size.height);
+                CGFloat tScanl2 = MIN(drawPageW/pageBounds.size.height,drawPageH/pageBounds.size.width);
+                
+                scanl =  MAX(tScanl1, tScanl2);
+                
+                if (tScanl1 > tScanl2) {
+                    if (rotate == 90 || rotate == 270) {
+                        rotate = rotate - 90;
+                    }
+                } else {
+                    if (rotate != 90 || rotate != 270) {
+                        rotate = rotate - 90;
+                    }
+                }
+                
+                if (rotate == -90) {
+                    rotate = 270;
+                }
+
+            }
+            
+            
+            if ( 90 == rotate || 270 == rotate) {
+                orgPageWidth = pageBounds.size.height;
+                orgPageHeight = pageBounds.size.width;
+            } else {
+                orgPageWidth = pageBounds.size.width;
+                orgPageHeight = pageBounds.size.height;
+            }
+
+            scanl = MIN(drawPageW/orgPageWidth,drawPageH/orgPageHeight);
+            if (scanl >1) {
+                scanl = 1;
+            }
+//            //每一页都是它居中;
+            CGFloat spaceX = (drawPageW - orgPageWidth * scanl)/2;
+            CGFloat spaceY = (drawPageH - orgPageHeight* scanl)/2;
+            
+            CGFloat offsetX = 0;
+            CGFloat offsetY = 0;
+
+            if (kKMPDFMultiplePageOrder_Transverse == properties.order) {
+                if (rotate == 270) {
+                    offsetX = (properties.edgeInsets.bottom+ spaceY)/scanl;
+                    offsetY = - pageBounds.size.height - (properties.edgeInsets.left + spaceX)/scanl;
+                    
+                    xTransform = offsetX + (drawPageH + rowSpace)/scanl  * (rowCount - i -1) ;
+                    yTransform = offsetY - (drawPageW + columnSpace)/scanl * j;
+
+                } else if (rotate == 180) {
+                    offsetX = -(pageBounds.size.width + properties.edgeInsets.left/scanl + spaceX/scanl);
+                    offsetY = -(pageBounds.size.height + properties.edgeInsets.bottom/scanl + spaceY/scanl);
+
+                    xTransform = offsetX - (drawPageW + columnSpace)/scanl  * j ;
+                    yTransform = offsetY  - (drawPageH + rowSpace)/scanl * (rowCount - i -1);
+
+                } else if (rotate == 90) {
+                    
+                    offsetX = - (pageBounds.size.width + (properties.edgeInsets.bottom+ spaceY)/scanl);
+                    offsetY = (properties.edgeInsets.left + spaceX)/scanl;
+
+                    xTransform = offsetX - (drawPageH + rowSpace)/scanl  * (rowCount - i -1) ;
+                    yTransform = offsetY + (drawPageW + columnSpace)/scanl * j;
+
+                } else {
+                    offsetX = (properties.edgeInsets.left + spaceX)/scanl;
+                    offsetY = (properties.edgeInsets.bottom+spaceY)/scanl;
+                    
+                    xTransform = offsetX + (drawPageW + columnSpace)/scanl  * j ;
+                    yTransform =  (offsetY + (drawPageH + rowSpace)/scanl * (rowCount - i -1));
+                }
+            } else if (kKMPDFMultiplePageOrder_TransverseAntitone == properties.order) {
+                if (rotate == 270) {
+                    offsetX = (properties.edgeInsets.bottom+ spaceY)/scanl;
+                    offsetY = - pageBounds.size.height - (properties.edgeInsets.left + spaceX)/scanl;
+                    
+                    xTransform = offsetX + (drawPageH + rowSpace)/scanl  * (rowCount - i -1) ;
+                    yTransform = offsetY - (drawPageW + columnSpace)/scanl * (columnCout - 1 - j);
+                    
+                } else if (rotate == 180) {
+                    offsetX = -(pageBounds.size.width + properties.edgeInsets.left/scanl + spaceX/scanl);
+                    offsetY = -(pageBounds.size.height + properties.edgeInsets.bottom/scanl + spaceY/scanl);
+                    
+                    xTransform = offsetX - (drawPageW + columnSpace)/scanl  * (columnCout - 1 - j) ;
+                    yTransform = offsetY  - (drawPageH + rowSpace)/scanl * (rowCount - i -1);
+                    
+                } else if (rotate == 90) {
+                    
+                    offsetX = - (pageBounds.size.width + (properties.edgeInsets.bottom+ spaceY)/scanl);
+                    offsetY = (properties.edgeInsets.left + spaceX)/scanl;
+                    
+                    xTransform = offsetX - (drawPageH + rowSpace)/scanl  * (rowCount - i -1) ;
+                    yTransform = offsetY + (drawPageW + columnSpace)/scanl * (columnCout - 1 - j);
+                    
+                } else {
+                    offsetX = (properties.edgeInsets.left + spaceX)/scanl;
+                    offsetY = (properties.edgeInsets.bottom+spaceY)/scanl;
+                    
+                    xTransform = offsetX + (drawPageW + columnSpace)/scanl  * (columnCout - 1 - j) ;
+                    yTransform =  (offsetY + (drawPageH + rowSpace)/scanl * (rowCount - i -1));
+                }
+            } else if (kKMPDFMultiplePageOrder_Longitudinal == properties.order) {
+                if (rotate == 270) {
+                    offsetX = (properties.edgeInsets.bottom+ spaceY)/scanl;
+                    offsetY = - pageBounds.size.height - (properties.edgeInsets.left + spaceX)/scanl;
+                    
+                    xTransform = offsetX + (drawPageH + rowSpace)/scanl  * (rowCount - j -1) ;
+                    yTransform = offsetY - (drawPageW + columnSpace)/scanl * i;
+                    
+                } else if (rotate == 180) {
+                    offsetX = -(pageBounds.size.width + properties.edgeInsets.left/scanl + spaceX/scanl);
+                    offsetY = -(pageBounds.size.height + properties.edgeInsets.bottom/scanl + spaceY/scanl);
+                    
+                    xTransform = offsetX - (drawPageW + columnSpace)/scanl  * i ;
+                    yTransform = offsetY  - (drawPageH + rowSpace)/scanl * (rowCount - j -1);
+                    
+                } else if (rotate == 90) {
+                    
+                    offsetX = - (pageBounds.size.width + (properties.edgeInsets.bottom+ spaceY)/scanl);
+                    offsetY = (properties.edgeInsets.left + spaceX)/scanl;
+                    
+                    xTransform = offsetX - (drawPageH + rowSpace)/scanl  * (rowCount - j -1) ;
+                    yTransform = offsetY + (drawPageW + columnSpace)/scanl * i;
+                    
+                } else {
+                    offsetX = (properties.edgeInsets.left + spaceX)/scanl;
+                    offsetY = (properties.edgeInsets.bottom+spaceY)/scanl;
+                    
+                    xTransform = offsetX + (drawPageW + columnSpace)/scanl  * i ;
+                    yTransform =  (offsetY + (drawPageH + rowSpace)/scanl * (rowCount - j -1));
+                }
+            } else if (kKMPDFMultiplePageOrder_LongitudinalAntitone == properties.order) {
+                if (rotate == 270) {
+                    offsetX = (properties.edgeInsets.bottom+ spaceY)/scanl;
+                    offsetY = - pageBounds.size.height - (properties.edgeInsets.left + spaceX)/scanl;
+                    
+                    xTransform = offsetX + (drawPageH + rowSpace)/scanl  * (rowCount - j -1) ;
+                    yTransform = offsetY - (drawPageW + columnSpace)/scanl * (columnCout - 1 - i);
+                    
+                } else if (rotate == 180) {
+                    offsetX = -(pageBounds.size.width + properties.edgeInsets.left/scanl + spaceX/scanl);
+                    offsetY = -(pageBounds.size.height + properties.edgeInsets.bottom/scanl + spaceY/scanl);
+                    
+                    xTransform = offsetX - (drawPageW + columnSpace)/scanl  * (columnCout - 1 - i) ;
+                    yTransform = offsetY  - (drawPageH + rowSpace)/scanl * (rowCount - j -1);
+                    
+                } else if (rotate == 90) {
+                    
+                    offsetX = - (pageBounds.size.width + (properties.edgeInsets.bottom+ spaceY)/scanl);
+                    offsetY = (properties.edgeInsets.left + spaceX)/scanl;
+                    
+                    xTransform = offsetX - (drawPageH + rowSpace)/scanl  * (rowCount - j -1) ;
+                    yTransform = offsetY + (drawPageW + columnSpace)/scanl * (columnCout - 1 - i);
+                    
+                } else {
+                    offsetX = (properties.edgeInsets.left + spaceX)/scanl;
+                    offsetY = (properties.edgeInsets.bottom+spaceY)/scanl;
+                    
+                    xTransform = offsetX + (drawPageW + columnSpace)/scanl  * (columnCout - 1 - i) ;
+                    yTransform =  (offsetY + (drawPageH + rowSpace)/scanl * (rowCount - j -1));
+                }
+            }
+            
+            [NSGraphicsContext saveGraphicsState];
+    
+            //缩放
+            CGContextScaleCTM(context, scanl, scanl);
+
+            CGContextRotateCTM(context, -rotate*M_PI/180);
+            
+            CGContextTranslateCTM(context,xTransform,yTransform);
+
+            CGContextDrawPDFPage(context,drawPage.pageRef);
+
+            if (properties.isHasBorder) {
+                CGFloat borderWidth = pageBounds.size.width;
+                CGFloat borderHeight = pageBounds.size.height;
+
+                CGRect dirtyRect = CGRectMake(0, 0, borderWidth, borderHeight);
+                CGContextAddRect(context, dirtyRect);
+                CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 1.0);
+                CGContextStrokePath(context);
+            }
+
+            [NSGraphicsContext restoreGraphicsState];
+        }
+    }
+}
+
+#pragma mark Publick Action
++ (KMPDFMultipleManager *)defaultManager
+{
+    static KMPDFMultipleManager *singleton = nil;
+    static dispatch_once_t pred;
+    dispatch_once(&pred, ^{
+        singleton = [[KMPDFMultipleManager alloc] init];
+    });
+    return singleton;
+}
+
+- (void)savePDFDocumentPath:(NSString *)path drawPages:(NSArray *)pages multipleOption:(KMEachPageProperties *)properties completionHandler:(void (^)(BOOL isSuccessfully))handler
+{
+    CFStringRef filePath = (__bridge CFStringRef)path;
+    CFURLRef url = CFURLCreateWithFileSystemPath(NULL, filePath, kCFURLPOSIXPathStyle, 0);
+    CFMutableDictionaryRef myDictionary = CFDictionaryCreateMutable(NULL,
+                                                                    0,
+                                                                    &kCFTypeDictionaryKeyCallBacks,
+                                                                    &kCFTypeDictionaryValueCallBacks);
+    CFDictionarySetValue(myDictionary, kCGPDFContextCreator, CFSTR("PDF Reader Pro"));
+    
+    CGContextRef pdfContext = CGPDFContextCreateWithURL(url, &CGRectZero, myDictionary);
+    
+    CFRelease(myDictionary);
+    CFRelease(url);
+    
+    if (!pdfContext) {
+        handler(NO);
+        return;
+    }
+
+    [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithGraphicsPort:pdfContext flipped:NO]];
+
+    NSInteger eachPageCount = (properties.columnCout * properties.rowCount);
+    NSInteger numPages = 0;
+    if (pages.count % eachPageCount == 0) {
+        numPages = pages.count / eachPageCount;
+    } else {
+        numPages = pages.count / eachPageCount +1;
+    }
+    
+    for (NSInteger index = 0; index < numPages; index ++) {
+        NSMutableArray * eachPages = [NSMutableArray array];
+        for (NSInteger i = 0; i<eachPageCount; i++) {
+            NSUInteger currentIndex = i + eachPageCount * index;
+            if (properties.isReversePage) {
+                currentIndex = i + eachPageCount * (numPages - index - 1);
+            }
+
+            if (currentIndex >= pages.count) {
+                break;
+            }
+            PDFPage * page = [pages[currentIndex] copy];
+            [eachPages addObject:page];
+        }
+        
+        if (eachPages.count < 1) {
+            break;
+        }
+        CGSize size = properties.pageSize;
+        CGFloat width = size.width;
+        CGFloat height =size.height;
+        
+        if (kKMPDFMultiplePageDirection_Landscape == properties.direction) {
+            width = size.height;
+            height = size.width;
+        }
+        
+        CGRect mediaBox = CGRectMake(0, 0, width,height);
+        
+        CGContextBeginPage(pdfContext, &mediaBox);
+        
+        [self drawPageToContext:pdfContext eachPages:eachPages multipleOption:properties];
+        CGContextEndPage(pdfContext);
+    }
+ 
+    CGPDFContextClose(pdfContext);
+    CGContextRelease (pdfContext);
+    
+    handler(YES);
+    
+}
+
+- (void)drawPageToContext:(CGContextRef)context eachPages:(NSArray *)pages multipleOption:(KMEachPageProperties *)properties
+{
+    /****
+     *可以统一使用CG类来进行缩放、平移、旋转
+     *PDFkit 自带画page的方法,这样能够保留注释存在
+    if (@available(macOS 10.12, *)) {
+        [self PDFKitDrawPageToContext:context eachPages:pages multipleOption:properties];
+    } else {
+        [self CGDrawPageToContext:context eachPages:pages multipleOption:properties];
+    }
+     *****/
+    [self PDFKitDrawPageToContext:context eachPages:pages multipleOption:properties];
+
+}
+
+@end

+ 17 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Multiple/KMPDFMultiplePrintWindowController.h

@@ -0,0 +1,17 @@
+//
+//  KMPDFMultiplePrintWindowController.h
+//  PDF Reader Pro Edition
+//
+//  Created by 丁林圭 on 2018/5/17.
+//
+
+#import <Cocoa/Cocoa.h>
+#import <Quartz/Quartz.h>
+
+@interface KMPDFMultiplePrintWindowController : NSWindowController
+
+- (id)initWithPDFDocument:(PDFDocument *)PDFDocument;
+
+- (id)initWithPDFFilePath:(NSString *)filePath password:(nullable NSString *)password;
+
+@end

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1104 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Multiple/KMPDFMultiplePrintWindowController.m


+ 971 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Multiple/KMPDFMultiplePrintWindowController.xib

@@ -0,0 +1,971 @@
+<?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"/>
+        <plugIn identifier="com.apple.pdfkit.ibplugin" version="22505"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMPDFMultiplePrintWindowController">
+            <connections>
+                <outlet property="PDFHeight" destination="IRY-DZ-v82" id="qNn-uL-SGo"/>
+                <outlet property="PDFView" destination="ter-wQ-qPs" id="vce-fv-GOf"/>
+                <outlet property="PDFWidth" destination="DaH-t2-j6g" id="s4p-hM-yyR"/>
+                <outlet property="allPageSizeLabel" destination="RYy-S9-jqT" id="SmL-xN-q8M"/>
+                <outlet property="autoRotaCheckButton" destination="92S-rY-Cij" id="kAS-1L-518"/>
+                <outlet property="borderCheckButton" destination="PgJ-Qf-xkH" id="vm4-nH-5X4"/>
+                <outlet property="bottomDistanceText" destination="1Ho-e8-0Pc" id="8DV-7w-6sG"/>
+                <outlet property="bottomLabel" destination="p6M-hz-4xK" id="XOY-Og-e4n"/>
+                <outlet property="bottomStepper" destination="1oJ-Lv-Qza" id="VfC-sJ-s6p"/>
+                <outlet property="byLabel" destination="i6U-95-4VG" id="g3w-IO-nUr"/>
+                <outlet property="cancelButton" destination="St5-N4-vJA" id="GbY-3x-hV7"/>
+                <outlet property="columnCountText" destination="l7s-Uc-yXQ" id="ash-sx-gvS"/>
+                <outlet property="columnLabel" destination="ZpF-SX-sZa" id="Qlu-Ij-fbF"/>
+                <outlet property="columnSpaceText" destination="pjQ-AG-hel" id="EAs-Gl-rkF"/>
+                <outlet property="columnStepper" destination="XZ0-7z-U3u" id="aq5-2k-ASR"/>
+                <outlet property="commentsFormsComboBox" destination="2ze-1B-eaj" id="8lS-H8-BdJ"/>
+                <outlet property="commentsFormsLabel" destination="dYT-jP-l5v" id="SfG-gr-nEh"/>
+                <outlet property="edgeUnitLabel" destination="ktT-uc-z9L" id="fJR-XY-bU2"/>
+                <outlet property="landscapeButton" destination="CRe-3N-GJY" id="GhI-iC-f5G"/>
+                <outlet property="leftDistanceText" destination="iKF-Va-qyY" id="6vy-jG-xKM"/>
+                <outlet property="leftLabel" destination="9Gc-2f-xXh" id="Inq-Hz-UHl"/>
+                <outlet property="leftStepper" destination="anh-yc-diy" id="hLF-zf-q0O"/>
+                <outlet property="lineCountText" destination="x3Y-yN-swg" id="RZG-oc-TjY"/>
+                <outlet property="lineLabel" destination="fJU-hq-neG" id="sxJ-Cu-0Ob"/>
+                <outlet property="lineSpaceText" destination="yqV-8I-chB" id="HBm-Cq-2MZ"/>
+                <outlet property="lineStepper" destination="ggc-WO-OSK" id="3ED-hf-HPE"/>
+                <outlet property="orientationLabel" destination="CqP-kf-2sa" id="0vM-1N-IPW"/>
+                <outlet property="pageEdgeLabel" destination="KQ9-PL-R6v" id="9mZ-Yb-3Cq"/>
+                <outlet property="pageHeightTextField" destination="CF1-1h-Rvn" id="h3m-Yo-pD2"/>
+                <outlet property="pageOrderComboBox" destination="7fU-0d-Eh5" id="reT-Mq-39M"/>
+                <outlet property="pageRangeComboBox" destination="1sD-Hc-viy" id="pB4-H0-Oal"/>
+                <outlet property="pageRangeLabel" destination="5mT-Y6-O4N" id="hOH-Hu-OfJ"/>
+                <outlet property="pageSpaceLabel" destination="YTv-qj-2Og" id="RM6-dd-Tto"/>
+                <outlet property="pageWidthTextField" destination="7Tz-kb-9ve" id="rhF-s3-er1"/>
+                <outlet property="pagesOrderLabel" destination="y7A-v7-qcJ" id="2hV-2b-0Bi"/>
+                <outlet property="pagesPerLabel" destination="IQo-2n-9og" id="AhR-Vs-kxF"/>
+                <outlet property="portraitButton" destination="Fja-WC-T5p" id="g32-zJ-kwf"/>
+                <outlet property="positionLabel" destination="3Kb-VC-yPa" id="z6k-Ze-pnL"/>
+                <outlet property="positionTextFiled" destination="WR8-fO-ViK" id="H1U-DZ-Rhs"/>
+                <outlet property="printButton" destination="Ze9-hy-Cht" id="VPH-DH-qzm"/>
+                <outlet property="reverseButton" destination="yLx-qO-aQc" id="mSH-c9-J2N"/>
+                <outlet property="rightDistanceText" destination="dl9-L2-3FQ" id="Ibx-xt-Sd4"/>
+                <outlet property="rightLabel" destination="8dt-b9-2y3" id="S8S-d8-TAN"/>
+                <outlet property="rightStepper" destination="cJT-o9-iLF" id="0Ri-KT-aDE"/>
+                <outlet property="saveButton" destination="exz-x7-Vmf" id="bOm-ux-TA5"/>
+                <outlet property="selectPerComboBox" destination="koL-Ob-pKu" id="KEj-GJ-H96"/>
+                <outlet property="spaceUnitLabel" destination="u6f-hh-6wg" id="RYI-uO-vbV"/>
+                <outlet property="splitSizeComboBox" destination="vsi-Ur-6VQ" id="NWY-xC-YO5"/>
+                <outlet property="splitSizeLabel" destination="3OA-oP-KAF" id="MJl-LF-Jr5"/>
+                <outlet property="topDistanceText" destination="HAC-wn-LhQ" id="dUl-gF-0oI"/>
+                <outlet property="topLabel" destination="FRO-At-3Dv" id="n6u-1v-FhJ"/>
+                <outlet property="topStepper" destination="Je0-i6-g88" id="M6C-1B-mWh"/>
+                <outlet property="unitComboBox" destination="uH5-MX-szM" id="MEa-RS-0S4"/>
+                <outlet property="unitLabel" destination="WRU-Gd-cWm" id="AHo-UR-jeu"/>
+                <outlet property="unitTLabel" destination="rXz-4t-rt4" id="uMZ-Mr-D1k"/>
+                <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" visibleAtLaunch="NO" animationBehavior="default" id="F0z-JX-Cv5">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="196" y="240" width="830" height="650"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
+            <view key="contentView" wantsLayer="YES" id="se5-gp-TjO">
+                <rect key="frame" x="0.0" y="0.0" width="830" height="650"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="Ewt-vG-5P3">
+                        <rect key="frame" x="20" y="50" width="340" height="580"/>
+                        <subviews>
+                            <pdfView autoresizesSubviews="NO" wantsLayer="YES" displayMode="singlePage" displaysPageBreaks="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ter-wQ-qPs" customClass="KMMultiplePDFView">
+                                <rect key="frame" x="13" y="77" width="315" height="446"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="315" id="DaH-t2-j6g"/>
+                                    <constraint firstAttribute="height" constant="446" id="IRY-DZ-v82"/>
+                                </constraints>
+                            </pdfView>
+                            <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="xxs-QG-74U">
+                                <rect key="frame" x="77" y="13" width="26" height="26"/>
+                                <buttonCell key="cell" type="round" title="Button" bezelStyle="circular" image="NSGoLeftTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="qTW-Sb-fCh">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                                <connections>
+                                    <action selector="buttonItemClicked_Previous:" target="-2" id="nJI-rn-1yj"/>
+                                </connections>
+                            </button>
+                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="XHC-24-T7K">
+                                <rect key="frame" x="140" y="15" width="61" height="22"/>
+                                <subviews>
+                                    <textField focusRingType="none" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="WR8-fO-ViK">
+                                        <rect key="frame" x="0.0" y="0.0" width="40" height="22"/>
+                                        <constraints>
+                                            <constraint firstAttribute="width" constant="40" id="3nC-ep-jfd"/>
+                                            <constraint firstAttribute="height" constant="22" id="sI5-WB-nTV"/>
+                                        </constraints>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="center" drawsBackground="YES" id="MnF-0k-SYA">
+                                            <numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="tZR-3Z-H6A">
+                                                <real key="minimum" value="1"/>
+                                            </numberFormatter>
+                                            <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>
+                                            <outlet property="delegate" destination="-2" id="Yz8-wC-ILs"/>
+                                        </connections>
+                                    </textField>
+                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3Kb-VC-yPa">
+                                        <rect key="frame" x="43" y="3" width="20" height="16"/>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="/ 0" id="qd4-Yz-wW0">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstItem="3Kb-VC-yPa" firstAttribute="leading" secondItem="WR8-fO-ViK" secondAttribute="trailing" constant="5" id="ClB-gC-efr"/>
+                                    <constraint firstItem="WR8-fO-ViK" firstAttribute="leading" secondItem="XHC-24-T7K" secondAttribute="leading" id="WTf-YY-9Hm"/>
+                                    <constraint firstItem="3Kb-VC-yPa" firstAttribute="centerY" secondItem="WR8-fO-ViK" secondAttribute="centerY" id="Wr0-fp-DQl"/>
+                                    <constraint firstAttribute="trailing" secondItem="3Kb-VC-yPa" secondAttribute="trailing" id="sid-Vv-fVU"/>
+                                    <constraint firstItem="WR8-fO-ViK" firstAttribute="top" secondItem="XHC-24-T7K" secondAttribute="top" id="t0J-fK-n6M"/>
+                                    <constraint firstAttribute="bottom" secondItem="WR8-fO-ViK" secondAttribute="bottom" id="ygT-9i-Hvx"/>
+                                </constraints>
+                            </customView>
+                            <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Vgt-Iv-joy">
+                                <rect key="frame" x="238" y="13" width="26" height="26"/>
+                                <buttonCell key="cell" type="round" bezelStyle="circular" image="NSGoRightTemplate" imagePosition="only" alignment="center" borderStyle="border" inset="2" id="R3u-VP-KsV">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                                <connections>
+                                    <action selector="buttonItemClicked_Next:" target="-2" id="1Ni-rL-HMu"/>
+                                </connections>
+                            </button>
+                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="RYy-S9-jqT">
+                                <rect key="frame" x="8" y="533" width="324" height="16"/>
+                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Label" id="o1w-YB-4BD">
+                                    <font key="font" metaFont="system"/>
+                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                </textFieldCell>
+                            </textField>
+                        </subviews>
+                        <constraints>
+                            <constraint firstItem="XHC-24-T7K" firstAttribute="centerY" secondItem="xxs-QG-74U" secondAttribute="centerY" id="1eI-gb-mT7"/>
+                            <constraint firstItem="RYy-S9-jqT" firstAttribute="leading" secondItem="Ewt-vG-5P3" secondAttribute="leading" constant="10" id="7qk-ii-OKC"/>
+                            <constraint firstAttribute="bottom" secondItem="XHC-24-T7K" secondAttribute="bottom" constant="15" id="A38-8h-dFR"/>
+                            <constraint firstAttribute="width" constant="340" id="BkK-MK-Sdn"/>
+                            <constraint firstItem="XHC-24-T7K" firstAttribute="centerX" secondItem="Ewt-vG-5P3" secondAttribute="centerX" id="G4T-9S-6uB"/>
+                            <constraint firstItem="XHC-24-T7K" firstAttribute="leading" secondItem="xxs-QG-74U" secondAttribute="trailing" constant="40" id="LAK-Pp-wUC"/>
+                            <constraint firstItem="Vgt-Iv-joy" firstAttribute="centerY" secondItem="XHC-24-T7K" secondAttribute="centerY" id="Ovw-tD-qKg"/>
+                            <constraint firstItem="ter-wQ-qPs" firstAttribute="top" secondItem="RYy-S9-jqT" secondAttribute="bottom" constant="10" id="TAK-AH-2HG"/>
+                            <constraint firstItem="ter-wQ-qPs" firstAttribute="centerX" secondItem="Ewt-vG-5P3" secondAttribute="centerX" id="VOY-1N-glO"/>
+                            <constraint firstItem="Vgt-Iv-joy" firstAttribute="leading" secondItem="XHC-24-T7K" secondAttribute="trailing" constant="40" id="emk-i6-qk2"/>
+                            <constraint firstItem="ter-wQ-qPs" firstAttribute="centerY" secondItem="Ewt-vG-5P3" secondAttribute="centerY" constant="-10" id="jRH-XE-7ob"/>
+                            <constraint firstAttribute="trailing" secondItem="RYy-S9-jqT" secondAttribute="trailing" constant="10" id="kUs-54-eFT"/>
+                            <constraint firstItem="ter-wQ-qPs" firstAttribute="centerX" secondItem="Ewt-vG-5P3" secondAttribute="centerX" id="x73-ZD-Lml"/>
+                        </constraints>
+                    </customView>
+                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="St5-N4-vJA">
+                        <rect key="frame" x="582" y="7" width="76" height="32"/>
+                        <buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="3Sb-Tm-bfK">
+                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                            <string key="keyEquivalent" base64-UTF8="YES">
+Gw
+</string>
+                        </buttonCell>
+                        <connections>
+                            <action selector="buttonItemClick_Cancel:" target="-2" id="Ab6-N8-IRe"/>
+                        </connections>
+                    </button>
+                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ze9-hy-Cht">
+                        <rect key="frame" x="754" y="7" width="63" height="32"/>
+                        <buttonCell key="cell" type="push" title="Print" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Fvb-kS-vgq">
+                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                            <string key="keyEquivalent" base64-UTF8="YES">
+DQ
+</string>
+                        </buttonCell>
+                        <connections>
+                            <action selector="buttonItemClick_Print:" target="-2" id="pMF-Ho-y6Q"/>
+                        </connections>
+                    </button>
+                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="exz-x7-Vmf">
+                        <rect key="frame" x="674" y="7" width="64" height="32"/>
+                        <buttonCell key="cell" type="push" title="Save" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="eCi-QA-UJu">
+                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                        </buttonCell>
+                        <connections>
+                            <action selector="buttonItemClick_Save:" target="-2" id="xsQ-sh-C5O"/>
+                        </connections>
+                    </button>
+                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="WRU-Gd-cWm">
+                        <rect key="frame" x="378" y="612" width="33" height="16"/>
+                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Unit:" id="7pW-UC-DeB">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <comboBox focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="uH5-MX-szM">
+                        <rect key="frame" x="413" y="608" width="54" height="23"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="50" id="yKA-u3-iXP"/>
+                        </constraints>
+                        <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="XIB-De-o39">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                            <objectValues>
+                                <string>cm</string>
+                                <string>mm</string>
+                                <string>in</string>
+                            </objectValues>
+                        </comboBoxCell>
+                        <connections>
+                            <action selector="comboBoxItemClick_Unit:" target="-2" id="zxy-Rm-F2n"/>
+                        </connections>
+                    </comboBox>
+                    <box boxType="custom" borderType="none" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="N2N-XL-rkY">
+                        <rect key="frame" x="370" y="554" width="440" height="46"/>
+                        <view key="contentView" id="EfG-lT-IXd">
+                            <rect key="frame" x="0.0" y="0.0" width="440" height="46"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3OA-oP-KAF">
+                                    <rect key="frame" x="8" y="30" width="66" height="16"/>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Page size:" id="6UM-3s-hD9">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <comboBox focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vsi-Ur-6VQ">
+                                    <rect key="frame" x="9" y="-2" width="144" height="23"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="140" id="nzq-rg-3Tj"/>
+                                    </constraints>
+                                    <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="uPB-lG-KxO">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    </comboBoxCell>
+                                    <connections>
+                                        <action selector="comboBoxItemClick_SplitSize:" target="-2" id="bW7-u5-6FL"/>
+                                    </connections>
+                                </comboBox>
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="AYz-sh-gRk">
+                                    <rect key="frame" x="223" y="3" width="11" height="16"/>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="x" id="yHO-O5-nBs">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7Tz-kb-9ve">
+                                    <rect key="frame" x="170" y="-1" width="50" height="22"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="50" id="MYd-XD-aYr"/>
+                                        <constraint firstAttribute="height" constant="22" id="elf-KK-FzY"/>
+                                    </constraints>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="center" drawsBackground="YES" id="AoP-Wj-WHw">
+                                        <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>
+                                        <outlet property="delegate" destination="-2" id="KZx-CL-jkG"/>
+                                    </connections>
+                                </textField>
+                                <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="CF1-1h-Rvn">
+                                    <rect key="frame" x="237" y="-1" width="50" height="22"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="22" id="7HU-m8-rPq"/>
+                                        <constraint firstAttribute="width" constant="50" id="PvT-b2-ls3"/>
+                                    </constraints>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="center" drawsBackground="YES" id="1gB-at-f7Y">
+                                        <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>
+                                        <outlet property="delegate" destination="-2" id="3eD-uR-c8v"/>
+                                    </connections>
+                                </textField>
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="rXz-4t-rt4">
+                                    <rect key="frame" x="287" y="2" width="27" height="16"/>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="mm" id="pp3-fa-riD">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                            </subviews>
+                            <constraints>
+                                <constraint firstAttribute="bottom" secondItem="vsi-Ur-6VQ" secondAttribute="bottom" id="IBE-hC-Wyd"/>
+                                <constraint firstItem="7Tz-kb-9ve" firstAttribute="leading" secondItem="vsi-Ur-6VQ" secondAttribute="trailing" constant="20" id="KqU-S6-2D0"/>
+                                <constraint firstItem="vsi-Ur-6VQ" firstAttribute="top" secondItem="3OA-oP-KAF" secondAttribute="bottom" constant="10" id="R52-vY-7KM"/>
+                                <constraint firstItem="CF1-1h-Rvn" firstAttribute="centerY" secondItem="7Tz-kb-9ve" secondAttribute="centerY" id="RoX-oi-YoS"/>
+                                <constraint firstItem="3OA-oP-KAF" firstAttribute="leading" secondItem="EfG-lT-IXd" secondAttribute="leading" constant="10" id="Rt3-zo-6VC"/>
+                                <constraint firstItem="3OA-oP-KAF" firstAttribute="top" secondItem="EfG-lT-IXd" secondAttribute="top" id="Vbd-Dx-qCb"/>
+                                <constraint firstItem="rXz-4t-rt4" firstAttribute="leading" secondItem="CF1-1h-Rvn" secondAttribute="trailing" constant="2" id="VgP-TR-1tD"/>
+                                <constraint firstItem="AYz-sh-gRk" firstAttribute="baseline" secondItem="7Tz-kb-9ve" secondAttribute="firstBaseline" id="W0C-f9-pgf"/>
+                                <constraint firstItem="AYz-sh-gRk" firstAttribute="leading" secondItem="7Tz-kb-9ve" secondAttribute="trailing" constant="5" id="ZRb-jZ-6ik"/>
+                                <constraint firstItem="rXz-4t-rt4" firstAttribute="centerY" secondItem="7Tz-kb-9ve" secondAttribute="centerY" id="bPN-F6-FSE"/>
+                                <constraint firstItem="AYz-sh-gRk" firstAttribute="firstBaseline" secondItem="7Tz-kb-9ve" secondAttribute="firstBaseline" id="gVp-w6-YTS"/>
+                                <constraint firstItem="vsi-Ur-6VQ" firstAttribute="leading" secondItem="EfG-lT-IXd" secondAttribute="leading" constant="10" id="lg3-fV-R2p"/>
+                                <constraint firstItem="CF1-1h-Rvn" firstAttribute="leading" secondItem="AYz-sh-gRk" secondAttribute="trailing" constant="5" id="vDl-Oz-inP"/>
+                                <constraint firstItem="7Tz-kb-9ve" firstAttribute="centerY" secondItem="vsi-Ur-6VQ" secondAttribute="centerY" id="vrL-Ff-RXk"/>
+                            </constraints>
+                        </view>
+                        <color key="fillColor" red="1" green="1" blue="1" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                    </box>
+                    <box boxType="custom" borderType="none" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="c4T-Vi-gH7">
+                        <rect key="frame" x="370" y="143" width="440" height="94"/>
+                        <view key="contentView" id="8xs-wL-cMC">
+                            <rect key="frame" x="0.0" y="0.0" width="440" height="94"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="CqP-kf-2sa">
+                                    <rect key="frame" x="8" y="78" width="76" height="16"/>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Orientation:" id="6cR-Ob-SS4">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Fja-WC-T5p">
+                                    <rect key="frame" x="8" y="51" width="71" height="18"/>
+                                    <buttonCell key="cell" type="radio" title="Portrait" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="r76-N3-pPp">
+                                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="buttonItemClick_Orientation:" target="-2" id="QNU-eq-PxK"/>
+                                    </connections>
+                                </button>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="CRe-3N-GJY">
+                                    <rect key="frame" x="8" y="25" width="93" height="18"/>
+                                    <buttonCell key="cell" type="radio" title="Landscape" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="9R6-mc-YDM">
+                                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="buttonItemClick_Orientation:" target="-2" id="7sB-cQ-390"/>
+                                    </connections>
+                                </button>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="92S-rY-Cij">
+                                    <rect key="frame" x="8" y="-1" width="247" height="18"/>
+                                    <buttonCell key="cell" type="check" title="Auto-rotate pages within each sheet" bezelStyle="regularSquare" imagePosition="left" inset="2" id="Utw-64-8Wy">
+                                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="buttonItemClick_AutoRoate:" target="-2" id="GmA-5e-fNS"/>
+                                    </connections>
+                                </button>
+                            </subviews>
+                            <constraints>
+                                <constraint firstItem="CRe-3N-GJY" firstAttribute="top" secondItem="Fja-WC-T5p" secondAttribute="bottom" constant="10" id="20f-mW-qqo"/>
+                                <constraint firstItem="Fja-WC-T5p" firstAttribute="top" secondItem="CqP-kf-2sa" secondAttribute="bottom" constant="10" id="Bcg-oo-dkg"/>
+                                <constraint firstItem="92S-rY-Cij" firstAttribute="leading" secondItem="Fja-WC-T5p" secondAttribute="leading" id="Cvy-fV-rh4"/>
+                                <constraint firstItem="CqP-kf-2sa" firstAttribute="leading" secondItem="8xs-wL-cMC" secondAttribute="leading" constant="10" id="Fhy-Fm-lVC"/>
+                                <constraint firstItem="CRe-3N-GJY" firstAttribute="leading" secondItem="Fja-WC-T5p" secondAttribute="leading" id="X6I-vs-uGv"/>
+                                <constraint firstItem="CqP-kf-2sa" firstAttribute="top" secondItem="8xs-wL-cMC" secondAttribute="top" id="alN-H1-wAw"/>
+                                <constraint firstItem="Fja-WC-T5p" firstAttribute="leading" secondItem="8xs-wL-cMC" secondAttribute="leading" constant="10" id="bcZ-Dw-mmd"/>
+                                <constraint firstAttribute="bottom" secondItem="92S-rY-Cij" secondAttribute="bottom" id="nVO-Kz-8ZM"/>
+                                <constraint firstItem="92S-rY-Cij" firstAttribute="top" secondItem="CRe-3N-GJY" secondAttribute="bottom" constant="10" id="s6e-sD-kuC"/>
+                            </constraints>
+                        </view>
+                    </box>
+                    <box boxType="custom" borderType="none" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="m7h-RU-RMV">
+                        <rect key="frame" x="370" y="67" width="440" height="56"/>
+                        <view key="contentView" id="pBp-ej-J7q">
+                            <rect key="frame" x="0.0" y="0.0" width="440" height="56"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5mT-Y6-O4N">
+                                    <rect key="frame" x="8" y="40" width="77" height="16"/>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Page Range" id="NJh-iV-TlF">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <comboBox focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1sD-Hc-viy">
+                                    <rect key="frame" x="9" y="8" width="244" height="23"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="240" id="aIw-OD-GZN"/>
+                                    </constraints>
+                                    <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="Fsx-MI-nMy">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    </comboBoxCell>
+                                    <connections>
+                                        <action selector="comboBoxItemClick_PageRange:" target="-2" id="zXj-AC-O8G"/>
+                                    </connections>
+                                </comboBox>
+                            </subviews>
+                            <constraints>
+                                <constraint firstItem="5mT-Y6-O4N" firstAttribute="top" secondItem="pBp-ej-J7q" secondAttribute="top" id="4HG-xv-rep"/>
+                                <constraint firstItem="5mT-Y6-O4N" firstAttribute="leading" secondItem="pBp-ej-J7q" secondAttribute="leading" constant="10" id="DiB-fk-2Km"/>
+                                <constraint firstItem="1sD-Hc-viy" firstAttribute="leading" secondItem="pBp-ej-J7q" secondAttribute="leading" constant="10" id="NnP-Sl-Sam"/>
+                                <constraint firstAttribute="bottom" secondItem="1sD-Hc-viy" secondAttribute="bottom" constant="10" id="clW-O9-CWT"/>
+                                <constraint firstItem="1sD-Hc-viy" firstAttribute="top" secondItem="5mT-Y6-O4N" secondAttribute="bottom" constant="10" id="eyd-cV-JuF"/>
+                            </constraints>
+                        </view>
+                        <color key="fillColor" red="1" green="1" blue="1" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                    </box>
+                    <box boxType="custom" borderType="none" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="PcW-yO-eOC">
+                        <rect key="frame" x="370" y="402" width="440" height="132"/>
+                        <view key="contentView" id="R45-BM-doG">
+                            <rect key="frame" x="0.0" y="0.0" width="440" height="132"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IQo-2n-9og">
+                                    <rect key="frame" x="8" y="114" width="106" height="16"/>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Pages per sheet:" id="323-95-BVr">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <comboBox focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="koL-Ob-pKu">
+                                    <rect key="frame" x="116" y="110" width="84" height="23"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="80" id="OgG-CK-n1o"/>
+                                    </constraints>
+                                    <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="HlG-vM-R6E">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    </comboBoxCell>
+                                    <connections>
+                                        <action selector="comboBoxItemClick_PagesPer:" target="-2" id="DlX-Vo-m9N"/>
+                                    </connections>
+                                </comboBox>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="PgJ-Qf-xkH">
+                                    <rect key="frame" x="8" y="25" width="132" height="18"/>
+                                    <buttonCell key="cell" type="check" title="Print page border" bezelStyle="regularSquare" imagePosition="left" inset="2" id="oKZ-vp-Dqp">
+                                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="buttonItemClick_PageBorder:" target="-2" id="I3a-Ox-NGx"/>
+                                    </connections>
+                                </button>
+                                <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="l7s-Uc-yXQ">
+                                    <rect key="frame" x="212" y="111" width="30" height="21"/>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="gi6-3T-HWX">
+                                        <numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="lRi-1a-gjs">
+                                            <real key="minimum" value="1"/>
+                                            <real key="maximum" value="99"/>
+                                        </numberFormatter>
+                                        <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>
+                                        <outlet property="delegate" destination="-2" id="Ky7-9u-FVU"/>
+                                    </connections>
+                                </textField>
+                                <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="x3Y-yN-swg">
+                                    <rect key="frame" x="267" y="111" width="30" height="21"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="30" id="IWx-vW-U4p"/>
+                                    </constraints>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="iIX-Rv-IKW">
+                                        <numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="w33-mh-dN2">
+                                            <real key="minimum" value="1"/>
+                                            <real key="maximum" value="99"/>
+                                        </numberFormatter>
+                                        <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>
+                                        <outlet property="delegate" destination="-2" id="mNx-jg-W0I"/>
+                                    </connections>
+                                </textField>
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="i6U-95-4VG">
+                                    <rect key="frame" x="245" y="114" width="19" height="16"/>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="by" id="Jal-GQ-rMT">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="y7A-v7-qcJ">
+                                    <rect key="frame" x="8" y="84" width="75" height="16"/>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Page order:" id="dZB-0D-2cz">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <comboBox focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7fU-0d-Eh5">
+                                    <rect key="frame" x="85" y="80" width="204" height="23"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="200" id="NVN-4O-rhr"/>
+                                    </constraints>
+                                    <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="yK9-Fz-3Mq">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    </comboBoxCell>
+                                    <connections>
+                                        <action selector="comboBoxItemClick_PageOrder:" target="-2" id="r6w-HN-K22"/>
+                                    </connections>
+                                </comboBox>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yLx-qO-aQc">
+                                    <rect key="frame" x="8" y="-1" width="115" height="18"/>
+                                    <buttonCell key="cell" type="check" title="Reverse pages" bezelStyle="regularSquare" imagePosition="left" inset="2" id="KQE-Zh-P0S">
+                                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="buttonItemClick_ReversePage:" target="-2" id="zAo-9d-TwL"/>
+                                    </connections>
+                                </button>
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="dYT-jP-l5v">
+                                    <rect key="frame" x="8" y="54" width="128" height="16"/>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Comments &amp; Forms:" id="ZLL-Sg-yrc">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <comboBox focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2ze-1B-eaj">
+                                    <rect key="frame" x="138" y="50" width="244" height="23"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="240" id="NId-Ua-dvQ"/>
+                                    </constraints>
+                                    <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="9Ym-uW-mic">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    </comboBoxCell>
+                                    <connections>
+                                        <action selector="comboBoxItemClick_CommentsForms:" target="-2" id="KCQ-qL-9sf"/>
+                                    </connections>
+                                </comboBox>
+                            </subviews>
+                            <constraints>
+                                <constraint firstItem="7fU-0d-Eh5" firstAttribute="top" secondItem="koL-Ob-pKu" secondAttribute="bottom" constant="10" id="3Oo-3l-vtG"/>
+                                <constraint firstItem="l7s-Uc-yXQ" firstAttribute="leading" secondItem="koL-Ob-pKu" secondAttribute="trailing" constant="15" id="5ho-Nr-P3s"/>
+                                <constraint firstItem="l7s-Uc-yXQ" firstAttribute="top" secondItem="R45-BM-doG" secondAttribute="top" id="6pU-d9-ZgW"/>
+                                <constraint firstAttribute="bottom" secondItem="yLx-qO-aQc" secondAttribute="bottom" id="8ke-Nc-pHJ"/>
+                                <constraint firstItem="dYT-jP-l5v" firstAttribute="leading" secondItem="y7A-v7-qcJ" secondAttribute="leading" id="BPG-AN-yJR"/>
+                                <constraint firstItem="7fU-0d-Eh5" firstAttribute="leading" secondItem="y7A-v7-qcJ" secondAttribute="trailing" constant="5" id="DwG-WE-C7K"/>
+                                <constraint firstItem="koL-Ob-pKu" firstAttribute="centerY" secondItem="IQo-2n-9og" secondAttribute="centerY" id="FVW-CS-dyo"/>
+                                <constraint firstItem="IQo-2n-9og" firstAttribute="leading" secondItem="R45-BM-doG" secondAttribute="leading" constant="10" id="G7M-1C-OIq"/>
+                                <constraint firstItem="yLx-qO-aQc" firstAttribute="top" secondItem="PgJ-Qf-xkH" secondAttribute="bottom" constant="10" id="GK6-uV-sTy"/>
+                                <constraint firstItem="2ze-1B-eaj" firstAttribute="leading" secondItem="dYT-jP-l5v" secondAttribute="trailing" constant="5" id="II4-fa-XN4"/>
+                                <constraint firstItem="x3Y-yN-swg" firstAttribute="width" secondItem="l7s-Uc-yXQ" secondAttribute="width" id="KfO-VQ-oWJ"/>
+                                <constraint firstItem="x3Y-yN-swg" firstAttribute="centerY" secondItem="IQo-2n-9og" secondAttribute="centerY" id="LgN-3j-08i"/>
+                                <constraint firstItem="yLx-qO-aQc" firstAttribute="leading" secondItem="PgJ-Qf-xkH" secondAttribute="leading" id="Nuu-0q-tuN"/>
+                                <constraint firstItem="7fU-0d-Eh5" firstAttribute="centerY" secondItem="y7A-v7-qcJ" secondAttribute="centerY" id="QSs-BY-tSb"/>
+                                <constraint firstItem="i6U-95-4VG" firstAttribute="centerY" secondItem="IQo-2n-9og" secondAttribute="centerY" id="QVZ-hN-P7S"/>
+                                <constraint firstItem="PgJ-Qf-xkH" firstAttribute="top" secondItem="2ze-1B-eaj" secondAttribute="bottom" constant="10" id="WBJ-nc-HH8"/>
+                                <constraint firstItem="l7s-Uc-yXQ" firstAttribute="centerY" secondItem="IQo-2n-9og" secondAttribute="centerY" id="aji-k2-z4u"/>
+                                <constraint firstItem="2ze-1B-eaj" firstAttribute="centerY" secondItem="dYT-jP-l5v" secondAttribute="centerY" id="d4N-Sn-ghd"/>
+                                <constraint firstItem="y7A-v7-qcJ" firstAttribute="leading" secondItem="IQo-2n-9og" secondAttribute="leading" id="eM4-HC-LyT"/>
+                                <constraint firstItem="i6U-95-4VG" firstAttribute="leading" secondItem="l7s-Uc-yXQ" secondAttribute="trailing" constant="5" id="fzH-f9-spf"/>
+                                <constraint firstItem="x3Y-yN-swg" firstAttribute="leading" secondItem="i6U-95-4VG" secondAttribute="trailing" constant="5" id="gjB-Qi-D0h"/>
+                                <constraint firstItem="2ze-1B-eaj" firstAttribute="top" secondItem="7fU-0d-Eh5" secondAttribute="bottom" constant="10" id="hn6-c6-Az9"/>
+                                <constraint firstItem="PgJ-Qf-xkH" firstAttribute="leading" secondItem="IQo-2n-9og" secondAttribute="leading" id="m2l-rp-epg"/>
+                                <constraint firstItem="koL-Ob-pKu" firstAttribute="leading" secondItem="IQo-2n-9og" secondAttribute="trailing" constant="5" id="tRB-jL-eYK"/>
+                            </constraints>
+                        </view>
+                    </box>
+                    <box boxType="custom" borderType="none" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="RF9-eY-vrQ">
+                        <rect key="frame" x="380" y="257" width="430" height="125"/>
+                        <view key="contentView" id="g3i-8P-aW4">
+                            <rect key="frame" x="0.0" y="0.0" width="430" height="125"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <box boxType="custom" borderType="none" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="1Ct-gf-Hm9">
+                                    <rect key="frame" x="0.0" y="0.0" width="215" height="125"/>
+                                    <view key="contentView" id="oki-W5-mXy">
+                                        <rect key="frame" x="0.0" y="0.0" width="215" height="125"/>
+                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                        <subviews>
+                                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="KQ9-PL-R6v">
+                                                <rect key="frame" x="-2" y="109" width="109" height="16"/>
+                                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Page Edge Insets" id="aOd-tK-JYb">
+                                                    <font key="font" metaFont="system"/>
+                                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                    <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                                </textFieldCell>
+                                            </textField>
+                                            <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="HAC-wn-LhQ">
+                                                <rect key="frame" x="55" y="78" width="60" height="21"/>
+                                                <constraints>
+                                                    <constraint firstAttribute="width" constant="60" id="VqO-B4-WG5"/>
+                                                </constraints>
+                                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" title="30" drawsBackground="YES" id="oQP-1x-sjp">
+                                                    <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>
+                                                    <outlet property="delegate" destination="-2" id="fJv-QW-p6R"/>
+                                                </connections>
+                                            </textField>
+                                            <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1Ho-e8-0Pc">
+                                                <rect key="frame" x="55" y="52" width="60" height="21"/>
+                                                <constraints>
+                                                    <constraint firstAttribute="width" constant="60" id="nmE-ou-iFc"/>
+                                                </constraints>
+                                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" title="30" drawsBackground="YES" id="tjK-TB-yUe">
+                                                    <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>
+                                                    <outlet property="delegate" destination="-2" id="hmR-8Z-wyE"/>
+                                                </connections>
+                                            </textField>
+                                            <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="iKF-Va-qyY">
+                                                <rect key="frame" x="55" y="26" width="60" height="21"/>
+                                                <constraints>
+                                                    <constraint firstAttribute="width" constant="60" id="C25-jp-ZeQ"/>
+                                                </constraints>
+                                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" title="30" drawsBackground="YES" id="25h-U6-Vbi">
+                                                    <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>
+                                                    <outlet property="delegate" destination="-2" id="EUj-Ft-yis"/>
+                                                </connections>
+                                            </textField>
+                                            <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="dl9-L2-3FQ">
+                                                <rect key="frame" x="55" y="0.0" width="60" height="21"/>
+                                                <constraints>
+                                                    <constraint firstAttribute="width" constant="60" id="8Bq-iW-WkV"/>
+                                                </constraints>
+                                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" title="30" drawsBackground="YES" id="y61-CT-zml">
+                                                    <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>
+                                                    <outlet property="delegate" destination="-2" id="H5r-3P-52e"/>
+                                                </connections>
+                                            </textField>
+                                            <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1oJ-Lv-Qza">
+                                                <rect key="frame" x="112" y="48" width="19" height="28"/>
+                                                <constraints>
+                                                    <constraint firstAttribute="width" constant="13" id="2Ea-R5-QY0"/>
+                                                </constraints>
+                                                <stepperCell key="cell" continuous="YES" alignment="left" increment="0.10000000000000001" maxValue="10000" doubleValue="1" id="Ml8-bx-yEf"/>
+                                                <connections>
+                                                    <action selector="stepperItemClick_Distance:" target="-2" id="HKb-gU-C2D"/>
+                                                </connections>
+                                            </stepper>
+                                            <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="anh-yc-diy">
+                                                <rect key="frame" x="112" y="22" width="19" height="28"/>
+                                                <constraints>
+                                                    <constraint firstAttribute="width" constant="13" id="Lsb-y5-Ycb"/>
+                                                </constraints>
+                                                <stepperCell key="cell" continuous="YES" alignment="left" increment="0.10000000000000001" maxValue="10000" doubleValue="1" id="WTO-w0-tt8"/>
+                                                <connections>
+                                                    <action selector="stepperItemClick_Distance:" target="-2" id="DAS-OR-jzD"/>
+                                                </connections>
+                                            </stepper>
+                                            <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="cJT-o9-iLF">
+                                                <rect key="frame" x="112" y="-4" width="19" height="28"/>
+                                                <constraints>
+                                                    <constraint firstAttribute="width" constant="13" id="q4Y-ih-Aj5"/>
+                                                </constraints>
+                                                <stepperCell key="cell" continuous="YES" alignment="left" increment="0.10000000000000001" maxValue="10000" doubleValue="1" id="o02-bl-If1"/>
+                                                <connections>
+                                                    <action selector="stepperItemClick_Distance:" target="-2" id="nmN-tv-sAe"/>
+                                                </connections>
+                                            </stepper>
+                                            <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Je0-i6-g88">
+                                                <rect key="frame" x="112" y="74" width="19" height="28"/>
+                                                <constraints>
+                                                    <constraint firstAttribute="width" constant="13" id="Zq3-PV-EOM"/>
+                                                </constraints>
+                                                <stepperCell key="cell" continuous="YES" alignment="left" increment="0.10000000000000001" maxValue="10000" doubleValue="1" id="Pvh-S7-dts"/>
+                                                <connections>
+                                                    <action selector="stepperItemClick_Distance:" target="-2" id="w7X-kO-3g4"/>
+                                                </connections>
+                                            </stepper>
+                                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ktT-uc-z9L">
+                                                <rect key="frame" x="105" y="109" width="30" height="13"/>
+                                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="(mm)" id="n6A-T5-xNK">
+                                                    <font key="font" metaFont="system" size="10"/>
+                                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                    <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                                </textFieldCell>
+                                            </textField>
+                                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="byj-1m-2B9">
+                                                <rect key="frame" x="0.0" y="0.0" width="45" height="109"/>
+                                                <subviews>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="p6M-hz-4xK">
+                                                        <rect key="frame" x="-2" y="54" width="49" height="16"/>
+                                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Bottom" id="qkX-oB-jxA">
+                                                            <font key="font" metaFont="system"/>
+                                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8dt-b9-2y3">
+                                                        <rect key="frame" x="-2" y="2" width="49" height="16"/>
+                                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Right" id="6pK-oi-VRv">
+                                                            <font key="font" metaFont="system"/>
+                                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="FRO-At-3Dv">
+                                                        <rect key="frame" x="-2" y="80" width="49" height="16"/>
+                                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Top" id="WGk-jd-UBk">
+                                                            <font key="font" metaFont="system"/>
+                                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9Gc-2f-xXh">
+                                                        <rect key="frame" x="-2" y="28" width="49" height="16"/>
+                                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Left" id="pov-b3-LOq">
+                                                            <font key="font" metaFont="system"/>
+                                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                </subviews>
+                                                <constraints>
+                                                    <constraint firstItem="9Gc-2f-xXh" firstAttribute="leading" secondItem="byj-1m-2B9" secondAttribute="leading" id="6Iv-JH-8SR"/>
+                                                    <constraint firstItem="p6M-hz-4xK" firstAttribute="leading" secondItem="byj-1m-2B9" secondAttribute="leading" id="7ZP-r9-5c6"/>
+                                                    <constraint firstItem="p6M-hz-4xK" firstAttribute="top" secondItem="FRO-At-3Dv" secondAttribute="bottom" constant="10" id="EpX-Ve-tbu"/>
+                                                    <constraint firstItem="9Gc-2f-xXh" firstAttribute="top" secondItem="p6M-hz-4xK" secondAttribute="bottom" constant="10" id="FJ5-7Z-BW4"/>
+                                                    <constraint firstAttribute="trailing" secondItem="9Gc-2f-xXh" secondAttribute="trailing" id="H6q-Tg-2g9"/>
+                                                    <constraint firstItem="FRO-At-3Dv" firstAttribute="leading" secondItem="byj-1m-2B9" secondAttribute="leading" id="VJg-14-4FQ"/>
+                                                    <constraint firstAttribute="trailing" secondItem="p6M-hz-4xK" secondAttribute="trailing" id="acv-Ok-mvg"/>
+                                                    <constraint firstItem="8dt-b9-2y3" firstAttribute="leading" secondItem="byj-1m-2B9" secondAttribute="leading" id="ke3-FY-u9J"/>
+                                                    <constraint firstAttribute="trailing" secondItem="FRO-At-3Dv" secondAttribute="trailing" id="tjg-hH-iZ9"/>
+                                                    <constraint firstAttribute="trailing" secondItem="8dt-b9-2y3" secondAttribute="trailing" id="udg-AO-EhP"/>
+                                                    <constraint firstItem="8dt-b9-2y3" firstAttribute="top" secondItem="9Gc-2f-xXh" secondAttribute="bottom" constant="10" id="vFS-qZ-9I9"/>
+                                                    <constraint firstItem="FRO-At-3Dv" firstAttribute="top" secondItem="byj-1m-2B9" secondAttribute="top" constant="13" id="xCX-mS-ZRO"/>
+                                                </constraints>
+                                            </customView>
+                                        </subviews>
+                                        <constraints>
+                                            <constraint firstItem="iKF-Va-qyY" firstAttribute="leading" secondItem="byj-1m-2B9" secondAttribute="trailing" constant="10" id="2O1-WX-7OM"/>
+                                            <constraint firstItem="HAC-wn-LhQ" firstAttribute="top" secondItem="KQ9-PL-R6v" secondAttribute="bottom" constant="10" id="5Nh-ME-ukQ"/>
+                                            <constraint firstItem="anh-yc-diy" firstAttribute="centerY" secondItem="iKF-Va-qyY" secondAttribute="centerY" id="6KU-3f-K8c"/>
+                                            <constraint firstItem="1oJ-Lv-Qza" firstAttribute="leading" secondItem="1Ho-e8-0Pc" secondAttribute="trailing" id="BnF-Jo-mm0"/>
+                                            <constraint firstItem="byj-1m-2B9" firstAttribute="leading" secondItem="oki-W5-mXy" secondAttribute="leading" id="Ev3-L9-ivy"/>
+                                            <constraint firstItem="HAC-wn-LhQ" firstAttribute="leading" secondItem="byj-1m-2B9" secondAttribute="trailing" constant="10" id="HPO-jW-OyN"/>
+                                            <constraint firstItem="Je0-i6-g88" firstAttribute="centerY" secondItem="HAC-wn-LhQ" secondAttribute="centerY" id="KiT-VF-d0E"/>
+                                            <constraint firstItem="byj-1m-2B9" firstAttribute="top" secondItem="KQ9-PL-R6v" secondAttribute="bottom" id="NWC-A2-4It"/>
+                                            <constraint firstItem="dl9-L2-3FQ" firstAttribute="top" secondItem="iKF-Va-qyY" secondAttribute="bottom" constant="5" id="NpT-TY-34C"/>
+                                            <constraint firstItem="anh-yc-diy" firstAttribute="leading" secondItem="iKF-Va-qyY" secondAttribute="trailing" id="OIv-dy-Ga4"/>
+                                            <constraint firstItem="KQ9-PL-R6v" firstAttribute="leading" secondItem="oki-W5-mXy" secondAttribute="leading" id="TGr-WM-x8j"/>
+                                            <constraint firstItem="cJT-o9-iLF" firstAttribute="centerY" secondItem="dl9-L2-3FQ" secondAttribute="centerY" id="UkE-Tj-uiE"/>
+                                            <constraint firstItem="1Ho-e8-0Pc" firstAttribute="leading" secondItem="byj-1m-2B9" secondAttribute="trailing" constant="10" id="dj1-fj-ytW"/>
+                                            <constraint firstItem="Je0-i6-g88" firstAttribute="leading" secondItem="HAC-wn-LhQ" secondAttribute="trailing" id="g7g-zq-6dT"/>
+                                            <constraint firstAttribute="bottom" secondItem="byj-1m-2B9" secondAttribute="bottom" id="gfb-Pz-uog"/>
+                                            <constraint firstItem="iKF-Va-qyY" firstAttribute="top" secondItem="1Ho-e8-0Pc" secondAttribute="bottom" constant="5" id="jpY-lB-aeb"/>
+                                            <constraint firstItem="1Ho-e8-0Pc" firstAttribute="top" secondItem="HAC-wn-LhQ" secondAttribute="bottom" constant="5" id="k5D-jt-blX"/>
+                                            <constraint firstItem="ktT-uc-z9L" firstAttribute="bottom" secondItem="KQ9-PL-R6v" secondAttribute="bottom" id="n8d-1C-5j7"/>
+                                            <constraint firstAttribute="bottom" secondItem="dl9-L2-3FQ" secondAttribute="bottom" id="nut-Qe-7cr"/>
+                                            <constraint firstItem="dl9-L2-3FQ" firstAttribute="leading" secondItem="byj-1m-2B9" secondAttribute="trailing" constant="10" id="pnQ-Vj-oNK"/>
+                                            <constraint firstItem="1oJ-Lv-Qza" firstAttribute="centerY" secondItem="1Ho-e8-0Pc" secondAttribute="centerY" id="rbS-d6-RzF"/>
+                                            <constraint firstItem="cJT-o9-iLF" firstAttribute="leading" secondItem="dl9-L2-3FQ" secondAttribute="trailing" id="uYx-TF-Wl1"/>
+                                            <constraint firstItem="KQ9-PL-R6v" firstAttribute="top" secondItem="oki-W5-mXy" secondAttribute="top" id="yAn-c7-NM3"/>
+                                            <constraint firstItem="ktT-uc-z9L" firstAttribute="leading" secondItem="KQ9-PL-R6v" secondAttribute="trailing" constant="2" id="yll-lS-CtH"/>
+                                        </constraints>
+                                    </view>
+                                    <color key="fillColor" red="1" green="1" blue="1" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                                </box>
+                                <box boxType="custom" borderType="none" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="F7y-i9-QLI">
+                                    <rect key="frame" x="215" y="0.0" width="215" height="125"/>
+                                    <view key="contentView" id="uYL-to-P4y">
+                                        <rect key="frame" x="0.0" y="0.0" width="215" height="125"/>
+                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                        <subviews>
+                                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="aUg-4Z-qet">
+                                                <rect key="frame" x="0.0" y="54" width="47" height="55"/>
+                                                <subviews>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="fJU-hq-neG">
+                                                        <rect key="frame" x="-2" y="26" width="51" height="16"/>
+                                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Line" id="AdA-mT-hTP">
+                                                            <font key="font" metaFont="system"/>
+                                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ZpF-SX-sZa">
+                                                        <rect key="frame" x="-2" y="0.0" width="51" height="16"/>
+                                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Column" id="FDa-5a-n9G">
+                                                            <font key="font" metaFont="system"/>
+                                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                </subviews>
+                                                <constraints>
+                                                    <constraint firstAttribute="bottom" secondItem="ZpF-SX-sZa" secondAttribute="bottom" id="6ml-0W-vLV"/>
+                                                    <constraint firstAttribute="trailing" secondItem="fJU-hq-neG" secondAttribute="trailing" id="99r-b9-kyN"/>
+                                                    <constraint firstItem="ZpF-SX-sZa" firstAttribute="top" secondItem="fJU-hq-neG" secondAttribute="bottom" constant="10" id="JeG-Of-sz0"/>
+                                                    <constraint firstItem="fJU-hq-neG" firstAttribute="leading" secondItem="aUg-4Z-qet" secondAttribute="leading" id="JeV-eQ-bGC"/>
+                                                    <constraint firstItem="ZpF-SX-sZa" firstAttribute="leading" secondItem="aUg-4Z-qet" secondAttribute="leading" id="P1x-dH-azR"/>
+                                                    <constraint firstItem="fJU-hq-neG" firstAttribute="top" secondItem="aUg-4Z-qet" secondAttribute="top" constant="13" id="e9m-y7-2bb"/>
+                                                    <constraint firstAttribute="trailing" secondItem="ZpF-SX-sZa" secondAttribute="trailing" id="rAB-A5-SXp"/>
+                                                </constraints>
+                                            </customView>
+                                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="YTv-qj-2Og">
+                                                <rect key="frame" x="-2" y="109" width="76" height="16"/>
+                                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Page Space" id="5s4-HV-D1h">
+                                                    <font key="font" metaFont="system"/>
+                                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                    <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                                </textFieldCell>
+                                            </textField>
+                                            <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yqV-8I-chB">
+                                                <rect key="frame" x="57" y="78" width="60" height="21"/>
+                                                <constraints>
+                                                    <constraint firstAttribute="width" constant="60" id="4u7-pu-RXO"/>
+                                                </constraints>
+                                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" title="30" drawsBackground="YES" id="27h-Vj-NqK">
+                                                    <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>
+                                                    <outlet property="delegate" destination="-2" id="ZSu-qP-wHY"/>
+                                                </connections>
+                                            </textField>
+                                            <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="pjQ-AG-hel">
+                                                <rect key="frame" x="57" y="52" width="60" height="21"/>
+                                                <constraints>
+                                                    <constraint firstAttribute="width" constant="60" id="PVc-IW-3dC"/>
+                                                </constraints>
+                                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" title="30" drawsBackground="YES" id="JwD-Hf-vDe">
+                                                    <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>
+                                                    <outlet property="delegate" destination="-2" id="cV1-Ar-3Ag"/>
+                                                </connections>
+                                            </textField>
+                                            <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XZ0-7z-U3u">
+                                                <rect key="frame" x="114" y="48" width="19" height="28"/>
+                                                <stepperCell key="cell" continuous="YES" alignment="left" increment="0.10000000000000001" maxValue="10000" doubleValue="1" id="d9U-O0-3r8"/>
+                                                <connections>
+                                                    <action selector="stepperItemClick_Distance:" target="-2" id="CSO-xZ-Yiw"/>
+                                                </connections>
+                                            </stepper>
+                                            <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ggc-WO-OSK">
+                                                <rect key="frame" x="114" y="74" width="19" height="28"/>
+                                                <constraints>
+                                                    <constraint firstAttribute="width" constant="13" id="G6d-w7-0nM"/>
+                                                </constraints>
+                                                <stepperCell key="cell" continuous="YES" alignment="left" increment="0.10000000000000001" maxValue="10000" doubleValue="1" id="Ky7-i0-CHc"/>
+                                                <connections>
+                                                    <action selector="stepperItemClick_Distance:" target="-2" id="Uzn-aM-1po"/>
+                                                </connections>
+                                            </stepper>
+                                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="u6f-hh-6wg">
+                                                <rect key="frame" x="72" y="109" width="30" height="13"/>
+                                                <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="(mm)" id="1wN-qL-B3l">
+                                                    <font key="font" metaFont="system" size="10"/>
+                                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                    <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                                </textFieldCell>
+                                            </textField>
+                                        </subviews>
+                                        <constraints>
+                                            <constraint firstItem="pjQ-AG-hel" firstAttribute="leading" secondItem="aUg-4Z-qet" secondAttribute="trailing" constant="10" id="1kB-xg-9LE"/>
+                                            <constraint firstItem="aUg-4Z-qet" firstAttribute="top" secondItem="YTv-qj-2Og" secondAttribute="bottom" id="1y7-oY-jnL"/>
+                                            <constraint firstItem="YTv-qj-2Og" firstAttribute="top" secondItem="uYL-to-P4y" secondAttribute="top" id="3w2-iE-q5v"/>
+                                            <constraint firstItem="YTv-qj-2Og" firstAttribute="leading" secondItem="uYL-to-P4y" secondAttribute="leading" id="6HI-aU-cX5"/>
+                                            <constraint firstItem="yqV-8I-chB" firstAttribute="leading" secondItem="aUg-4Z-qet" secondAttribute="trailing" constant="10" id="7pi-1E-Axz"/>
+                                            <constraint firstItem="u6f-hh-6wg" firstAttribute="leading" secondItem="YTv-qj-2Og" secondAttribute="trailing" constant="2" id="9Zn-Am-fVf"/>
+                                            <constraint firstItem="yqV-8I-chB" firstAttribute="top" secondItem="YTv-qj-2Og" secondAttribute="bottom" constant="10" id="EuC-qz-XhY"/>
+                                            <constraint firstItem="u6f-hh-6wg" firstAttribute="bottom" secondItem="YTv-qj-2Og" secondAttribute="bottom" id="G4L-aU-pof"/>
+                                            <constraint firstItem="ggc-WO-OSK" firstAttribute="centerY" secondItem="yqV-8I-chB" secondAttribute="centerY" id="Hl9-b3-oYO"/>
+                                            <constraint firstItem="XZ0-7z-U3u" firstAttribute="centerY" secondItem="pjQ-AG-hel" secondAttribute="centerY" id="UiF-ZS-FlC"/>
+                                            <constraint firstItem="ggc-WO-OSK" firstAttribute="leading" secondItem="yqV-8I-chB" secondAttribute="trailing" id="XlL-z9-2nX"/>
+                                            <constraint firstItem="pjQ-AG-hel" firstAttribute="top" secondItem="yqV-8I-chB" secondAttribute="bottom" constant="5" id="izP-02-aZA"/>
+                                            <constraint firstItem="XZ0-7z-U3u" firstAttribute="leading" secondItem="pjQ-AG-hel" secondAttribute="trailing" id="mZ6-lq-eAw"/>
+                                            <constraint firstItem="aUg-4Z-qet" firstAttribute="leading" secondItem="uYL-to-P4y" secondAttribute="leading" id="nGf-wc-dgT"/>
+                                        </constraints>
+                                    </view>
+                                    <color key="fillColor" red="1" green="1" blue="1" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                                </box>
+                            </subviews>
+                            <constraints>
+                                <constraint firstAttribute="bottom" secondItem="1Ct-gf-Hm9" secondAttribute="bottom" id="6KI-0O-9bg"/>
+                                <constraint firstItem="1Ct-gf-Hm9" firstAttribute="top" secondItem="g3i-8P-aW4" secondAttribute="top" id="EOO-pE-CQV"/>
+                                <constraint firstItem="F7y-i9-QLI" firstAttribute="width" secondItem="1Ct-gf-Hm9" secondAttribute="width" id="ayK-Oh-Scz"/>
+                                <constraint firstAttribute="bottom" secondItem="F7y-i9-QLI" secondAttribute="bottom" id="bEW-On-cc6"/>
+                                <constraint firstItem="1Ct-gf-Hm9" firstAttribute="leading" secondItem="g3i-8P-aW4" secondAttribute="leading" id="eqM-CO-ubD"/>
+                                <constraint firstItem="F7y-i9-QLI" firstAttribute="top" secondItem="g3i-8P-aW4" secondAttribute="top" id="jfS-nc-qLc"/>
+                                <constraint firstAttribute="trailing" secondItem="F7y-i9-QLI" secondAttribute="trailing" id="nTx-m6-AjK"/>
+                            </constraints>
+                        </view>
+                        <constraints>
+                            <constraint firstItem="1Ct-gf-Hm9" firstAttribute="width" secondItem="RF9-eY-vrQ" secondAttribute="width" multiplier="0.5" id="Lga-ph-QH8"/>
+                        </constraints>
+                    </box>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="RF9-eY-vrQ" firstAttribute="top" secondItem="PcW-yO-eOC" secondAttribute="bottom" constant="20" id="0p1-7L-QUo"/>
+                    <constraint firstItem="exz-x7-Vmf" firstAttribute="leading" secondItem="St5-N4-vJA" secondAttribute="trailing" constant="30" id="2QL-x9-pwf"/>
+                    <constraint firstAttribute="bottom" secondItem="Ewt-vG-5P3" secondAttribute="bottom" constant="50" id="3Px-aA-cWX"/>
+                    <constraint firstItem="Ze9-hy-Cht" firstAttribute="leading" secondItem="exz-x7-Vmf" secondAttribute="trailing" constant="30" id="518-bH-9oC"/>
+                    <constraint firstItem="uH5-MX-szM" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" constant="20" id="5XS-dS-bkK"/>
+                    <constraint firstItem="Ewt-vG-5P3" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" constant="20" id="6R8-Ug-dVo"/>
+                    <constraint firstAttribute="trailing" secondItem="RF9-eY-vrQ" secondAttribute="trailing" constant="20" id="6Vs-zs-fde"/>
+                    <constraint firstItem="RF9-eY-vrQ" firstAttribute="leading" secondItem="Ewt-vG-5P3" secondAttribute="trailing" constant="20" id="BYE-nh-Kva"/>
+                    <constraint firstAttribute="trailing" secondItem="m7h-RU-RMV" secondAttribute="trailing" constant="20" id="DFT-Do-Hre"/>
+                    <constraint firstItem="uH5-MX-szM" firstAttribute="leading" secondItem="WRU-Gd-cWm" secondAttribute="trailing" constant="5" id="GVF-Mq-c1M"/>
+                    <constraint firstItem="c4T-Vi-gH7" firstAttribute="leading" secondItem="Ewt-vG-5P3" secondAttribute="trailing" constant="10" id="GYN-ZL-5Fj"/>
+                    <constraint firstItem="Ewt-vG-5P3" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" constant="20" id="JJN-2n-BXr"/>
+                    <constraint firstItem="m7h-RU-RMV" firstAttribute="leading" secondItem="Ewt-vG-5P3" secondAttribute="trailing" constant="10" id="Ls2-kU-IAQ"/>
+                    <constraint firstAttribute="trailing" secondItem="Ze9-hy-Cht" secondAttribute="trailing" constant="20" id="MTt-D7-n7v"/>
+                    <constraint firstAttribute="trailing" secondItem="PcW-yO-eOC" secondAttribute="trailing" constant="20" id="R2N-8L-Rfa"/>
+                    <constraint firstItem="PcW-yO-eOC" firstAttribute="leading" secondItem="Ewt-vG-5P3" secondAttribute="trailing" constant="10" id="bvr-h6-FkO"/>
+                    <constraint firstItem="N2N-XL-rkY" firstAttribute="leading" secondItem="Ewt-vG-5P3" secondAttribute="trailing" constant="10" id="c7W-S1-nto"/>
+                    <constraint firstAttribute="trailing" secondItem="N2N-XL-rkY" secondAttribute="trailing" constant="20" id="dMX-fc-Sll"/>
+                    <constraint firstItem="N2N-XL-rkY" firstAttribute="top" secondItem="uH5-MX-szM" secondAttribute="bottom" constant="10" id="eHE-rW-VOh"/>
+                    <constraint firstAttribute="trailing" secondItem="c4T-Vi-gH7" secondAttribute="trailing" constant="20" id="hjz-Qc-YJR"/>
+                    <constraint firstItem="WRU-Gd-cWm" firstAttribute="leading" secondItem="Ewt-vG-5P3" secondAttribute="trailing" constant="20" id="hyw-rN-oLy"/>
+                    <constraint firstItem="Ze9-hy-Cht" firstAttribute="centerY" secondItem="exz-x7-Vmf" secondAttribute="centerY" id="rBQ-F1-th3"/>
+                    <constraint firstItem="c4T-Vi-gH7" firstAttribute="top" secondItem="RF9-eY-vrQ" secondAttribute="bottom" constant="20" id="rX6-sI-zC6"/>
+                    <constraint firstItem="exz-x7-Vmf" firstAttribute="centerY" secondItem="St5-N4-vJA" secondAttribute="centerY" id="tdR-1C-PYn"/>
+                    <constraint firstItem="uH5-MX-szM" firstAttribute="centerY" secondItem="WRU-Gd-cWm" secondAttribute="centerY" id="tt1-Fg-sv2"/>
+                    <constraint firstItem="PcW-yO-eOC" firstAttribute="top" secondItem="N2N-XL-rkY" secondAttribute="bottom" constant="20" id="w6R-xS-RL6"/>
+                    <constraint firstAttribute="bottom" secondItem="Ze9-hy-Cht" secondAttribute="bottom" constant="14" id="wlD-61-SYg"/>
+                    <constraint firstItem="m7h-RU-RMV" firstAttribute="top" secondItem="c4T-Vi-gH7" secondAttribute="bottom" constant="20" id="zaY-CO-ae6"/>
+                </constraints>
+            </view>
+            <contentBorderThickness minY="50"/>
+            <connections>
+                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
+            </connections>
+            <point key="canvasLocation" x="139" y="147"/>
+        </window>
+    </objects>
+    <resources>
+        <image name="NSGoLeftTemplate" width="12" height="17"/>
+        <image name="NSGoRightTemplate" width="12" height="17"/>
+    </resources>
+</document>

+ 17 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Poster/KMPDFPosterPrintWindowController.h

@@ -0,0 +1,17 @@
+//
+//  KMPDFPosterPrintWindowController.h
+//  PDF Reader Pro Edition
+//
+//  Created by 丁林圭 on 2018/4/3.
+//
+
+#import <Cocoa/Cocoa.h>
+#import <Quartz/Quartz.h>
+
+@interface KMPDFPosterPrintWindowController : NSWindowController
+
+- (id)initWithPDFDocument:(PDFDocument *)PDFDocument;
+
+- (id)initWithPDFFilePath:(NSString *)filePath password:(nullable NSString *)password;
+
+@end

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1020 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Poster/KMPDFPosterPrintWindowController.m


+ 823 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Poster/KMPDFPosterPrintWindowController.xib

@@ -0,0 +1,823 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMPDFPosterPrintWindowController">
+            <connections>
+                <outlet property="PDFContentView" destination="b4K-Au-nHL" id="roe-Jd-NXl"/>
+                <outlet property="PDFHeight" destination="gnl-U5-YHV" id="ieG-al-WDk"/>
+                <outlet property="PDFWidth" destination="7L3-jN-pwF" id="vke-PY-iAp"/>
+                <outlet property="cancelButton" destination="iTv-gW-jtO" id="eFY-fR-s2D"/>
+                <outlet property="columnCountText" destination="qfH-1Q-2ZF" id="Kd1-wo-sLF"/>
+                <outlet property="commentsFormsComboBox" destination="QaY-dX-NFi" id="Ots-9D-pWa"/>
+                <outlet property="commentsFormsLabel" destination="mgS-pn-BiJ" id="ner-dj-3oH"/>
+                <outlet property="contentHeight" destination="tez-ya-Ctm" id="Ekh-3o-aR8"/>
+                <outlet property="contentWidth" destination="K1l-kS-xzB" id="bQY-pL-UTV"/>
+                <outlet property="currentPageLabel" destination="mMz-ch-QS3" id="JRV-jX-och"/>
+                <outlet property="cutMarksButton" destination="jiy-ZS-Z1Z" id="vk7-RC-Txj"/>
+                <outlet property="filePageSizeBox" destination="GVq-r7-rED" id="aQS-Fj-IsX"/>
+                <outlet property="filePageSizeLabel" destination="2a3-02-MkE" id="YdZ-ac-JNI"/>
+                <outlet property="labelButton" destination="KaB-ia-0dI" id="aMF-hC-tEq"/>
+                <outlet property="labelTextField" destination="32f-q0-s33" id="ygk-6l-yFa"/>
+                <outlet property="landscapeButton" destination="e6t-YE-bc4" id="Fy1-D4-F4o"/>
+                <outlet property="lineCountText" destination="VpC-hz-jaw" id="8aa-fv-qI1"/>
+                <outlet property="orientationLabel" destination="3vR-1f-mvl" id="W9L-yx-Umy"/>
+                <outlet property="overlapLabel" destination="WdI-me-Ue4" id="Vuq-Uk-FTm"/>
+                <outlet property="overlapTextField" destination="hy4-vl-KaT" id="ZYM-ER-CQB"/>
+                <outlet property="overlapUnit" destination="Z9m-Ha-qt8" id="giW-oK-CVy"/>
+                <outlet property="pageHeightTextField" destination="0mp-9M-ml0" id="EwE-Ws-hVk"/>
+                <outlet property="pageRangeComboBox" destination="oPo-df-zMP" id="lG0-U5-0y1"/>
+                <outlet property="pageRangeLabel" destination="hk7-fR-vX3" id="JDC-az-BVV"/>
+                <outlet property="pageWidthTextField" destination="nor-9R-Nym" id="7jd-gu-Ih2"/>
+                <outlet property="pagesPerLabel" destination="3es-Xa-RAe" id="5Cf-aS-SLN"/>
+                <outlet property="paperHeightTextField" destination="plv-pd-ePo" id="5Up-kk-mgM"/>
+                <outlet property="paperWidthTextField" destination="2jS-e8-3Mz" id="BJv-4n-A88"/>
+                <outlet property="portraitButton" destination="VOj-Sl-X8f" id="W3o-LZ-PBE"/>
+                <outlet property="printButton" destination="oP9-4z-ViZ" id="Zqh-qN-kEQ"/>
+                <outlet property="reverseButton" destination="EFh-XS-Npx" id="ncQ-Fc-yo8"/>
+                <outlet property="saveButton" destination="8Wb-YY-jpj" id="XGb-KV-FkJ"/>
+                <outlet property="scaleTextField" destination="TL4-pC-uWn" id="f6h-gB-qhS"/>
+                <outlet property="selectPerComboBox" destination="1vp-sd-47a" id="fGS-wz-MKG"/>
+                <outlet property="sizeLabel" destination="0Sj-W0-0O5" id="srL-i5-q7g"/>
+                <outlet property="splitSizeComboBox" destination="3rw-W2-yJX" id="VgY-sV-vrW"/>
+                <outlet property="splitSizeLabel" destination="GCc-on-SVI" id="SUC-dk-z7f"/>
+                <outlet property="tableView" destination="HRk-mh-HKh" id="Ssd-Cn-bkT"/>
+                <outlet property="thumImageView" destination="9GY-Av-WjP" id="3zN-xL-diA"/>
+                <outlet property="titleScanlLabel" destination="xEr-Ar-H2i" id="Zl0-7R-09M"/>
+                <outlet property="totalPageLabel" destination="X3A-cb-XpV" id="45B-D4-50C"/>
+                <outlet property="unitComboBox" destination="ArH-Ga-Loa" id="iJZ-bp-KSv"/>
+                <outlet property="unitLabel" destination="0fh-aN-5tu" id="n9m-Ss-4O5"/>
+                <outlet property="unitT1Label" destination="pee-zZ-qjd" id="syC-wH-JbL"/>
+                <outlet property="unitTLabel" destination="QVZ-2O-gro" id="8ed-2X-4XL"/>
+                <outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
+                <outlet property="zoomLabel" destination="cu4-qH-6sd" id="nxa-BO-Caw"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Poster" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="F0z-JX-Cv5">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="196" y="218" width="800" height="500"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
+            <view key="contentView" wantsLayer="YES" id="se5-gp-TjO">
+                <rect key="frame" x="0.0" y="0.0" width="800" height="500"/>
+                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                <subviews>
+                    <box boxType="custom" borderType="none" cornerRadius="4" translatesAutoresizingMaskIntoConstraints="NO" id="gVc-k9-yNp">
+                        <rect key="frame" x="10" y="50" width="310" height="430"/>
+                        <view key="contentView" id="rSI-51-lIo">
+                            <rect key="frame" x="0.0" y="0.0" width="310" height="430"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="I0u-Nn-i8I">
+                                    <rect key="frame" x="125" y="10" width="61" height="22"/>
+                                    <subviews>
+                                        <textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="mMz-ch-QS3">
+                                            <rect key="frame" x="0.0" y="0.0" width="40" height="22"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="40" id="CT9-7o-UCe"/>
+                                                <constraint firstAttribute="height" constant="22" id="HQp-J5-oRt"/>
+                                            </constraints>
+                                            <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="center" drawsBackground="YES" id="qbB-oG-deS">
+                                                <numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="rGg-dy-JCJ">
+                                                    <real key="minimum" value="1"/>
+                                                </numberFormatter>
+                                                <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>
+                                                <outlet property="delegate" destination="-2" id="ade-C3-23N"/>
+                                            </connections>
+                                        </textField>
+                                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="X3A-cb-XpV">
+                                            <rect key="frame" x="43" y="3" width="20" height="16"/>
+                                            <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="/ 0" id="RKn-u4-MXr">
+                                                <font key="font" metaFont="system"/>
+                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                            </textFieldCell>
+                                        </textField>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstAttribute="bottom" secondItem="mMz-ch-QS3" secondAttribute="bottom" id="47K-KQ-qf7"/>
+                                        <constraint firstItem="X3A-cb-XpV" firstAttribute="leading" secondItem="mMz-ch-QS3" secondAttribute="trailing" constant="5" id="V1P-22-bDZ"/>
+                                        <constraint firstItem="X3A-cb-XpV" firstAttribute="centerY" secondItem="mMz-ch-QS3" secondAttribute="centerY" id="b4C-q8-sbe"/>
+                                        <constraint firstItem="mMz-ch-QS3" firstAttribute="leading" secondItem="I0u-Nn-i8I" secondAttribute="leading" id="h7s-8L-lme"/>
+                                        <constraint firstItem="mMz-ch-QS3" firstAttribute="top" secondItem="I0u-Nn-i8I" secondAttribute="top" id="nOx-lG-Yet"/>
+                                        <constraint firstAttribute="trailing" secondItem="X3A-cb-XpV" secondAttribute="trailing" id="yZq-HB-q1j"/>
+                                    </constraints>
+                                </customView>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="u0j-iU-iLO">
+                                    <rect key="frame" x="62" y="8" width="26" height="26"/>
+                                    <buttonCell key="cell" type="round" bezelStyle="circular" image="NSGoLeftTemplate" imagePosition="only" borderStyle="border" inset="2" id="Zff-c1-cWJ">
+                                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="buttonItemClick_Previous:" target="-2" id="Hnt-eZ-VE8"/>
+                                    </connections>
+                                </button>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ZJf-SU-rw7">
+                                    <rect key="frame" x="223" y="8" width="26" height="26"/>
+                                    <buttonCell key="cell" type="round" bezelStyle="circular" image="NSGoRightTemplate" imagePosition="only" borderStyle="border" inset="2" id="gT5-Rd-5Ve">
+                                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="buttonItemClick_Next:" target="-2" id="bUd-wx-2ja"/>
+                                    </connections>
+                                </button>
+                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="cu4-qH-6sd">
+                                    <rect key="frame" x="8" y="415" width="294" height="15"/>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" id="UsV-U7-GNU">
+                                        <font key="font" metaFont="cellTitle"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="ocR-La-VNa">
+                                    <rect key="frame" x="0.0" y="41" width="310" height="374"/>
+                                    <subviews>
+                                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0Sj-W0-0O5">
+                                            <rect key="frame" x="104" y="332" width="103" height="13"/>
+                                            <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="23.44mm x25.77mm" id="Ag5-PG-yvm">
+                                                <font key="font" metaFont="system" size="10"/>
+                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                            </textFieldCell>
+                                        </textField>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="b4K-Au-nHL" customClass="KMPDFPosterPrintContentView">
+                                            <rect key="frame" x="0.0" y="27" width="310" height="300"/>
+                                            <subviews>
+                                                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="9GY-Av-WjP">
+                                                    <rect key="frame" x="55" y="50" width="200" height="200"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="width" constant="200" id="7L3-jN-pwF"/>
+                                                        <constraint firstAttribute="height" constant="200" id="gnl-U5-YHV"/>
+                                                    </constraints>
+                                                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="7qD-88-jeR"/>
+                                                </imageView>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="310" id="K1l-kS-xzB"/>
+                                                <constraint firstItem="9GY-Av-WjP" firstAttribute="centerY" secondItem="b4K-Au-nHL" secondAttribute="centerY" id="LYF-Cb-PII"/>
+                                                <constraint firstItem="9GY-Av-WjP" firstAttribute="centerX" secondItem="b4K-Au-nHL" secondAttribute="centerX" id="WX2-BC-3ik"/>
+                                                <constraint firstAttribute="height" constant="300" id="tez-ya-Ctm"/>
+                                            </constraints>
+                                        </customView>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstItem="b4K-Au-nHL" firstAttribute="top" secondItem="0Sj-W0-0O5" secondAttribute="bottom" constant="5" id="9vi-mC-7VR"/>
+                                        <constraint firstItem="0Sj-W0-0O5" firstAttribute="centerX" secondItem="ocR-La-VNa" secondAttribute="centerX" id="aTk-QE-9uP"/>
+                                        <constraint firstAttribute="width" constant="310" id="n6t-Gs-fvG"/>
+                                        <constraint firstItem="b4K-Au-nHL" firstAttribute="centerY" secondItem="ocR-La-VNa" secondAttribute="centerY" constant="10" id="wCd-xU-2Ml"/>
+                                        <constraint firstItem="b4K-Au-nHL" firstAttribute="centerX" secondItem="ocR-La-VNa" secondAttribute="centerX" id="zLc-0b-hOV"/>
+                                    </constraints>
+                                </customView>
+                            </subviews>
+                            <constraints>
+                                <constraint firstAttribute="bottom" secondItem="I0u-Nn-i8I" secondAttribute="bottom" constant="10" id="0tB-9R-MPQ"/>
+                                <constraint firstAttribute="trailing" secondItem="cu4-qH-6sd" secondAttribute="trailing" constant="10" id="5Xj-fo-jrS"/>
+                                <constraint firstAttribute="trailing" secondItem="ocR-La-VNa" secondAttribute="trailing" id="Iwy-nC-R8L"/>
+                                <constraint firstItem="ZJf-SU-rw7" firstAttribute="centerY" secondItem="u0j-iU-iLO" secondAttribute="centerY" id="JHr-my-0je"/>
+                                <constraint firstItem="ocR-La-VNa" firstAttribute="top" secondItem="cu4-qH-6sd" secondAttribute="bottom" id="KEA-ht-Paf"/>
+                                <constraint firstAttribute="trailing" secondItem="ocR-La-VNa" secondAttribute="trailing" id="OJ2-ry-ycT"/>
+                                <constraint firstItem="I0u-Nn-i8I" firstAttribute="leading" secondItem="u0j-iU-iLO" secondAttribute="trailing" constant="40" id="Oxm-aE-fMQ"/>
+                                <constraint firstItem="cu4-qH-6sd" firstAttribute="leading" secondItem="rSI-51-lIo" secondAttribute="leading" constant="10" id="RtW-gW-JkC"/>
+                                <constraint firstItem="I0u-Nn-i8I" firstAttribute="centerX" secondItem="rSI-51-lIo" secondAttribute="centerX" id="dbk-gr-UjC"/>
+                                <constraint firstItem="u0j-iU-iLO" firstAttribute="top" secondItem="ocR-La-VNa" secondAttribute="bottom" constant="10" id="kgw-5q-YGP"/>
+                                <constraint firstItem="I0u-Nn-i8I" firstAttribute="centerY" secondItem="u0j-iU-iLO" secondAttribute="centerY" id="obQ-5K-U61"/>
+                                <constraint firstItem="ZJf-SU-rw7" firstAttribute="leading" secondItem="I0u-Nn-i8I" secondAttribute="trailing" constant="40" id="qIs-7l-9gb"/>
+                                <constraint firstItem="cu4-qH-6sd" firstAttribute="top" secondItem="rSI-51-lIo" secondAttribute="top" id="xNQ-cz-zWu"/>
+                            </constraints>
+                        </view>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="310" id="sLu-5t-wNv"/>
+                        </constraints>
+                        <color key="fillColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94117647059999998" alpha="0.0" colorSpace="calibratedRGB"/>
+                    </box>
+                    <box boxType="custom" borderType="none" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="Yw5-eH-v9g">
+                        <rect key="frame" x="320" y="60" width="470" height="55"/>
+                        <view key="contentView" id="VXu-e9-Lic">
+                            <rect key="frame" x="0.0" y="0.0" width="470" height="55"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hk7-fR-vX3">
+                                    <rect key="frame" x="8" y="39" width="77" height="16"/>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Page Range" id="ivz-y2-Ede">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <comboBox verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="oPo-df-zMP">
+                                    <rect key="frame" x="10" y="6" width="243" height="25"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="240" id="h1V-0y-z5E"/>
+                                    </constraints>
+                                    <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="6nT-Re-OLF">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    </comboBoxCell>
+                                    <connections>
+                                        <action selector="comboBoxItemClick_PageRange:" target="-2" id="ZOV-0B-WpA"/>
+                                    </connections>
+                                </comboBox>
+                            </subviews>
+                            <constraints>
+                                <constraint firstItem="hk7-fR-vX3" firstAttribute="leading" secondItem="VXu-e9-Lic" secondAttribute="leading" constant="10" id="1Og-kK-JlV"/>
+                                <constraint firstItem="hk7-fR-vX3" firstAttribute="top" secondItem="VXu-e9-Lic" secondAttribute="top" id="QSE-T5-3u2"/>
+                                <constraint firstItem="oPo-df-zMP" firstAttribute="leading" secondItem="VXu-e9-Lic" secondAttribute="leading" constant="10" id="czN-qb-xYW"/>
+                                <constraint firstItem="oPo-df-zMP" firstAttribute="top" secondItem="hk7-fR-vX3" secondAttribute="bottom" constant="10" id="sVa-cO-Umu"/>
+                                <constraint firstAttribute="bottom" secondItem="oPo-df-zMP" secondAttribute="bottom" constant="10" id="tmX-eJ-OBk"/>
+                            </constraints>
+                        </view>
+                        <color key="fillColor" red="1" green="1" blue="1" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                    </box>
+                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8Wb-YY-jpj">
+                        <rect key="frame" x="634" y="7" width="64" height="32"/>
+                        <buttonCell key="cell" type="push" title="Save" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="3HO-rq-din">
+                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                        </buttonCell>
+                        <connections>
+                            <action selector="buttonItemClick_Done:" target="-2" id="Q9h-1h-jZg"/>
+                        </connections>
+                    </button>
+                    <box boxType="custom" borderType="none" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="7Bm-Bz-3ub">
+                        <rect key="frame" x="320" y="223" width="470" height="133"/>
+                        <view key="contentView" id="WA6-lH-wg8">
+                            <rect key="frame" x="0.0" y="0.0" width="470" height="133"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="jiy-ZS-Z1Z">
+                                    <rect key="frame" x="8" y="85" width="88" height="18"/>
+                                    <buttonCell key="cell" type="check" title="Cut Marks" bezelStyle="regularSquare" imagePosition="left" inset="2" id="PrY-bl-XGz">
+                                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="buttonItemClick_CutMarks:" target="-2" id="mca-MX-PEy"/>
+                                    </connections>
+                                </button>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="KaB-ia-0dI">
+                                    <rect key="frame" x="8" y="31" width="66" height="18"/>
+                                    <buttonCell key="cell" type="check" title="Labels" bezelStyle="regularSquare" imagePosition="left" inset="2" id="kEu-Pq-oj0">
+                                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="buttonItemClick_Labels:" target="-2" id="BCQ-md-eKG"/>
+                                    </connections>
+                                </button>
+                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mgS-pn-BiJ">
+                                    <rect key="frame" x="8" y="2" width="128" height="16"/>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Comments &amp; Forms:" id="fLc-37-vxN">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="32f-q0-s33">
+                                    <rect key="frame" x="79" y="29" width="340" height="21"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="340" id="kjg-ON-ybs"/>
+                                    </constraints>
+                                    <textFieldCell key="cell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="ebC-zh-YOa">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="EFh-XS-Npx">
+                                    <rect key="frame" x="8" y="59" width="115" height="18"/>
+                                    <buttonCell key="cell" type="check" title="Reverse pages" bezelStyle="regularSquare" imagePosition="left" inset="2" id="GUj-fN-Z8Y">
+                                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="buttonItemClick_ReversePage:" target="-2" id="2wS-9U-TRA"/>
+                                    </connections>
+                                </button>
+                                <comboBox verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="QaY-dX-NFi">
+                                    <rect key="frame" x="139" y="-4" width="243" height="25"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="240" id="NHD-En-ZLX"/>
+                                    </constraints>
+                                    <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="AcK-oT-sri">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    </comboBoxCell>
+                                    <connections>
+                                        <action selector="comboBoxItemClick_CommentsForms:" target="-2" id="PzD-Ey-2gF"/>
+                                    </connections>
+                                </comboBox>
+                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="WdI-me-Ue4">
+                                    <rect key="frame" x="8" y="115" width="55" height="16"/>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Overlap:" id="Gzi-Cq-sJf">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Z9m-Ha-qt8">
+                                    <rect key="frame" x="106" y="115" width="15" height="16"/>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="In" id="e3D-Lk-DsK">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hy4-vl-KaT">
+                                    <rect key="frame" x="66" y="112" width="40" height="21"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="40" id="LwP-EP-DdR"/>
+                                    </constraints>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="KoE-DW-8fk">
+                                        <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>
+                                        <outlet property="delegate" destination="-2" id="Z3G-qL-JUL"/>
+                                    </connections>
+                                </textField>
+                            </subviews>
+                            <constraints>
+                                <constraint firstItem="32f-q0-s33" firstAttribute="centerY" secondItem="KaB-ia-0dI" secondAttribute="centerY" id="3aW-AI-ueN"/>
+                                <constraint firstAttribute="bottom" secondItem="QaY-dX-NFi" secondAttribute="bottom" id="AQp-ic-LcS"/>
+                                <constraint firstItem="32f-q0-s33" firstAttribute="leading" secondItem="KaB-ia-0dI" secondAttribute="trailing" constant="5" id="FFu-RV-TL7"/>
+                                <constraint firstItem="KaB-ia-0dI" firstAttribute="leading" secondItem="jiy-ZS-Z1Z" secondAttribute="leading" id="FaO-Ku-nAb"/>
+                                <constraint firstItem="QaY-dX-NFi" firstAttribute="centerY" secondItem="mgS-pn-BiJ" secondAttribute="centerY" id="HF2-Az-BP1"/>
+                                <constraint firstItem="WdI-me-Ue4" firstAttribute="leading" secondItem="WA6-lH-wg8" secondAttribute="leading" constant="10" id="JNl-hp-Kg4"/>
+                                <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="32f-q0-s33" secondAttribute="trailing" id="PDY-Du-ySi"/>
+                                <constraint firstItem="jiy-ZS-Z1Z" firstAttribute="top" secondItem="hy4-vl-KaT" secondAttribute="bottom" constant="10" id="PH0-XW-ME0"/>
+                                <constraint firstItem="EFh-XS-Npx" firstAttribute="leading" secondItem="jiy-ZS-Z1Z" secondAttribute="leading" id="PM0-L0-fib"/>
+                                <constraint firstItem="QaY-dX-NFi" firstAttribute="top" secondItem="32f-q0-s33" secondAttribute="bottom" constant="10" id="RJt-N6-drj"/>
+                                <constraint firstItem="hy4-vl-KaT" firstAttribute="top" secondItem="WA6-lH-wg8" secondAttribute="top" id="Xkr-6S-edM"/>
+                                <constraint firstItem="EFh-XS-Npx" firstAttribute="top" secondItem="jiy-ZS-Z1Z" secondAttribute="bottom" constant="10" id="Yvq-ab-ZGj"/>
+                                <constraint firstItem="jiy-ZS-Z1Z" firstAttribute="leading" secondItem="WA6-lH-wg8" secondAttribute="leading" constant="10" id="cNp-Sv-gL0"/>
+                                <constraint firstItem="hy4-vl-KaT" firstAttribute="leading" secondItem="WdI-me-Ue4" secondAttribute="trailing" constant="5" id="caF-qG-w42"/>
+                                <constraint firstItem="QaY-dX-NFi" firstAttribute="leading" secondItem="mgS-pn-BiJ" secondAttribute="trailing" constant="5" id="dcG-5z-bR5"/>
+                                <constraint firstItem="Z9m-Ha-qt8" firstAttribute="leading" secondItem="hy4-vl-KaT" secondAttribute="trailing" constant="2" id="puF-d1-baI"/>
+                                <constraint firstItem="hy4-vl-KaT" firstAttribute="centerY" secondItem="WdI-me-Ue4" secondAttribute="centerY" id="ud1-xl-fzi"/>
+                                <constraint firstItem="32f-q0-s33" firstAttribute="top" secondItem="EFh-XS-Npx" secondAttribute="bottom" constant="10" id="unR-ft-MHX"/>
+                                <constraint firstItem="mgS-pn-BiJ" firstAttribute="leading" secondItem="KaB-ia-0dI" secondAttribute="leading" id="vi0-LG-MIj"/>
+                                <constraint firstItem="Z9m-Ha-qt8" firstAttribute="centerY" secondItem="hy4-vl-KaT" secondAttribute="centerY" id="zyD-HK-d2b"/>
+                            </constraints>
+                        </view>
+                    </box>
+                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="iTv-gW-jtO">
+                        <rect key="frame" x="542" y="7" width="76" height="32"/>
+                        <buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="6oj-3W-JeU">
+                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                            <string key="keyEquivalent" base64-UTF8="YES">
+Gw
+</string>
+                        </buttonCell>
+                        <connections>
+                            <action selector="buttonItemClick_Cancel:" target="-2" id="XO9-Hs-zUW"/>
+                        </connections>
+                    </button>
+                    <box boxType="custom" borderType="none" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="C4c-wv-AtM">
+                        <rect key="frame" x="320" y="135" width="470" height="68"/>
+                        <view key="contentView" id="m48-dJ-wIE">
+                            <rect key="frame" x="0.0" y="0.0" width="470" height="68"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3vR-1f-mvl">
+                                    <rect key="frame" x="8" y="52" width="76" height="16"/>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Orientation:" id="Rkf-jq-2n4">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VOj-Sl-X8f">
+                                    <rect key="frame" x="8" y="25" width="72" height="18"/>
+                                    <buttonCell key="cell" type="radio" title="Portrait" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="5R2-GR-z21">
+                                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="buttonItemClick_Orientation:" target="-2" id="T5y-KQ-D0U"/>
+                                    </connections>
+                                </button>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="e6t-YE-bc4">
+                                    <rect key="frame" x="8" y="-1" width="93" height="18"/>
+                                    <buttonCell key="cell" type="radio" title="Landscape" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="EiB-So-IuZ">
+                                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="buttonItemClick_Orientation:" target="-2" id="oMz-cG-CZK"/>
+                                    </connections>
+                                </button>
+                            </subviews>
+                            <constraints>
+                                <constraint firstAttribute="bottom" secondItem="e6t-YE-bc4" secondAttribute="bottom" id="2DJ-7U-ACZ"/>
+                                <constraint firstItem="e6t-YE-bc4" firstAttribute="leading" secondItem="VOj-Sl-X8f" secondAttribute="leading" id="9SJ-e8-o8H"/>
+                                <constraint firstItem="3vR-1f-mvl" firstAttribute="top" secondItem="m48-dJ-wIE" secondAttribute="top" id="MB3-DP-Fgn"/>
+                                <constraint firstItem="e6t-YE-bc4" firstAttribute="top" secondItem="VOj-Sl-X8f" secondAttribute="bottom" constant="10" id="iBb-on-sdh"/>
+                                <constraint firstItem="VOj-Sl-X8f" firstAttribute="top" secondItem="3vR-1f-mvl" secondAttribute="bottom" constant="10" id="oZP-ba-ecp"/>
+                                <constraint firstItem="3vR-1f-mvl" firstAttribute="leading" secondItem="m48-dJ-wIE" secondAttribute="leading" constant="10" id="ovd-6I-f5g"/>
+                                <constraint firstItem="VOj-Sl-X8f" firstAttribute="leading" secondItem="m48-dJ-wIE" secondAttribute="leading" constant="10" id="q0M-Fy-HOD"/>
+                            </constraints>
+                        </view>
+                    </box>
+                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="oP9-4z-ViZ">
+                        <rect key="frame" x="714" y="7" width="63" height="32"/>
+                        <buttonCell key="cell" type="push" title="Print" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="bCH-CK-0Qz">
+                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                            <string key="keyEquivalent" base64-UTF8="YES">
+DQ
+</string>
+                        </buttonCell>
+                        <connections>
+                            <action selector="buttonItemClick_Print:" target="-2" id="M1J-Og-6en"/>
+                        </connections>
+                    </button>
+                    <tabView translatesAutoresizingMaskIntoConstraints="NO" id="HRk-mh-HKh">
+                        <rect key="frame" x="323" y="356" width="474" height="101"/>
+                        <font key="font" metaFont="system"/>
+                        <tabViewItems>
+                            <tabViewItem label="Tile" identifier="1" id="261-ln-ILN">
+                                <view key="view" id="Mnd-ax-Ruk">
+                                    <rect key="frame" x="10" y="33" width="454" height="55"/>
+                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                    <subviews>
+                                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="GCc-on-SVI">
+                                            <rect key="frame" x="-2" y="33" width="74" height="16"/>
+                                            <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Page Size:" id="gi1-SK-R9H">
+                                                <font key="font" metaFont="system"/>
+                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                            </textFieldCell>
+                                        </textField>
+                                        <comboBox verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3rw-W2-yJX">
+                                            <rect key="frame" x="75" y="27" width="143" height="25"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="140" id="Lbq-dW-PXh"/>
+                                            </constraints>
+                                            <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="ryd-ZB-KXK">
+                                                <font key="font" metaFont="system"/>
+                                                <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                            </comboBoxCell>
+                                            <connections>
+                                                <action selector="comboBoxItemClick_SplitSize:" target="-2" id="KRg-cT-1EJ"/>
+                                            </connections>
+                                        </comboBox>
+                                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="xEr-Ar-H2i">
+                                            <rect key="frame" x="-2" y="3" width="67" height="16"/>
+                                            <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Tile Scale:" id="vAU-aj-KUH">
+                                                <font key="font" metaFont="system"/>
+                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                            </textFieldCell>
+                                        </textField>
+                                        <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="TL4-pC-uWn">
+                                            <rect key="frame" x="68" y="0.0" width="80" height="22"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="80" id="EVD-0l-uRQ"/>
+                                            </constraints>
+                                            <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="skD-Lk-W0P">
+                                                <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>
+                                                <outlet property="delegate" destination="-2" id="cFC-gj-1FU"/>
+                                            </connections>
+                                        </textField>
+                                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="muc-Hc-vyh">
+                                            <rect key="frame" x="148" y="3" width="16" height="16"/>
+                                            <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="%" id="UgQ-sJ-wsP">
+                                                <font key="font" metaFont="system"/>
+                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                            </textFieldCell>
+                                        </textField>
+                                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="oRr-1j-UqY">
+                                            <rect key="frame" x="288" y="34" width="11" height="16"/>
+                                            <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="x" id="kB5-sN-4Zt">
+                                                <font key="font" metaFont="system"/>
+                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                            </textFieldCell>
+                                        </textField>
+                                        <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nor-9R-Nym">
+                                            <rect key="frame" x="235" y="30" width="50" height="22"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="50" id="cNw-AE-nBx"/>
+                                                <constraint firstAttribute="height" constant="22" id="jDA-FV-Yru"/>
+                                            </constraints>
+                                            <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="center" drawsBackground="YES" id="Fsy-a1-Akf">
+                                                <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>
+                                                <outlet property="delegate" destination="-2" id="2PK-gR-s5v"/>
+                                            </connections>
+                                        </textField>
+                                        <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0mp-9M-ml0">
+                                            <rect key="frame" x="302" y="30" width="50" height="22"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="50" id="VgJ-6u-bEl"/>
+                                                <constraint firstAttribute="height" constant="22" id="up7-z8-BDc"/>
+                                            </constraints>
+                                            <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="center" drawsBackground="YES" id="H9z-di-GIc">
+                                                <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>
+                                                <outlet property="delegate" destination="-2" id="CVW-qT-hyq"/>
+                                            </connections>
+                                        </textField>
+                                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="QVZ-2O-gro">
+                                            <rect key="frame" x="352" y="33" width="27" height="16"/>
+                                            <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="mm" id="W7t-Gf-u3Y">
+                                                <font key="font" metaFont="system"/>
+                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                            </textFieldCell>
+                                        </textField>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstItem="muc-Hc-vyh" firstAttribute="centerY" secondItem="TL4-pC-uWn" secondAttribute="centerY" id="1Tz-yX-U8d"/>
+                                        <constraint firstItem="QVZ-2O-gro" firstAttribute="centerY" secondItem="nor-9R-Nym" secondAttribute="centerY" id="9Sj-Rw-pv5"/>
+                                        <constraint firstItem="nor-9R-Nym" firstAttribute="leading" secondItem="3rw-W2-yJX" secondAttribute="trailing" constant="20" id="AGQ-dZ-DWJ"/>
+                                        <constraint firstItem="oRr-1j-UqY" firstAttribute="baseline" secondItem="nor-9R-Nym" secondAttribute="firstBaseline" id="K8D-SH-XrB"/>
+                                        <constraint firstItem="3rw-W2-yJX" firstAttribute="leading" secondItem="GCc-on-SVI" secondAttribute="trailing" constant="5" id="Ne3-B8-4cY"/>
+                                        <constraint firstItem="QVZ-2O-gro" firstAttribute="leading" secondItem="0mp-9M-ml0" secondAttribute="trailing" constant="2" id="QWy-xr-Qb4"/>
+                                        <constraint firstItem="TL4-pC-uWn" firstAttribute="top" secondItem="3rw-W2-yJX" secondAttribute="bottom" constant="9" id="US8-gd-3a7"/>
+                                        <constraint firstItem="oRr-1j-UqY" firstAttribute="leading" secondItem="nor-9R-Nym" secondAttribute="trailing" constant="5" id="W7p-Lx-MC1"/>
+                                        <constraint firstAttribute="bottom" secondItem="oRr-1j-UqY" secondAttribute="bottom" constant="34" id="X7v-NB-jct"/>
+                                        <constraint firstItem="TL4-pC-uWn" firstAttribute="leading" secondItem="xEr-Ar-H2i" secondAttribute="trailing" constant="5" id="ePj-YG-cVc"/>
+                                        <constraint firstItem="TL4-pC-uWn" firstAttribute="centerY" secondItem="xEr-Ar-H2i" secondAttribute="centerY" id="enu-zF-b3H"/>
+                                        <constraint firstItem="muc-Hc-vyh" firstAttribute="leading" secondItem="TL4-pC-uWn" secondAttribute="trailing" constant="2" id="fN5-p0-zRu"/>
+                                        <constraint firstItem="GCc-on-SVI" firstAttribute="leading" secondItem="Mnd-ax-Ruk" secondAttribute="leading" id="gJg-7S-Gut"/>
+                                        <constraint firstItem="3rw-W2-yJX" firstAttribute="centerY" secondItem="GCc-on-SVI" secondAttribute="centerY" id="kkA-aD-Spz"/>
+                                        <constraint firstItem="3rw-W2-yJX" firstAttribute="top" secondItem="Mnd-ax-Ruk" secondAttribute="top" constant="5" id="lxw-dm-aaT"/>
+                                        <constraint firstItem="xEr-Ar-H2i" firstAttribute="leading" secondItem="Mnd-ax-Ruk" secondAttribute="leading" id="mPo-Ku-8yu"/>
+                                        <constraint firstItem="0mp-9M-ml0" firstAttribute="centerY" secondItem="nor-9R-Nym" secondAttribute="centerY" id="oF8-a7-eDy"/>
+                                        <constraint firstItem="0mp-9M-ml0" firstAttribute="leading" secondItem="oRr-1j-UqY" secondAttribute="trailing" constant="5" id="okb-qH-7bZ"/>
+                                        <constraint firstAttribute="bottom" secondItem="TL4-pC-uWn" secondAttribute="bottom" id="q7d-5C-Tjh"/>
+                                        <constraint firstItem="oRr-1j-UqY" firstAttribute="firstBaseline" secondItem="nor-9R-Nym" secondAttribute="firstBaseline" id="wzm-aI-Ttv"/>
+                                        <constraint firstItem="nor-9R-Nym" firstAttribute="centerY" secondItem="3rw-W2-yJX" secondAttribute="centerY" id="zuX-fd-R1y"/>
+                                    </constraints>
+                                </view>
+                            </tabViewItem>
+                            <tabViewItem label="Split" identifier="2" id="DxU-F3-Na2">
+                                <view key="view" id="6o8-Xk-AVj">
+                                    <rect key="frame" x="10" y="33" width="454" height="55"/>
+                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                    <subviews>
+                                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="HyK-0D-gHB">
+                                            <rect key="frame" x="237" y="3" width="11" height="16"/>
+                                            <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="x" id="gyQ-VW-OVv">
+                                                <font key="font" metaFont="system"/>
+                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                            </textFieldCell>
+                                        </textField>
+                                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2a3-02-MkE">
+                                            <rect key="frame" x="-2" y="33" width="145" height="16"/>
+                                            <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Destination paper Size:" id="6Zj-6w-akB">
+                                                <font key="font" metaFont="system"/>
+                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                            </textFieldCell>
+                                        </textField>
+                                        <comboBox verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="GVq-r7-rED">
+                                            <rect key="frame" x="146" y="27" width="143" height="25"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="140" id="d3V-qw-cZw"/>
+                                            </constraints>
+                                            <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="iJj-7w-yXl">
+                                                <font key="font" metaFont="system"/>
+                                                <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                            </comboBoxCell>
+                                            <connections>
+                                                <action selector="comboBoxItemClick_fullPageSize:" target="-2" id="Ad6-F2-tj8"/>
+                                            </connections>
+                                        </comboBox>
+                                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3es-Xa-RAe">
+                                            <rect key="frame" x="-2" y="3" width="106" height="16"/>
+                                            <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Pages per sheet:" id="Fuh-mH-iDi">
+                                                <font key="font" metaFont="system"/>
+                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                            </textFieldCell>
+                                        </textField>
+                                        <comboBox verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1vp-sd-47a">
+                                            <rect key="frame" x="107" y="-3" width="83" height="25"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="80" id="BAG-Sc-t68"/>
+                                            </constraints>
+                                            <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="iKb-ak-VCa">
+                                                <font key="font" metaFont="system"/>
+                                                <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                            </comboBoxCell>
+                                            <connections>
+                                                <action selector="comboBoxItemClick_PagesPer:" target="-2" id="gds-vw-9wO"/>
+                                            </connections>
+                                        </comboBox>
+                                        <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VpC-hz-jaw">
+                                            <rect key="frame" x="207" y="0.0" width="30" height="21"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="30" id="Bpy-TP-nhH"/>
+                                            </constraints>
+                                            <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="center" drawsBackground="YES" id="sVn-ds-eVo">
+                                                <numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="kWQ-3H-awg">
+                                                    <real key="minimum" value="1"/>
+                                                    <real key="maximum" value="99"/>
+                                                </numberFormatter>
+                                                <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>
+                                                <outlet property="delegate" destination="-2" id="C9T-J5-qAQ"/>
+                                            </connections>
+                                        </textField>
+                                        <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="qfH-1Q-2ZF">
+                                            <rect key="frame" x="248" y="0.0" width="30" height="21"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="30" id="cvh-59-LNa"/>
+                                            </constraints>
+                                            <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="center" drawsBackground="YES" id="zcW-HO-Tcw">
+                                                <numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" groupingSize="0" minimumIntegerDigits="0" maximumIntegerDigits="42" id="A8Y-fh-e5K">
+                                                    <real key="minimum" value="1"/>
+                                                    <real key="maximum" value="99"/>
+                                                </numberFormatter>
+                                                <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>
+                                                <outlet property="delegate" destination="-2" id="z6g-zY-doY"/>
+                                            </connections>
+                                        </textField>
+                                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VMo-Rt-K2k">
+                                            <rect key="frame" x="359" y="34" width="11" height="16"/>
+                                            <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="x" id="iwG-Vx-LGe">
+                                                <font key="font" metaFont="system"/>
+                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                            </textFieldCell>
+                                        </textField>
+                                        <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2jS-e8-3Mz">
+                                            <rect key="frame" x="306" y="30" width="50" height="22"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="50" id="R2q-U0-t15"/>
+                                                <constraint firstAttribute="height" constant="22" id="Rke-iq-QfH"/>
+                                            </constraints>
+                                            <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="center" drawsBackground="YES" id="Htu-4T-Ct2">
+                                                <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>
+                                                <outlet property="delegate" destination="-2" id="Dkd-tu-cjU"/>
+                                            </connections>
+                                        </textField>
+                                        <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="plv-pd-ePo">
+                                            <rect key="frame" x="373" y="30" width="50" height="22"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="50" id="H1H-cn-UHh"/>
+                                                <constraint firstAttribute="height" constant="22" id="hdi-gH-do7"/>
+                                            </constraints>
+                                            <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="center" drawsBackground="YES" id="B2g-61-xoK">
+                                                <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>
+                                                <outlet property="delegate" destination="-2" id="xUS-Jb-nsx"/>
+                                            </connections>
+                                        </textField>
+                                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="pee-zZ-qjd">
+                                            <rect key="frame" x="423" y="33" width="27" height="16"/>
+                                            <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="mm" id="8t6-MR-idt">
+                                                <font key="font" metaFont="system"/>
+                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                            </textFieldCell>
+                                        </textField>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstItem="HyK-0D-gHB" firstAttribute="leading" secondItem="VpC-hz-jaw" secondAttribute="trailing" constant="2" id="3FD-av-DtG"/>
+                                        <constraint firstItem="HyK-0D-gHB" firstAttribute="centerY" secondItem="3es-Xa-RAe" secondAttribute="centerY" id="3T5-Yd-9XF"/>
+                                        <constraint firstItem="qfH-1Q-2ZF" firstAttribute="leading" secondItem="HyK-0D-gHB" secondAttribute="trailing" constant="2" id="6Qc-80-BGQ"/>
+                                        <constraint firstItem="VpC-hz-jaw" firstAttribute="leading" secondItem="1vp-sd-47a" secondAttribute="trailing" constant="20" id="8vt-Yl-ykQ"/>
+                                        <constraint firstItem="VMo-Rt-K2k" firstAttribute="baseline" secondItem="2jS-e8-3Mz" secondAttribute="firstBaseline" id="9HG-s0-Xe3"/>
+                                        <constraint firstItem="GVq-r7-rED" firstAttribute="leading" secondItem="2a3-02-MkE" secondAttribute="trailing" constant="5" id="9Ze-v0-cTN"/>
+                                        <constraint firstItem="VMo-Rt-K2k" firstAttribute="firstBaseline" secondItem="2jS-e8-3Mz" secondAttribute="firstBaseline" id="AyZ-oz-zCd"/>
+                                        <constraint firstItem="pee-zZ-qjd" firstAttribute="centerY" secondItem="2jS-e8-3Mz" secondAttribute="centerY" id="B9x-iw-0hF"/>
+                                        <constraint firstItem="2jS-e8-3Mz" firstAttribute="leading" secondItem="GVq-r7-rED" secondAttribute="trailing" constant="20" id="Bfe-AJ-MJD"/>
+                                        <constraint firstAttribute="bottom" secondItem="VpC-hz-jaw" secondAttribute="bottom" id="FlU-Tk-La1"/>
+                                        <constraint firstItem="1vp-sd-47a" firstAttribute="leading" secondItem="3es-Xa-RAe" secondAttribute="trailing" constant="5" id="IaH-cj-SyZ"/>
+                                        <constraint firstItem="2a3-02-MkE" firstAttribute="leading" secondItem="6o8-Xk-AVj" secondAttribute="leading" id="Rei-Fa-xpm"/>
+                                        <constraint firstItem="plv-pd-ePo" firstAttribute="centerY" secondItem="2jS-e8-3Mz" secondAttribute="centerY" id="XQJ-b4-iGn"/>
+                                        <constraint firstItem="GVq-r7-rED" firstAttribute="centerY" secondItem="2a3-02-MkE" secondAttribute="centerY" id="adm-Jx-AXh"/>
+                                        <constraint firstItem="VpC-hz-jaw" firstAttribute="top" secondItem="GVq-r7-rED" secondAttribute="bottom" constant="10" id="hgg-Lk-EfM"/>
+                                        <constraint firstItem="3es-Xa-RAe" firstAttribute="leading" secondItem="6o8-Xk-AVj" secondAttribute="leading" id="jTe-Aa-utX"/>
+                                        <constraint firstItem="1vp-sd-47a" firstAttribute="centerY" secondItem="3es-Xa-RAe" secondAttribute="centerY" id="jeG-6E-hcH"/>
+                                        <constraint firstItem="GVq-r7-rED" firstAttribute="top" secondItem="6o8-Xk-AVj" secondAttribute="top" constant="5" id="l3j-6X-dUe"/>
+                                        <constraint firstItem="qfH-1Q-2ZF" firstAttribute="centerY" secondItem="3es-Xa-RAe" secondAttribute="centerY" id="mmy-gG-3zw"/>
+                                        <constraint firstItem="VMo-Rt-K2k" firstAttribute="leading" secondItem="2jS-e8-3Mz" secondAttribute="trailing" constant="5" id="oSa-DP-vys"/>
+                                        <constraint firstItem="VpC-hz-jaw" firstAttribute="centerY" secondItem="3es-Xa-RAe" secondAttribute="centerY" id="sJk-0S-jqb"/>
+                                        <constraint firstItem="pee-zZ-qjd" firstAttribute="leading" secondItem="plv-pd-ePo" secondAttribute="trailing" constant="2" id="xSB-qQ-N1e"/>
+                                        <constraint firstItem="plv-pd-ePo" firstAttribute="leading" secondItem="VMo-Rt-K2k" secondAttribute="trailing" constant="5" id="yR1-Aw-aaM"/>
+                                        <constraint firstItem="2jS-e8-3Mz" firstAttribute="centerY" secondItem="GVq-r7-rED" secondAttribute="centerY" id="yj6-dV-6ce"/>
+                                    </constraints>
+                                </view>
+                            </tabViewItem>
+                        </tabViewItems>
+                        <connections>
+                            <outlet property="delegate" destination="-2" id="OXT-pX-7bn"/>
+                        </connections>
+                    </tabView>
+                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0fh-aN-5tu">
+                        <rect key="frame" x="704" y="463" width="33" height="16"/>
+                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Unit:" id="gzy-Ll-Euj">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <comboBox verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ArH-Ga-Loa">
+                        <rect key="frame" x="740" y="457" width="53" height="25"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="50" id="DPf-Xr-b4S"/>
+                        </constraints>
+                        <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="NWU-GJ-df6">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                            <objectValues>
+                                <string>cm</string>
+                                <string>mm</string>
+                                <string>in</string>
+                            </objectValues>
+                        </comboBoxCell>
+                        <connections>
+                            <action selector="comboBoxItemClick_Unit:" target="-2" id="lSz-Nn-Auj"/>
+                        </connections>
+                    </comboBox>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="HRk-mh-HKh" firstAttribute="top" secondItem="ArH-Ga-Loa" secondAttribute="bottom" constant="10" id="0lG-qH-kHf"/>
+                    <constraint firstItem="oP9-4z-ViZ" firstAttribute="centerY" secondItem="8Wb-YY-jpj" secondAttribute="centerY" id="6Pl-lB-Ubb"/>
+                    <constraint firstItem="ArH-Ga-Loa" firstAttribute="leading" secondItem="0fh-aN-5tu" secondAttribute="trailing" constant="5" id="7k7-ug-Kop"/>
+                    <constraint firstItem="Yw5-eH-v9g" firstAttribute="leading" secondItem="7Bm-Bz-3ub" secondAttribute="leading" id="AM2-Tq-nLJ"/>
+                    <constraint firstItem="Yw5-eH-v9g" firstAttribute="trailing" secondItem="7Bm-Bz-3ub" secondAttribute="trailing" id="Cc6-I0-wdS"/>
+                    <constraint firstItem="7Bm-Bz-3ub" firstAttribute="leading" secondItem="gVc-k9-yNp" secondAttribute="trailing" id="Cdo-dH-MPH"/>
+                    <constraint firstAttribute="trailing" secondItem="ArH-Ga-Loa" secondAttribute="trailing" constant="10" id="IpF-tJ-fFa"/>
+                    <constraint firstItem="8Wb-YY-jpj" firstAttribute="centerY" secondItem="iTv-gW-jtO" secondAttribute="centerY" id="N8W-5v-HW1"/>
+                    <constraint firstAttribute="bottom" secondItem="gVc-k9-yNp" secondAttribute="bottom" constant="50" id="OwA-y4-cTV"/>
+                    <constraint firstAttribute="trailing" secondItem="HRk-mh-HKh" secondAttribute="trailing" constant="10" id="R2h-n7-ESS"/>
+                    <constraint firstItem="C4c-wv-AtM" firstAttribute="trailing" secondItem="7Bm-Bz-3ub" secondAttribute="trailing" id="Rcd-BF-bQ9"/>
+                    <constraint firstAttribute="trailing" secondItem="oP9-4z-ViZ" secondAttribute="trailing" constant="30" id="W96-Oo-hHm"/>
+                    <constraint firstItem="gVc-k9-yNp" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" constant="10" id="YfZ-j6-7QV"/>
+                    <constraint firstItem="Yw5-eH-v9g" firstAttribute="top" secondItem="C4c-wv-AtM" secondAttribute="bottom" constant="20" id="Znm-5U-ehr"/>
+                    <constraint firstItem="gVc-k9-yNp" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" constant="20" id="cqg-72-5Ot"/>
+                    <constraint firstItem="ArH-Ga-Loa" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" constant="20" id="fMI-TY-Zkn"/>
+                    <constraint firstItem="8Wb-YY-jpj" firstAttribute="leading" secondItem="iTv-gW-jtO" secondAttribute="trailing" constant="30" id="gy1-7T-myR"/>
+                    <constraint firstItem="7Bm-Bz-3ub" firstAttribute="top" secondItem="HRk-mh-HKh" secondAttribute="bottom" constant="10" id="ibc-MJ-8I5"/>
+                    <constraint firstAttribute="bottom" secondItem="8Wb-YY-jpj" secondAttribute="bottom" constant="14" id="jLV-VT-c45"/>
+                    <constraint firstItem="oP9-4z-ViZ" firstAttribute="leading" secondItem="8Wb-YY-jpj" secondAttribute="trailing" constant="30" id="mIv-gM-vUY"/>
+                    <constraint firstItem="HRk-mh-HKh" firstAttribute="leading" secondItem="gVc-k9-yNp" secondAttribute="trailing" constant="10" id="pxB-Iv-3qB"/>
+                    <constraint firstItem="ArH-Ga-Loa" firstAttribute="centerY" secondItem="0fh-aN-5tu" secondAttribute="centerY" id="qc9-Df-zu6"/>
+                    <constraint firstItem="C4c-wv-AtM" firstAttribute="top" secondItem="7Bm-Bz-3ub" secondAttribute="bottom" constant="20" id="rf8-8M-oZA"/>
+                    <constraint firstAttribute="trailing" secondItem="7Bm-Bz-3ub" secondAttribute="trailing" constant="10" id="xzB-sb-OKg"/>
+                    <constraint firstItem="C4c-wv-AtM" firstAttribute="leading" secondItem="7Bm-Bz-3ub" secondAttribute="leading" id="yL9-VT-RFi"/>
+                </constraints>
+            </view>
+            <contentBorderThickness minY="50"/>
+            <connections>
+                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
+            </connections>
+            <point key="canvasLocation" x="151" y="206"/>
+        </window>
+    </objects>
+    <resources>
+        <image name="NSGoLeftTemplate" width="10" height="14"/>
+        <image name="NSGoRightTemplate" width="10" height="14"/>
+    </resources>
+</document>

+ 78 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Poster/KMPosterPrintManager.h

@@ -0,0 +1,78 @@
+//
+//  KMPosterPrintManager.h
+//  PDF Reader Pro Edition
+//
+//  Created by 丁林圭 on 2018/4/3.
+//
+
+#import <Cocoa/Cocoa.h>
+#import <Quartz/Quartz.h>
+
+typedef NS_OPTIONS(NSUInteger, kKMPDFPosterPrintDirection) {
+    kKMPDFPosterPrintDirection_Portrait   = 0 ,
+    kKMPDFPosterPrintDirection_Landscape,
+};
+
+
+typedef NS_OPTIONS(NSUInteger, kKMPDFPosterCommentsForms) {
+    kKMPDFPosterCommentsForms_Documents  =0,
+    kKMPDFPosterCommentsForms_DocumentMarkups ,
+    kKMPDFPosterCommentsForms_DocumentStamps,
+};
+
+typedef NS_OPTIONS(NSUInteger, kKMPDFPosterSplitType) {
+    kKMPDFPosterSplitType_PageSize  =0,
+    kKMPDFPosterSplitType_PageNumber,
+};
+
+@interface KMPDFPosterPrint : NSObject
+
+@property (nonatomic, assign) kKMPDFPosterPrintDirection direction;
+
+@property (nonatomic, assign) CGFloat scale;
+
+@property (nonatomic, assign) CGFloat overlap;
+
+@property (nonatomic, assign) BOOL isLabel;
+
+@property (nonatomic, assign) BOOL isCut;
+
+@property (nonatomic,assign) BOOL isReversePage;
+
+@property (nonatomic, retain) NSArray * cropPages;
+
+@property (nonatomic, retain) NSString * labelString;
+
+@property (nonatomic, assign) CGSize splitSize;//选择裁剪大小
+
+@property (nonatomic, assign) NSEdgeInsets edgeInsets;//裁剪区域周边大小
+
+@property (nonatomic, assign) kKMPDFPosterCommentsForms commentsForms;
+
+@property (nonatomic, assign) kKMPDFPosterSplitType splitType;
+
+@property (nonatomic, assign) CGSize fullPageSize;//纸张大小
+
+@property (nonatomic, assign) NSEdgeInsets fullPageEdgeInsets;
+
+@property (nonatomic, assign) BOOL isOriginalPageSize;
+
+@property (nonatomic, assign) NSInteger lineCount; //行个数
+
+@property (nonatomic, assign) NSInteger columnCount; //列个数
+
+@end
+
+
+
+@interface KMPosterPrintManager : NSObject
+
+typedef void(^postPrintCallback)(NSArray *horizontals,NSArray *verticals);
+
++ (KMPosterPrintManager *)defaultManager;
+
+- (void)savePath:(NSString *)path posterPrint:(KMPDFPosterPrint *)print completionHandler:(void (^)(BOOL success))complet;
+
+- (void)posterPrintPage:(PDFPage *)page posterPrint:(KMPDFPosterPrint *)properties completionHandler:(postPrintCallback)handler;
+
+@end

+ 650 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/Poster/KMPosterPrintManager.m

@@ -0,0 +1,650 @@
+//
+//  KMPosterPrintManager.m
+//  PDF Reader Pro Edition
+//
+//  Created by 丁林圭 on 2018/4/3.
+//
+
+#import "KMPosterPrintManager.h"
+
+#pragma mark - KMPDFPosterPrint
+
+@implementation KMPDFPosterPrint
+
+- (void)dealloc {
+
+}
+
+- (id)copyWithZone:(NSZone *)zone
+{
+    KMPDFPosterPrint *print = [[[self class] allocWithZone:zone] init];
+    print.isLabel = self.isLabel;
+    print.isCut = self.isLabel;
+    print.direction = self.direction;
+    print.cropPages = self.cropPages;
+    print.scale = self.scale;
+    print.overlap = self.overlap;
+    return print;
+}
+
+@end
+
+@interface KMPosterPrintManager()
+
+@property (nonatomic,retain) KMPDFPosterPrint * PDFPrint;
+
+@property (nonatomic,retain) NSArray * hourArray;
+
+@property (nonatomic,retain) NSArray * vertArray;
+
+@property (nonatomic,retain) NSString * filePath;
+
+@property (assign) NSUInteger lineIndex;//记录水平第几行
+
+@property (assign) NSUInteger columnIndex;//记录竖直第几列
+
+@property (assign) CGRect currentPageRect;
+
+@end
+
+@implementation KMPosterPrintManager
+
+-(void)dealloc
+{
+
+}
+
+#pragma mark - Private method
+-(void)splitPage:(PDFPage *)page rect:(CGRect)newRect toContext:(CGContextRef)pdfContext
+{
+    PDFPage * newPage = page.copy;
+    NSMutableArray *annotations = [NSMutableArray array];
+    for (PDFAnnotation *annotation in newPage.annotations) {
+        [annotations addObject:annotation];
+    }
+    
+    if (kKMPDFPosterCommentsForms_Documents == _PDFPrint.commentsForms) {
+        for (PDFAnnotation *annotation in annotations) {
+            [annotation.page removeAnnotation:annotation];
+        }
+    } else if (kKMPDFPosterCommentsForms_DocumentStamps == _PDFPrint.commentsForms) {
+        for (PDFAnnotation *annotation in annotations) {
+            if (![annotation isKindOfClass:[PDFAnnotationStamp class]]) {
+                [annotation.page removeAnnotation:annotation];
+            }
+        }
+    }
+    
+    [newPage setBounds:newRect forBox:kPDFDisplayBoxCropBox];
+    
+    [self drawPDFPage:newPage cropRect:newRect toContext:pdfContext];
+}
+
+//将裁剪到的页面补到A4纸面上去
+-(void)drawPDFPage:(PDFPage *)page cropRect:(CGRect )cropRect toContext:(CGContextRef)context;
+{
+    CGRect mediaBox = CGRectZero;
+    
+    CGFloat KBlankA4W =0;
+    CGFloat KBlankA4H =0;
+    if (self.PDFPrint.splitType == kKMPDFPosterSplitType_PageNumber) {
+        if (self.PDFPrint.isOriginalPageSize) {
+            if (page.rotation == 90 || page.rotation == 270) {
+                KBlankA4W = cropRect.size.height;
+                KBlankA4H = cropRect.size.width;
+            } else {
+                KBlankA4W = cropRect.size.width;
+                KBlankA4H = cropRect.size.height;
+            }
+        } else {
+            if(kKMPDFPosterPrintDirection_Portrait == self.PDFPrint.direction){
+                KBlankA4W = self.PDFPrint.fullPageSize.width;
+                KBlankA4H = self.PDFPrint.fullPageSize.height;
+            } else {
+                KBlankA4W = self.PDFPrint.fullPageSize.height;
+                KBlankA4H = self.PDFPrint.fullPageSize.width;
+            }
+        }
+    } else {
+        if(kKMPDFPosterPrintDirection_Portrait == self.PDFPrint.direction){
+            KBlankA4W = self.PDFPrint.splitSize.width;
+            KBlankA4H = self.PDFPrint.splitSize.height;
+        } else {
+            KBlankA4W = self.PDFPrint.splitSize.height;
+            KBlankA4H = self.PDFPrint.splitSize.width;
+        }
+    }
+    
+    mediaBox = CGRectMake(0, 0, KBlankA4W, KBlankA4H);
+    
+    CGContextBeginPage(context, &mediaBox);
+    [NSGraphicsContext saveGraphicsState];
+    [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithGraphicsPort:context flipped:NO]];
+    
+    if (self.PDFPrint.isCut) {
+        [self drawCutMarkContext:context contextSize:CGSizeMake(KBlankA4W, KBlankA4H)];
+    }
+    
+    if (self.PDFPrint.isLabel){
+        [self drawLabelTextContextSize:CGSizeMake(KBlankA4W, KBlankA4H)];
+    }
+    
+    NSInteger rotate = page.rotation;
+    
+    CGFloat PDFWidth = cropRect.size.width;
+    CGFloat PDFHeight = cropRect.size.height;
+    
+    if (90 == rotate || 270 == rotate) {
+        PDFWidth = cropRect.size.height;
+        PDFHeight = cropRect.size.width;
+    }
+    CGFloat scanl = self.PDFPrint.scale;
+    
+    CGFloat left = self.PDFPrint.edgeInsets.left;
+    CGFloat right = self.PDFPrint.edgeInsets.right;
+    CGFloat top = self.PDFPrint.edgeInsets.top;
+    CGFloat bottom = self.PDFPrint.edgeInsets.bottom;
+
+    if (kKMPDFPosterSplitType_PageNumber == self.PDFPrint.splitType) {
+        
+         left = self.PDFPrint.fullPageEdgeInsets.left;
+         right = self.PDFPrint.fullPageEdgeInsets.right;
+         top = self.PDFPrint.fullPageEdgeInsets.top;
+         bottom = self.PDFPrint.fullPageEdgeInsets.bottom;
+        
+        CGFloat contextA4W = KBlankA4W - left - right;//实际内容的宽度
+        CGFloat contextA4H = KBlankA4H - top - bottom;//实际内容的高度
+        
+        scanl = MIN(contextA4W/PDFWidth, contextA4H/PDFHeight);
+    }
+    
+    CGFloat xTransform = 0;
+    CGFloat yTransform = 0;
+    
+    if (rotate == 90) {
+        if (self.hourArray.count == 1 ) {
+            xTransform = (mediaBox.size.width - PDFWidth *scanl)/2;
+        } else {
+            if (cropRect.size.height - cropRect.origin.y > 0) {
+                xTransform = mediaBox.size.width - PDFWidth * scanl - right;
+            } else {
+                xTransform = left;
+            }
+        }
+        
+        if (self.vertArray.count == 1) {
+            yTransform = (mediaBox.size.height - PDFHeight * scanl)/2;
+        } else {
+            if (cropRect.size.width - cropRect.origin.x > 0) {
+                yTransform = bottom;
+            } else {
+                yTransform = mediaBox.size.height - PDFHeight * scanl - top;
+            }
+        }
+    } else if (rotate == 180) {
+        if (self.hourArray.count == 1 ) {
+            xTransform = (mediaBox.size.width - PDFWidth * scanl)/2;
+        } else {
+            if (cropRect.origin.x > 0) {
+                xTransform = mediaBox.size.width - PDFWidth * scanl -right;
+            } else {
+                xTransform = left;
+            }
+        }
+        
+        if (self.vertArray.count == 1) {
+            yTransform = (mediaBox.size.height - PDFHeight * scanl)/2;
+        } else {
+            if (cropRect.origin.y > 0) {
+                yTransform = mediaBox.size.height - PDFHeight * scanl - top;
+            } else {
+                yTransform = bottom;
+            }
+        }
+    } else if (rotate == 270) {
+        if (self.hourArray.count == 1 ) {
+            xTransform = (mediaBox.size.width - PDFWidth * scanl)/2;
+        } else {
+            if (cropRect.size.height - cropRect.origin.y > 0) {
+                xTransform = left;
+            } else {
+                xTransform = mediaBox.size.width - PDFWidth * scanl - right;
+            }
+        }
+        
+        if (self.vertArray.count == 1) {
+            yTransform = (mediaBox.size.height - PDFHeight * scanl)/2;
+        } else {
+            if (cropRect.size.width - cropRect.origin.x > 0) {
+                yTransform = mediaBox.size.height - PDFHeight * scanl - top;
+            } else {
+                yTransform = bottom;
+            }
+        }
+    } else {
+        if (self.hourArray.count == 1 ) {
+            xTransform = (mediaBox.size.width - PDFWidth * scanl)/2;
+        } else {
+            if (cropRect.origin.x > 0) {
+                xTransform = left;
+            } else {
+                xTransform = mediaBox.size.width - PDFWidth * scanl - right;
+            }
+        }
+        
+        if (self.vertArray.count == 1) {
+            yTransform = (mediaBox.size.height - PDFHeight * scanl)/2;
+            
+        } else {
+            if (cropRect.origin.y > 0) {
+                yTransform = bottom;
+            } else {
+                yTransform = mediaBox.size.height - PDFHeight * scanl - top;
+            }
+        }
+    }
+    
+    CGContextTranslateCTM(context, xTransform,yTransform);
+    CGContextScaleCTM(context, scanl, scanl);
+    
+    if (@available(macOS 10.12, *)) {
+        [page drawWithBox:kPDFDisplayBoxCropBox toContext:context];
+        [page transformContext:context forBox:kPDFDisplayBoxCropBox];
+    } else {
+        [NSGraphicsContext saveGraphicsState];
+        [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithGraphicsPort:context flipped:YES]];
+        [page drawWithBox:kPDFDisplayBoxCropBox];
+        [NSGraphicsContext restoreGraphicsState];
+        [page transformContextForBox:kPDFDisplayBoxCropBox];
+    }
+    
+    [NSGraphicsContext restoreGraphicsState];
+    CGContextEndPage(context);
+}
+
+-(void)drawCutMarkContext:(CGContextRef)context contextSize:(CGSize)size
+{
+    CGContextSetStrokeColorWithColor(context, [NSColor blackColor].CGColor);
+    CGContextSetLineWidth(context, 1.0);
+    CGContextSetLineCap(context, kCGLineCapSquare);
+    
+    if(self.columnIndex == 1 && self.lineIndex == 1) {
+        [self drawLeftBottomCutMarks:context size:size];
+        [self drawRightTopCutMarks:context size:size];
+        [self drawRightBottomCutMarks:context size:size];
+    } else if (self.lineIndex == 1 && self.columnIndex == self.vertArray.count) {
+        [self drawLeftTopCutMarks:context size:size];
+        [self drawRightTopCutMarks:context size:size];
+        [self drawRightBottomCutMarks:context size:size];
+    } else if (self.columnIndex == 1 && self.lineIndex == self.hourArray.count) {
+        [self drawLeftTopCutMarks:context size:size];
+        [self drawLeftBottomCutMarks:context size:size];
+        [self drawRightBottomCutMarks:context size:size];
+    } else if (self.columnIndex == self.vertArray.count && self.hourArray.count == self.lineIndex) {
+        [self drawLeftTopCutMarks:context size:size];
+        [self drawLeftBottomCutMarks:context size:size];
+        [self drawRightTopCutMarks:context size:size];
+    } else {
+        [self drawLeftTopCutMarks:context size:size];
+        [self drawLeftBottomCutMarks:context size:size];
+        [self drawRightTopCutMarks:context size:size];
+        [self drawRightBottomCutMarks:context size:size];
+    }
+    //绘制完成
+    CGContextStrokePath(context);
+}
+
+//左上角切割标记
+-(void)drawLeftTopCutMarks:(CGContextRef)context size:(CGSize)size
+{
+    CGFloat KBlankA4H =size.height;
+    CGPoint point_LeftTop = CGPointZero;
+    
+    if (self.PDFPrint.splitType == kKMPDFPosterSplitType_PageNumber) {
+        point_LeftTop.x = self.PDFPrint.fullPageEdgeInsets.left;
+    } else {
+        point_LeftTop.x = self.PDFPrint.edgeInsets.left;
+    }
+    
+    point_LeftTop.y = KBlankA4H - self.PDFPrint.edgeInsets.top;
+    
+    CGContextMoveToPoint(context, 10,point_LeftTop.y);
+    CGContextAddLineToPoint(context,point_LeftTop.x, point_LeftTop.y);
+    
+    CGContextMoveToPoint(context, point_LeftTop.x - 10,KBlankA4H -10);
+    CGContextAddLineToPoint(context,point_LeftTop.x - 10,point_LeftTop.y);
+}
+
+//右上角切割标记
+-(void)drawRightTopCutMarks:(CGContextRef)context size:(CGSize)size
+{
+    CGFloat KBlankA4W =size.width;
+    CGFloat KBlankA4H =size.height;
+    
+    CGPoint point_RightTop = CGPointZero;//右上角
+    
+    if (self.PDFPrint.splitType == kKMPDFPosterSplitType_PageNumber) {
+        point_RightTop.x = KBlankA4W - self.PDFPrint.fullPageEdgeInsets.right;
+        point_RightTop.y = KBlankA4H - self.PDFPrint.fullPageEdgeInsets.top;
+    } else {
+        point_RightTop.x = KBlankA4W - self.PDFPrint.edgeInsets.right;
+        point_RightTop.y = KBlankA4H - self.PDFPrint.edgeInsets.top;
+    }
+    
+    CGContextMoveToPoint(context,point_RightTop.x,point_RightTop.y);
+    CGContextAddLineToPoint(context,KBlankA4W - 10,point_RightTop.y);
+    
+    CGContextMoveToPoint(context,point_RightTop.x + 10,KBlankA4H - 10);
+    CGContextAddLineToPoint(context,point_RightTop.x + 10,point_RightTop.y);
+}
+
+//左下角切割标记
+-(void)drawLeftBottomCutMarks:(CGContextRef)context size:(CGSize)size
+{
+    CGPoint point_LeftBottom = CGPointZero;//左下角
+    if (self.PDFPrint.splitType == kKMPDFPosterSplitType_PageNumber) {
+        point_LeftBottom.x = self.PDFPrint.fullPageEdgeInsets.left;
+        point_LeftBottom.y = self.PDFPrint.fullPageEdgeInsets.bottom;
+    } else {
+        point_LeftBottom.x = self.PDFPrint.edgeInsets.left;
+        point_LeftBottom.y = self.PDFPrint.edgeInsets.bottom;
+    }
+    
+    //左下角
+    CGContextMoveToPoint(context, 10,point_LeftBottom.y);
+    CGContextAddLineToPoint(context,point_LeftBottom.x, point_LeftBottom.y);
+    
+    CGContextMoveToPoint(context, point_LeftBottom.x- 10,10);
+    CGContextAddLineToPoint(context,point_LeftBottom.x - 10,point_LeftBottom.y);
+}
+
+//右下角切割标记
+-(void)drawRightBottomCutMarks:(CGContextRef)context size:(CGSize)size
+{
+    CGFloat KBlankA4W =size.width;
+    
+    CGPoint point_RightBottom = CGPointZero;//右下角
+    if (self.PDFPrint.splitType == kKMPDFPosterSplitType_PageNumber) {
+        point_RightBottom.x = KBlankA4W - self.PDFPrint.fullPageEdgeInsets.right;
+        point_RightBottom.y = self.PDFPrint.fullPageEdgeInsets.bottom;
+    } else {
+        point_RightBottom.x = KBlankA4W - self.PDFPrint.edgeInsets.right;
+        point_RightBottom.y = self.PDFPrint.edgeInsets.bottom;
+    }
+    
+    CGContextMoveToPoint(context,KBlankA4W - 10,point_RightBottom.y);
+    CGContextAddLineToPoint(context,point_RightBottom.x,point_RightBottom.y);
+    
+    CGContextMoveToPoint(context,point_RightBottom.x+ 10,10);
+    CGContextAddLineToPoint(context,point_RightBottom.x+ 10,point_RightBottom.y);
+}
+
+- (void)drawLabelTextContextSize:(CGSize)contextSize
+{
+    CGFloat KBlankA4W =contextSize.width;
+    CGFloat KBlankA4H =contextSize.height;
+    
+    NSString *contextString = nil;
+    if (self.PDFPrint.labelString && self.PDFPrint.labelString.length > 0) {
+        contextString = self.PDFPrint.labelString;
+    } else {
+        NSDate *date = [NSDate date];
+        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+        [formatter setDateFormat:@"YYYY-MM-dd hh:mm:ss"];
+        contextString = [NSString stringWithFormat:@"(%ld,%ld) %@ %@",self.columnIndex,self.lineIndex,[self.filePath lastPathComponent],[formatter stringFromDate:date]];
+    }
+    
+    CGFloat fontSize = 12.0 * (MAX(KBlankA4W, KBlankA4H)/842);
+    NSFont *font = [NSFont systemFontOfSize:fontSize];
+    NSColor *color = [NSColor blackColor];
+    
+    NSSize size = NSZeroSize;
+    NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
+    [style setAlignment:NSCenterTextAlignment];
+    [style setLineBreakMode:NSLineBreakByCharWrapping];
+    NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
+    [dictionary setObject:style forKey:NSParagraphStyleAttributeName];
+    [dictionary setObject:color forKey:NSForegroundColorAttributeName];
+    [dictionary setObject:font forKey:NSFontAttributeName];
+    size = [contextString boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT)
+                                       options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
+                                    attributes:dictionary].size;
+    
+    if (self.PDFPrint.splitType == kKMPDFPosterSplitType_PageNumber) {
+        [contextString drawInRect:CGRectMake(self.PDFPrint.fullPageEdgeInsets.left +10,
+                                             KBlankA4H - self.PDFPrint.fullPageEdgeInsets.top + size.height,
+                                             size.width, size.height)
+                   withAttributes:dictionary];
+    } else {
+        [contextString drawInRect:CGRectMake(self.PDFPrint.edgeInsets.left +10,
+                                             KBlankA4H - self.PDFPrint.edgeInsets.top + size.height,
+                                             size.width, size.height)
+                   withAttributes:dictionary];
+    }
+    
+}
+
+#pragma mark Publick Action
++ (KMPosterPrintManager *)defaultManager
+{
+    static KMPosterPrintManager *singleton = nil;
+    static dispatch_once_t pred;
+    dispatch_once(&pred, ^{
+        singleton = [[KMPosterPrintManager alloc] init];
+    });
+    return singleton;
+}
+
+- (void)savePath:(NSString *)path posterPrint:(KMPDFPosterPrint *)print completionHandler:(void (^)(BOOL))complet
+{
+    self.filePath = path;
+    self.PDFPrint = print;
+    
+    NSArray * cropPages = print.cropPages;
+    if (print.isReversePage) {
+        cropPages = [[print.cropPages reverseObjectEnumerator] allObjects];
+    }
+    
+    CFStringRef filePath = (__bridge CFStringRef)path;
+    CFURLRef url = CFURLCreateWithFileSystemPath(NULL, filePath, kCFURLPOSIXPathStyle, 0);
+    CFMutableDictionaryRef myDictionary = CFDictionaryCreateMutable(NULL,
+                                                                    0,
+                                                                    &kCFTypeDictionaryKeyCallBacks,
+                                                                    &kCFTypeDictionaryValueCallBacks);
+    CFDictionarySetValue(myDictionary, kCGPDFContextCreator, CFSTR("PDF Reader Pro"));
+    
+    CGContextRef pdfContext = CGPDFContextCreateWithURL(url, &CGRectZero, myDictionary);
+    
+    CFRelease(myDictionary);
+    CFRelease(url);    
+    
+    if (!pdfContext) {
+        complet(NO);
+        return;
+    }
+    
+    for (PDFPage * page in cropPages) {
+        [self posterPrintPage:page posterPrint:print completionHandler:^(NSArray *horizontals, NSArray *verticals) {
+            
+            self.hourArray = horizontals;
+            self.vertArray = [[verticals reverseObjectEnumerator] allObjects];//裁剪的时候,应从上自下依次裁剪打印
+            
+            NSInteger rotate = page.rotation;
+            if (90 == rotate || 270 == rotate) {
+                self.hourArray = verticals;
+                self.vertArray = [[horizontals reverseObjectEnumerator] allObjects];
+            }
+
+            if (kKMPDFPosterSplitType_PageNumber == print.splitType) {
+                for (NSUInteger j=0; j< _vertArray.count; j++) {
+                    self.columnIndex = j + 1;
+                    for (NSUInteger i=0; i< _hourArray.count; i++) {
+                        CGRect newRect = CGRectZero;
+
+                        self.lineIndex = i + 1;
+                        
+                        if (i != 0) {
+                            newRect.origin.x = [_hourArray[i - 1] floatValue] -print.overlap;
+                        }
+                        if (j + 1 != _vertArray.count) {
+                            newRect.origin.y = [_vertArray[j + 1] floatValue] -print.overlap;
+                        }
+                        
+                        newRect.size.width = [_hourArray[i] floatValue] - newRect.origin.x;
+                        
+                        newRect.size.height = [_vertArray[j] floatValue] - newRect.origin.y;
+                        
+                        [self splitPage:page rect:newRect toContext:pdfContext];
+                    }
+                }
+            } else {
+                
+                for (NSUInteger j=0; j< _vertArray.count; j++) {
+                    self.columnIndex = j + 1;
+                    for (NSUInteger i=0; i< _hourArray.count; i++) {
+                        self.lineIndex = i + 1;
+                        CGRect newRect = CGRectZero;
+                        
+                        if (i != 0) {
+                            newRect.origin.x = [_hourArray[i - 1] floatValue] -print.overlap/print.scale;
+                        }
+                        
+                        if (j + 1 != _vertArray.count) {
+                            newRect.origin.y = [_vertArray[j + 1] floatValue] -print.overlap/print.scale;
+                        }
+                        
+                        newRect.size.width = [_hourArray[i] floatValue] - newRect.origin.x;
+                        
+                        newRect.size.height = [_vertArray[j] floatValue] - newRect.origin.y;
+
+                        [self splitPage:page rect:newRect toContext:pdfContext];
+                    }
+                }
+            }
+        }];
+    }
+    CGPDFContextClose(pdfContext);
+    CGContextRelease (pdfContext);
+    complet(YES);
+}
+
+//得到裁剪点数组
+- (void)posterPrintPage:(PDFPage *)page posterPrint:(KMPDFPosterPrint *)properties completionHandler:(postPrintCallback)handler
+{
+    NSMutableArray *horizontalArray  = [NSMutableArray array];//水平坐标数组
+    NSMutableArray *verticalArray  = [NSMutableArray array];//垂直坐标数组
+    
+    NSRect rect = [page boundsForBox:kPDFDisplayBoxCropBox];
+    CGFloat orgPDFWidth = rect.size.width;//待裁剪的Page宽度
+    CGFloat orgPDFHeight = rect.size.height;//待裁剪的Page高度
+    
+    NSInteger rotate = page.rotation;
+    if (90 == rotate || 270 == rotate) {
+        orgPDFWidth = rect.size.height;
+        orgPDFHeight = rect.size.width;
+    }
+    
+    CGFloat overlap = properties.overlap;
+    
+    if (kKMPDFPosterSplitType_PageNumber == properties.splitType) {
+        NSInteger lineCount = properties.lineCount;
+
+        if (lineCount>0) {
+            CGFloat splitPDFW = orgPDFWidth + (lineCount - 1) * overlap;
+            CGFloat spaceW = splitPDFW/lineCount; //均分宽度
+            
+            [horizontalArray addObject:@(spaceW)];
+            for (NSInteger m =1; m< lineCount; m ++) {
+                [horizontalArray addObject:@(spaceW  + m *(spaceW - overlap))];
+            }
+        }
+        
+        NSInteger columnCount = properties.columnCount;
+        if (columnCount>0) {
+            CGFloat splitPDFH = orgPDFHeight + (columnCount- 1) * overlap;
+            CGFloat spaceH = splitPDFH/columnCount;  //均分高度
+            
+            [verticalArray addObject:@(spaceH)];
+            for (NSInteger n =1; n< columnCount; n ++) {
+                [verticalArray addObject:@(spaceH  + n *(spaceH - overlap))];
+            }
+        }
+    } else {
+        CGFloat scale = properties.scale;
+        
+        CGFloat splitWidth = properties.splitSize.width;
+        CGFloat splitHeight = properties.splitSize.height;
+        
+        if (kKMPDFPosterPrintDirection_Landscape == properties.direction) {
+            splitWidth = properties.splitSize.height;
+            splitHeight = properties.splitSize.width;
+        }
+        
+        CGFloat contextA4W = splitWidth - properties.edgeInsets.left - properties.edgeInsets.right;//实际内容的宽度
+        CGFloat contextA4H = splitHeight - properties.edgeInsets.bottom - properties.edgeInsets.top;//实际内容的高度
+        
+        splitWidth = contextA4W/scale;
+        splitHeight = contextA4H/scale;
+        
+        NSInteger columnCount = 0;//宽能切完整的个数
+        CGFloat postPrintX = (contextA4W - overlap)/scale;
+        while ((splitWidth + columnCount * postPrintX)< orgPDFWidth ) {
+            columnCount ++;
+        }
+        
+        CGFloat totalWidth = orgPDFWidth + columnCount * overlap;
+        CGFloat firstX = (totalWidth - (columnCount-1) * splitWidth)/ 2; //计算第一个横向切割点
+        
+        //计算切割点
+        if (columnCount >0) {
+            if (firstX > 0) {
+                CGFloat ww = firstX;
+                [horizontalArray addObject:@(ww)];
+                
+                for (NSInteger i =1; i< columnCount; i ++) {
+                    [horizontalArray addObject:@(postPrintX *i + ww)];
+                }
+                [horizontalArray addObject:@(orgPDFWidth)];
+            } else if(0 == (int)firstX){
+                [horizontalArray addObject:@(splitWidth)];
+                for (NSInteger j =1; j< columnCount; j ++) {
+                    [horizontalArray addObject:@(splitWidth + postPrintX *j)];
+                }
+            }
+        } else {
+            [horizontalArray addObject:@(orgPDFWidth)];
+        }
+        
+        NSInteger lineCount = 0;//高能切完整的个数
+        CGFloat postPrintY = (contextA4H - overlap)/scale;
+        while ((splitHeight + lineCount* postPrintY)< orgPDFHeight ) {
+            lineCount ++;
+        }
+        
+        CGFloat totalHeight = orgPDFHeight + lineCount * overlap;
+        CGFloat firstY = (totalHeight - (lineCount-1) * splitHeight)/ 2; //计算第一个纵向的切割点
+        if (lineCount >0) {
+            if (firstY > 0) {
+                CGFloat hh = firstY;
+                [verticalArray addObject:@(hh)];
+                
+                for (NSInteger m =1; m< lineCount; m ++) {
+                    [verticalArray addObject:@(postPrintY *m + hh)];
+                }
+                [verticalArray addObject:@(orgPDFHeight)];
+            } else if(0 == (int)firstY){
+                [verticalArray addObject:@(splitHeight)];
+                
+                for (NSInteger n =1; n< lineCount; n++) {
+                    [verticalArray addObject:@(splitHeight + postPrintY *n)];
+                }
+            }
+        } else {
+            [verticalArray addObject:@(orgPDFHeight)];
+        }
+    }
+    
+    handler(horizontalArray,verticalArray);
+}
+
+@end

+ 21 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/PrintManage/KMPDFPrintManageWindowController.h

@@ -0,0 +1,21 @@
+//
+//  KMPDFPrintManageWindowController.h
+//  PDF Reader
+//
+//  Created by 蒋志鹏 on 2018/6/19.
+//  Copyright © 2018年 Kdan Mobile. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import "PDFKit/PDFKit.h"
+
+@class PDFPage;
+
+typedef void(^printCallBack)(PDFDocument *printDocument);
+
+@interface KMPDFPrintManageWindowController : NSWindowController
+
+
+- (instancetype)initWithPDFDocument:(PDFDocument *)pdfDocument currentPage:(PDFPage *)currentpage completeHandler:(printCallBack)printHandler;
+
+@end

+ 973 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/PrintManage/KMPDFPrintManageWindowController.m

@@ -0,0 +1,973 @@
+//
+//  KMPDFPrintManageWindowController.m
+//  PDF Reader
+//
+//  Created by 蒋志鹏 on 2018/6/19.
+//  Copyright © 2018年 Kdan Mobile. All rights reserved.
+//
+
+#import "KMPDFPrintManageWindowController.h"
+#import "NSMutableArray+KMOddEvenPartFetch.h"
+#import "KMPDFMultiplePrintWindowController.h"
+#import "KMPDFPosterPrintWindowController.h"
+#import "KMPDFBookletWindowController.h"
+#import "KMPurchaseCompareWindowController.h"
+//#import "NSWindowController_SKExtensions.h"
+
+//#import "KMBookletMaskView.h"
+
+//#import "KMFileAttribute.h"
+#import "PDF_Reader_Pro-Swift.h"
+#import <Quartz/Quartz.h>
+
+
+#define kPrintManageFileSavePath [[[NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:[NSBundle mainBundle].bundleIdentifier] stringByAppendingPathComponent:@"printManage.pdf"]
+
+#define kPreviewMaxWidth 207.0
+#define kPreviewMaxHeight 289.0
+
+typedef NS_ENUM(NSUInteger, kPrintStyle) {
+    kPrintStyle_DocumentOnly = 0,
+    kPrintStyle_DocumentAndMarkups,
+    kPrintStyle_DocumentAndStamps,
+    kPrintStyle_FormsOnly
+};
+
+typedef NS_ENUM(NSUInteger, kPageSelectStyle) {
+    kPageSelectStyle_AllPage = 0,
+    kPageSelectStyle_OddPage,
+    kPageSelectStyle_EvenPage,
+    kPageSelectStyle_CurrentPage,
+    kPageSelectStyle_HandInput
+};
+
+@interface KMPrintParameter :NSObject
+
+@property (nonatomic, assign) kPrintStyle printStyle;
+@property (nonatomic, assign) BOOL reversePages;
+@property (nonatomic, assign) kPageSelectStyle pageSelectStyle;
+
+@end
+
+
+@implementation KMPrintParameter
+
+- (void)dealloc {
+
+}
+@end
+
+
+@interface KMPDFPrintManageWindowController () <NSTextFieldDelegate>
+
+//当前文档
+@property (nonatomic, retain) PDFDocument *pdfDocument;
+@property (nonatomic, retain) PDFPage *currentPage;
+//model 管理
+@property (nonatomic, assign) NSModalSession modalSession;
+
+@property (assign) IBOutlet NSTextField *pagesSettingLabel;
+@property (assign) IBOutlet NSButton *allPageButton;
+@property (assign) IBOutlet NSButton *oddPageButton;
+@property (assign) IBOutlet NSButton *evenPageButton;
+@property (assign) IBOutlet NSButton *currentPageButton;
+@property (assign) IBOutlet NSButton *handInputPageButton;
+
+@property (assign) IBOutlet NSTextField *intputPageRangeTextField;
+@property (assign) IBOutlet NSButton *reversePageButton;
+
+@property (assign) IBOutlet NSTextField *printSettingLabel;
+@property (assign) IBOutlet NSButton *printDocumentButton;
+@property (assign) IBOutlet NSButton *printDocumentAndMarkupsButton;
+@property (assign) IBOutlet NSButton *printDocumentAndStampsButton;
+@property (assign) IBOutlet NSButton *printFormOnlyButton;
+
+@property (assign) IBOutlet NSButton *printButton;
+@property (assign) IBOutlet NSButton *cancelButton;
+
+@property (assign) IBOutlet NSButton *posterButton;
+@property (assign) IBOutlet NSButton *mutilpleButton;
+@property (assign) IBOutlet NSButton *bookletButton;
+
+@property (assign) IBOutlet NSTextField *currentPageNumberTextField;
+@property (assign) IBOutlet NSTextField *totalPageNumberLabel;
+
+@property (assign) IBOutlet NSLayoutConstraint *previewHeightContraint;
+@property (assign) IBOutlet NSLayoutConstraint *previewWidthContraint;
+@property (assign) IBOutlet PDFView *preview;
+
+@property (nonatomic, retain) KMPrintParameter *printParameter;
+@property (nonatomic, retain) NSMutableArray *selectPagesIndexArray;
+@property (nonatomic, retain) KMBookletMaskView *maskView;
+@property (nonatomic, copy) printCallBack callBack;
+@property (retain) NSArray *pageButtons;
+
+@end
+
+@implementation KMPDFPrintManageWindowController
+
+- (void)dealloc {
+
+}
+
+#pragma mark - init Method
+
+- (instancetype)initWithPDFDocument:(PDFDocument *)pdfDocument currentPage:(PDFPage *)currentpage completeHandler:(printCallBack)printHandler
+{
+    self = [super initWithWindowNibName:@"KMPDFPrintManageWindowController"];
+    if (self) {
+        [self showWaitting];
+        dispatch_async(dispatch_get_global_queue(0, 0), ^{
+            self.callBack = printHandler;
+            [pdfDocument writeToURL:[NSURL fileURLWithPath:kPrintManageFileSavePath]];
+            self.pdfDocument = [[PDFDocument alloc] initWithURL:[NSURL fileURLWithPath:kPrintManageFileSavePath]];
+            dispatch_async(dispatch_get_main_queue(), ^{
+                [self hideWaitting];
+                if (self.pdfDocument) {
+//                    if([self.pdfDocument isLocked]) {
+//                            [self.pdfDocument unlockWithPassword:pdfDocument.password];
+//                    }
+                    [self setTextFieldDelegate];
+                    [self initFormatter];
+                    [self configuInitializationParameter];
+                    [self produceNewPDFForPreview];
+                }else{
+                    [self close];
+                }
+            });
+        });
+    }
+    return self;
+}
+
+#pragma mark - 生命周期
+
+- (void)windowDidLoad {
+    [super windowDidLoad];
+        
+    [self localizedLanguage];
+    [self configuInitializationParameter];
+    
+    if (!self.pdfDocument) {
+        return;
+    }
+    
+    [self setTextFieldDelegate];
+    [self initFormatter];
+    [self produceNewPDFForPreview];
+}
+
+- (BOOL)windowShouldClose:(id)sender
+{
+    return YES;
+}
+
+#pragma mark - Private Methods
+
+- (void)localizedLanguage
+{
+    self.window.title = NSLocalizedString(@"Pages to Print", nil);
+    
+    self.pagesSettingLabel.stringValue = NSLocalizedString(@"Page Range:", nil);
+    self.allPageButton.title = NSLocalizedString(@"All Pages", nil);
+    self.oddPageButton.title = NSLocalizedString(@"Odd Pages Only", nil);
+    self.evenPageButton.title = NSLocalizedString(@"Even Pages Only", nil);
+    
+    self.reversePageButton.title = NSLocalizedString(@"Reverse pages", nil);
+    
+    self.printSettingLabel.stringValue = NSLocalizedString(@"Comments & Forms:", nil);
+    self.printDocumentButton.title = NSLocalizedString(@"Document", nil);
+    self.printDocumentAndMarkupsButton.title = NSLocalizedString(@"Document and Markups", nil);
+    self.printDocumentAndStampsButton.title = NSLocalizedString(@"Document and Stamps", nil);
+    self.printFormOnlyButton.title = NSLocalizedString(@"Form fields only", nil);
+    
+    self.posterButton.title = NSLocalizedString(@"Poster", nil);
+    self.mutilpleButton.title = NSLocalizedString(@"Multiple", nil);
+    self.bookletButton.title = NSLocalizedString(@"Booklet", nil);
+    
+    self.cancelButton.title = NSLocalizedString(@"Cancel", nil);
+    self.printButton.title = NSLocalizedString(@"Printer", nil);
+    self.currentPageButton.title= NSLocalizedString(@"Current Page", nil);
+    [self.intputPageRangeTextField.cell setPlaceholderString:NSLocalizedString(@"e.g. 1,3-5,10", nil)];
+}
+
+- (void)setTextFieldDelegate
+{
+    self.intputPageRangeTextField.delegate = self;
+    self.currentPageNumberTextField.delegate = self;
+}
+
+- (void)initFormatter
+{
+    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
+    formatter.numberStyle = NSNumberFormatterNoStyle;
+    self.currentPageNumberTextField.formatter = formatter;
+}
+
+- (void)configuInitializationParameter
+{
+    if (!self.printParameter) {
+        self.printParameter = [[KMPrintParameter alloc] init];
+        self.printParameter.reversePages = NO;
+        self.printParameter.printStyle = kPrintStyle_DocumentAndMarkups;
+        self.printParameter.pageSelectStyle = kPageSelectStyle_AllPage;
+    }
+    
+    self.preview.autoScales = YES;
+    self.preview.backgroundColor = [NSColor whiteColor];
+    self.preview.wantsLayer = YES;
+    self.preview.layer.borderColor = [NSColor blackColor].CGColor;
+    self.preview.layer.borderWidth = 2;
+    
+    self.intputPageRangeTextField.enabled = NO;
+}
+
+- (void)adjustPreviewSizeWithPage:(PDFPage *)page
+{
+    CGSize pageSize = [page boundsForBox:kPDFDisplayBoxMediaBox].size;
+    if (page.rotation %180) {
+        pageSize = CGSizeMake(pageSize.height, pageSize.width);
+    }
+//    NSLog(@"pageSize:%f,%f",pageSize.width,pageSize.height);
+    CGFloat wRatio = kPreviewMaxWidth/pageSize.width;
+    CGFloat hRatio = kPreviewMaxHeight/pageSize.height;
+    
+    CGFloat ratio = MIN(wRatio, hRatio);
+
+    if (ratio == hRatio) {
+        self.previewHeightContraint.constant = kPreviewMaxHeight;
+        self.previewWidthContraint.constant = kPreviewMaxHeight * pageSize.width/pageSize.height;
+    } else {
+        self.previewWidthContraint.constant = kPreviewMaxWidth;
+        self.previewHeightContraint.constant = kPreviewMaxWidth * pageSize.height/pageSize.width;
+    }
+}
+
+- (NSMutableArray *)fetchPagesArrayWithParameter:(kPageSelectStyle)selectStyle
+{
+     NSMutableArray *pagesArray = [NSMutableArray array];
+    for (NSInteger i = 0; i < self.pdfDocument.pageCount; i ++) {
+        PDFPage *page = [[self.pdfDocument pageAtIndex:i] copy];
+        [pagesArray addObject:page];
+    }
+    
+    switch (selectStyle) {
+        case kPageSelectStyle_AllPage:
+            
+            break;
+            
+        case kPageSelectStyle_OddPage:
+            [pagesArray subArrayWithType:KMSubArrayTypeOdd];
+            break;
+            
+        case kPageSelectStyle_EvenPage:
+            [pagesArray subArrayWithType:KMSubArrayTypeEven];
+            break;
+            
+        case kPageSelectStyle_CurrentPage:
+        {
+            [pagesArray removeAllObjects];
+            PDFPage *page = [self.currentPage copy];
+            [pagesArray addObject:page];
+        }
+            break;
+            
+        case kPageSelectStyle_HandInput:
+        {
+            [pagesArray removeAllObjects];
+            
+            for (NSNumber *pageIndexNum in self.selectPagesIndexArray) {
+                PDFPage *page = [[self.pdfDocument pageAtIndex:[pageIndexNum integerValue] - 1] copy];
+                [pagesArray addObject:page];
+            }
+        }
+            break;
+            
+        default:
+            break;
+    }
+    return pagesArray;
+}
+
+- (void)pageRangeSelectWithCurrentSelectStyle:(NSButton *)sender
+{
+    self.allPageButton.state = NO;
+    self.oddPageButton.state = NO;
+    self.evenPageButton.state = NO;
+    self.currentPageButton.state = NO;
+    self.handInputPageButton.state = NO;
+    
+    if (sender) {
+        sender.state = YES;
+    }
+}
+
+- (void)printStyleSelectWithCurrentSelectStyle:(NSButton *)sender
+{
+    self.printDocumentButton.state = NO;
+    self.printDocumentAndMarkupsButton.state = NO;
+    self.printDocumentAndStampsButton.state = NO;
+    self.printFormOnlyButton.state = NO;
+    if (sender) {
+        sender.state = YES;
+    }
+}
+
+- (void)produceNewPDFForPreview
+{
+    NSMutableArray *pagesArray  = [self fetchPagesArrayWithParameter:self.printParameter.pageSelectStyle];
+    
+    if (pagesArray.count < 1) {
+        return;
+    }
+    
+    if (self.printParameter.reversePages) {
+        NSMutableArray *tempArray = [NSMutableArray array];
+        for (NSInteger i = 0; i < pagesArray.count; i ++) {
+            [tempArray addObject:[pagesArray objectAtIndex:pagesArray.count - i -1]];
+        }
+        
+        [pagesArray removeAllObjects];
+        [pagesArray addObjectsFromArray:tempArray];
+    }
+    
+    [self handleAnnotationWithPrintParameter:pagesArray printStyle:self.printParameter.printStyle];
+    
+    PDFDocument *document = [[PDFDocument alloc] init];
+    
+    for (NSInteger i = 0; i < pagesArray.count; i++) {
+        PDFPage *page = [pagesArray objectAtIndex:i];
+        [document insertPage:page atIndex:document.pageCount];
+    }
+    
+    self.preview.document = document;
+ 
+    [self.preview goToFirstPage:nil];
+    [self adjustPreviewSizeWithPage:[document pageAtIndex:0]];
+
+    self.currentPageNumberTextField.stringValue = @"1";
+    self.totalPageNumberLabel.stringValue = [NSString stringWithFormat:@" / %ld",pagesArray.count];
+}
+
+- (void)handleAnnotationWithPrintParameter:(NSMutableArray *)pagesArray
+                                printStyle:(kPrintStyle)printStyle
+{
+    for (PDFPage *page in pagesArray) {
+        NSMutableArray *annotationArray = [NSMutableArray new];
+        for (PDFAnnotation *annotation in page.annotations) {
+            [annotationArray addObject:annotation];
+        }
+        
+        switch (printStyle) {
+            case kPrintStyle_DocumentOnly:
+            {
+                for (PDFAnnotation *annotation in annotationArray) {
+                    [annotation.page removeAnnotation:annotation];
+                }
+            }
+                break;
+                
+            case kPrintStyle_DocumentAndStamps:
+            {
+                for (PDFAnnotation *annotation in annotationArray) {
+                    if (![annotation isKindOfClass:[PDFAnnotationStamp class]]) {
+                        [annotation.page removeAnnotation:annotation];
+                    }
+                }
+            }
+                break;
+                
+            default:
+                break;
+        }
+    }
+}
+
+- (void)showCriticalAlert:(NSString *)alertMsg
+{
+    NSAlert *alert = [[NSAlert alloc] init];
+    [alert setAlertStyle:NSCriticalAlertStyle];
+    if (alertMsg) {
+        [alert setInformativeText:alertMsg];
+    } else {
+        [alert setMessageText:[NSString stringWithFormat:@"%@ %@",self.pdfDocument.documentURL.path.lastPathComponent,NSLocalizedString(@"Invalid page range or the page number is out of range. Please try again.", nil)]];
+    }
+    [alert runModal];
+}
+
+#pragma mark - 按钮点击方法
+
+//所有页
+- (IBAction)buttonItemClicked_AllPages:(NSButton *)sender
+{
+    if (sender.state) {
+        if (self.printParameter.pageSelectStyle == kPageSelectStyle_AllPage) {
+            return;
+        }
+        self.intputPageRangeTextField.stringValue = @"";
+        self.intputPageRangeTextField.enabled = NO;
+        
+        [self pageRangeSelectWithCurrentSelectStyle:sender];
+        self.printParameter.pageSelectStyle = kPageSelectStyle_AllPage;
+        if (self.printParameter.printStyle == kPrintStyle_FormsOnly) {
+            [self createOnlyFormDocument];
+        } else {
+            [self produceNewPDFForPreview];
+        }
+    }
+}
+
+//奇数页
+- (IBAction)buttonItemClicked_OddPages:(NSButton *)sender
+{
+    if (sender.state) {
+        if (self.printParameter.pageSelectStyle == kPageSelectStyle_OddPage) {
+            return;
+        }
+        
+        self.intputPageRangeTextField.stringValue = @"";
+        self.intputPageRangeTextField.enabled = NO;
+        
+        [self pageRangeSelectWithCurrentSelectStyle:sender];
+        self.printParameter.pageSelectStyle = kPageSelectStyle_OddPage;
+        if (self.printParameter.printStyle == kPrintStyle_FormsOnly) {
+            [self createOnlyFormDocument];
+        } else {
+            [self produceNewPDFForPreview];
+        }
+    }
+}
+
+//偶数页
+- (IBAction)buttonItemClicked_EvenPages:(NSButton *)sender
+{
+    if (sender.state) {
+        if (self.printParameter.pageSelectStyle == kPageSelectStyle_EvenPage) {
+            return;
+        }
+        
+        self.intputPageRangeTextField.stringValue = @"";
+        self.intputPageRangeTextField.enabled = NO;
+        
+        [self pageRangeSelectWithCurrentSelectStyle:sender];
+        self.printParameter.pageSelectStyle = kPageSelectStyle_EvenPage;
+        if (self.printParameter.printStyle == kPrintStyle_FormsOnly) {
+            [self createOnlyFormDocument];
+        } else {
+            [self produceNewPDFForPreview];
+        }
+    }
+}
+
+//当前页面
+- (IBAction)buttonItemClicked_CurrentPage:(NSButton *)sender
+{
+    if (sender.state) {
+        if (self.printParameter.pageSelectStyle == kPageSelectStyle_CurrentPage) {
+            return;
+        }
+        
+        self.intputPageRangeTextField.stringValue = @"";
+        self.intputPageRangeTextField.enabled = NO;
+        
+        [self pageRangeSelectWithCurrentSelectStyle:sender];
+        self.printParameter.pageSelectStyle = kPageSelectStyle_CurrentPage;
+        if (self.printParameter.printStyle == kPrintStyle_FormsOnly) {
+            [self createOnlyFormDocument];
+        } else {
+            [self produceNewPDFForPreview];
+        }
+    }
+}
+
+
+//手动输入页码
+- (IBAction)buttonItemClicked_handInputPages:(NSButton *)sender
+{
+    if (sender.state) {
+        if (self.printParameter.pageSelectStyle == kPageSelectStyle_HandInput) {
+            return;
+        }
+        
+        self.intputPageRangeTextField.enabled = YES;
+         self.intputPageRangeTextField.stringValue = @"";
+        [self.window makeFirstResponder:self.intputPageRangeTextField];
+        
+        [self pageRangeSelectWithCurrentSelectStyle:sender];
+        self.printParameter.pageSelectStyle = kPageSelectStyle_HandInput;
+    }
+}
+
+//反排序
+- (IBAction)buttonItemClicked_Reversepages:(NSButton *)sender
+{
+    self.printParameter.reversePages = sender.state;
+    if (self.printParameter.printStyle == kPrintStyle_FormsOnly) {
+        [self createOnlyFormDocument];
+    } else {
+        [self produceNewPDFForPreview];
+    }
+    
+}
+
+//只打印Document
+- (IBAction)buttonItemClicked_PrintDocumentOnly:(NSButton *)sender
+{
+    if (sender.state) {
+        if (self.printParameter.printStyle == kPrintStyle_DocumentOnly) {
+            return;
+        }
+        
+        [self printStyleSelectWithCurrentSelectStyle:sender];
+        self.printParameter.printStyle = kPrintStyle_DocumentOnly;
+        [self produceNewPDFForPreview];
+    }
+}
+
+//打印Document和注释
+- (IBAction)buttonItemClicked_PrintDocumentAndMarkups:(NSButton *)sender
+{
+    if (sender.state) {
+        if (self.printParameter.printStyle == kPrintStyle_DocumentAndMarkups) {
+            return;
+        }
+        
+        [self printStyleSelectWithCurrentSelectStyle:sender];
+        self.printParameter.printStyle = kPrintStyle_DocumentAndMarkups;
+        [self produceNewPDFForPreview];
+    }
+}
+
+//打印Document和Stamp类型注释
+- (IBAction)buttonItemClicked_PrintDocumentAndStamps:(NSButton *)sender
+{
+    if (sender.state) {
+        if (self.printParameter.printStyle == kPrintStyle_DocumentAndStamps) {
+            return;
+        }
+        
+        [self printStyleSelectWithCurrentSelectStyle:sender];
+        self.printParameter.printStyle = kPrintStyle_DocumentAndStamps;
+        [self produceNewPDFForPreview];
+    }
+}
+
+- (IBAction)buttonItemClicked_PrintFormOnly:(NSButton *)sender {
+    if (sender.state) {
+        if (self.printParameter.printStyle == kPrintStyle_FormsOnly) {
+            return;
+        }
+        [self printStyleSelectWithCurrentSelectStyle:sender];
+        self.printParameter.printStyle = kPrintStyle_FormsOnly;
+        [self createOnlyFormDocument];
+    }
+}
+
+//Preview上一页
+- (IBAction)buttonItemClicked_PreviousPage:(NSButton *)sender
+{
+    if ([self.preview canGoToPreviousPage]) {
+        [self.preview goToPreviousPage:nil];
+        self.currentPageNumberTextField.stringValue = [NSString stringWithFormat:@"%ld",[self.preview.document indexForPage:[self.preview currentPage]] + 1];
+        [self adjustPreviewSizeWithPage:[self.preview currentPage]];
+    }
+}
+
+//PreView下一页
+- (IBAction)buttonItemClicked_NextPage:(NSButton *)sender
+{
+    if ([self.preview canGoToNextPage]) {
+        [self.preview goToNextPage:nil];
+        self.currentPageNumberTextField.stringValue = [NSString stringWithFormat:@"%ld",[self.preview.document indexForPage:[self.preview currentPage]] + 1];
+        [self adjustPreviewSizeWithPage:[self.preview currentPage]];
+    }
+}
+
+//Poster
+- (IBAction)buttonItemClicked_Poster:(NSButton *)sender
+{
+    if (![IAPProductsManager defaultManager].isAvailableAllFunction) {
+        [self close];
+        [[KMPurchaseCompareWindowController sharedInstance] showWindow:nil];
+        return;
+    }
+    
+    [self close];
+    KMPDFPosterPrintWindowController *posterVC = [[KMPDFPosterPrintWindowController alloc] initWithPDFDocument:self.pdfDocument];
+    [[NSApp mainWindow] beginSheet:posterVC.window completionHandler:^(NSModalResponse returnCode) {
+        
+    }];
+//    [posterVC beginSheetModalForWindow:[NSApp mainWindow] completionHandler:nil];
+}
+
+//Multiple
+- (IBAction)buttonItemClicked_Multiple:(NSButton *)sender
+{
+    if (![IAPProductsManager defaultManager].isAvailableAllFunction) {
+        [self close];
+        [[KMPurchaseCompareWindowController sharedInstance] showWindow:nil];
+        return;
+    }
+    [self close];
+    KMPDFMultiplePrintWindowController *multipleVC = [[KMPDFMultiplePrintWindowController alloc] initWithPDFDocument:self.pdfDocument];
+//    [multipleVC beginSheetModalForWindow:[NSApp mainWindow] completionHandler:nil];
+    [[NSApp mainWindow] beginSheet:multipleVC.window completionHandler:^(NSModalResponse returnCode) {
+        
+    }];
+}
+
+//Booklet
+- (IBAction)buttonItemClicked_Booklet:(NSButton *)sender
+{
+    if (![IAPProductsManager defaultManager].isAvailableAllFunction) {
+        [self close];
+        [[KMPurchaseCompareWindowController sharedInstance] showWindow:nil];
+        return;
+    }
+    
+    [self close];
+    KMPDFBookletWindowController *bookletVC = [[KMPDFBookletWindowController alloc] initWithDocument:self.pdfDocument];
+//    [bookletVC beginSheetModalForWindow:[NSApp mainWindow] completionHandler:nil];
+    [[NSApp mainWindow] beginSheet:bookletVC.window completionHandler:^(NSModalResponse returnCode) {
+        
+    }];
+}
+
+//取消
+- (IBAction)buttonItemClicked_Cancel:(NSButton *)sender
+{
+    [self close];
+}
+
+- (void)close{
+    if (self.window.isSheet) {
+        [[NSApp mainWindow] endSheet:self.window];
+//        [self dismissSheet:nil];
+    } else {
+        [super close];
+    }
+}
+
+//打印
+- (IBAction)buttonItemClicked_Print:(NSButton *)sender
+{
+    [self.window makeFirstResponder:self.preview];
+    if (self.callBack) {
+        [self close];
+        self.callBack(self.preview.document);
+    }
+}
+
+#pragma mark - NSTextField Delegate
+
+- (void)controlTextDidEndEditing:(NSNotification *)notification
+{
+    NSTextField *textField = notification.object;
+    if ([textField isEqual:self.intputPageRangeTextField]) {
+        if (!self.selectPagesIndexArray) {
+            self.selectPagesIndexArray  = [NSMutableArray array];
+        }else{
+            [self.selectPagesIndexArray removeAllObjects];
+        }
+        
+        KMFileAttribute *fileAttribute = [[KMFileAttribute alloc] init];
+        fileAttribute.filePath = [self.pdfDocument.documentURL path];
+        fileAttribute.bAllPage = NO;
+        fileAttribute.pagesString = self.intputPageRangeTextField.stringValue;
+        if ([fileAttribute fetchSelectPages]) {
+            [self.selectPagesIndexArray addObjectsFromArray: [fileAttribute fetchSelectPages]];
+            if (self.printParameter.printStyle == kPrintStyle_FormsOnly) {
+                [self createOnlyFormDocument];
+            } else {
+                [self produceNewPDFForPreview];
+            }
+        }else{
+            [self showCriticalAlert:nil];
+        }
+    }else if ([textField isEqual:self.currentPageNumberTextField]){
+        PDFPage *targetPage = [self.preview.document pageAtIndex:[self.currentPageNumberTextField.stringValue integerValue] - 1];
+        if (targetPage) {
+            [self.preview goToPage:targetPage];
+        }
+        
+    }
+}
+
+
+- (void)controlTextDidChange:(NSNotification *)notification
+{
+    NSTextField *textField = notification.object;
+    if ([textField isEqual:self.currentPageNumberTextField]) {
+        NSString *string = [self.currentPageNumberTextField.formatter stringFromNumber:[NSNumber numberWithFloat:[self.currentPageNumberTextField.stringValue integerValue]]];
+        if ([string integerValue] > self.preview.document.pageCount) {
+            string = [NSString stringWithFormat:@"%ld",self.preview.document.pageCount];
+        }else if ([string integerValue] <= 0){
+            string = @"1";
+        }
+        self.currentPageNumberTextField.stringValue = string;
+    }
+}
+
+#pragma mark - 开始转圈,隐藏转圈提示
+
+- (void)showWaitting
+{
+    if (!_maskView) {
+        _maskView = [[KMBookletMaskView alloc] initWithFrame:NSMakeRect(0, 0, self.window.frame.size.width, self.window.frame.size.height)];
+    }
+    [self.window.contentView addSubview:_maskView];
+}
+
+- (void)hideWaitting
+{
+    [_maskView removeFromSuperview];
+}
+
+//创建一个新的空白只打印formPDF
+- (void)createOnlyFormDocument {
+      NSMutableArray *pagesArray  = [self fetchPagesArrayWithParameter:self.printParameter.pageSelectStyle];
+    if (pagesArray.count < 1) {
+        NSBeep();
+        return;
+    }
+    if (self.printParameter.reversePages) {
+        pagesArray = [NSMutableArray arrayWithArray:[[pagesArray reverseObjectEnumerator] allObjects]];
+    }
+    
+    //取最大宽高作为画布大小
+    CGFloat maxWidth = 0;
+    CGFloat maxHeight = 0;
+    for (NSInteger i = 0; i < pagesArray.count; i++) {
+        PDFPage *page = [pagesArray objectAtIndex:i];
+        CGRect rect = [page boundsForBox:kPDFDisplayBoxMediaBox];
+        maxWidth = MAX(maxWidth, CGRectGetWidth(rect));
+        maxHeight = MAX(maxHeight, CGRectGetHeight(rect));
+    }
+    
+    //生成画布
+    CGContextRef myPDFContext = NULL;
+   CGRect mediaBox = CGRectMake(0, 0, maxWidth, maxHeight);
+    NSString *newFieldName = [[[self.pdfDocument.documentURL.lastPathComponent stringByDeletingPathExtension] stringByAppendingString:@"_FormOnly"] stringByAppendingPathExtension:@"pdf"];
+    NSString *newPDFPath = [[[NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:[NSBundle mainBundle].bundleIdentifier] stringByAppendingPathComponent:newFieldName];
+    CFStringRef ref = (__bridge CFStringRef)newPDFPath;
+    myPDFContext = PDFContextCreate(&mediaBox, ref);
+    
+    for (NSInteger i = 0; i < pagesArray.count; i++) {
+        PDFPage *page = [pagesArray objectAtIndex:i];
+        mediaBox.size.width = [page boundsForBox:kPDFDisplayBoxMediaBox].size.width;
+        mediaBox.size.height = [page boundsForBox:kPDFDisplayBoxMediaBox].size.height;
+        CFStringRef myKeys[1];
+        CFTypeRef myValues[1];
+        myKeys[0] = kCGPDFContextMediaBox;
+        
+        myValues[0] = (CFTypeRef) CFDataCreate(NULL,(const UInt8 *)&mediaBox, sizeof (CGRect));
+        
+        CFDictionaryRef pageDictionary = CFDictionaryCreate(NULL, (const void **) myKeys,
+                                                            (const void **) myValues, 1,
+                                                            &kCFTypeDictionaryKeyCallBacks,
+                                                            & kCFTypeDictionaryValueCallBacks);
+        CGPDFContextBeginPage(myPDFContext, pageDictionary);
+        /*-------------绘制页开始---------------------**/
+        NSMutableArray *array = [NSMutableArray array];
+        for (NSInteger i = 0; i < page.annotations.count; i++) {
+            PDFAnnotation *annotation = [page.annotations objectAtIndex:i];
+            if ([annotation isKindOfClass:[PDFAnnotationButtonWidget class]] ||
+                [annotation isKindOfClass:[PDFAnnotationTextWidget class]] ||
+                [annotation isKindOfClass:[PDFAnnotationChoiceWidget class]]) {
+                [array addObject:annotation];
+            }
+        }
+        for (NSInteger i = 0; i < array.count; i++) {
+            PDFAnnotation *annotation = [array objectAtIndex:i];
+            CGRect newPosition = annotation.bounds;
+//            if (page.rotation == 90) {
+//                newPosition = CGRectMake(CGRectGetMinY(annotation.bounds), CGRectGetHeight(mediaBox) - CGRectGetMaxX(annotation.bounds), CGRectGetHeight(annotation.bounds), CGRectGetWidth(annotation.bounds));
+//            } else if (page.rotation == 180) {
+//                newPosition = CGRectMake(CGRectGetMaxX(mediaBox) - CGRectGetMaxX(annotation.bounds), CGRectGetMaxY(mediaBox) - CGRectGetMaxY(annotation.bounds), CGRectGetWidth(annotation.bounds), CGRectGetHeight(annotation.bounds));
+//            } else if (page.rotation == 270) {
+//                newPosition = CGRectMake(CGRectGetMaxX(mediaBox) - CGRectGetMaxY(annotation.bounds), CGRectGetMinX(annotation.bounds), CGRectGetHeight(annotation.bounds), CGRectGetWidth(annotation.bounds));
+//            }
+            if ([annotation isKindOfClass:[PDFAnnotationButtonWidget class]]) {
+                PDFAnnotationButtonWidget *actulWidget = (PDFAnnotationButtonWidget *)annotation;
+                if (actulWidget.controlType == kPDFWidgetCheckBoxControl) {
+                    CGContextSaveGState(myPDFContext);
+                    /* 如果没有签署,那么不画
+                     CGContextAddRect(myPDFContext, newPosition);
+                     CGContextStrokePath(myPDFContext);*/
+                    if (actulWidget.state) {
+                        CGFloat originalWidth = CGRectGetWidth(newPosition);
+                        CGFloat originalHeight = CGRectGetHeight(newPosition);
+                        CGFloat min = MIN(CGRectGetWidth(newPosition), CGRectGetHeight(newPosition));
+                        newPosition.size.width = min;
+                        newPosition.size.height = min;
+                        CGContextTranslateCTM(myPDFContext, newPosition.origin.x + (originalWidth - newPosition.size.width)/2.0, newPosition.origin.y + (originalHeight - newPosition.size.height /2.0));
+                        CGFloat x = newPosition.size.width/7;
+                        CGFloat y = newPosition.size.height/5;
+                        CGContextMoveToPoint(myPDFContext, x,newPosition.size.height/2.0);
+                        CGContextAddLineToPoint(myPDFContext,(newPosition.size.width-2*x)/3.0+x, y);
+                        CGContextAddLineToPoint(myPDFContext, newPosition.size.width-x, newPosition.size.height-y);
+                        CGContextStrokePath(myPDFContext);
+                    }
+                    CGContextRestoreGState(myPDFContext);
+                } else if (actulWidget.controlType == kPDFWidgetRadioButtonControl) {
+                    CGContextSaveGState(myPDFContext);
+                    /*如果没有签署,那么不画
+                     CGContextStrokeEllipseInRect(myPDFContext, newPosition);*/
+                    if (actulWidget.state) {
+                        CGContextSetStrokeColorWithColor(myPDFContext, [NSColor blackColor].CGColor);
+                        CGContextSetFillColorWithColor(myPDFContext, [NSColor blackColor].CGColor);
+                        
+                        CGFloat x = newPosition.size.width/9;
+                        CGContextFillEllipseInRect(myPDFContext, CGRectInset(newPosition, x, x));
+                    }
+                    CGContextRestoreGState(myPDFContext);
+                } else {
+                    CGContextSaveGState(myPDFContext);
+                    CGContextAddRect(myPDFContext, newPosition);
+                    CGContextSetFillColorWithColor(myPDFContext, [NSColor colorWithRed:220/255.0 green:220/255.0 blue:220/255.0 alpha:1.0].CGColor);
+                    CGContextFillPath(myPDFContext);
+                    CGContextRestoreGState(myPDFContext);
+                    
+                    if (actulWidget.caption.length > 0) {
+                        [NSGraphicsContext saveGraphicsState];
+                        NSGraphicsContext *context = [NSGraphicsContext graphicsContextWithGraphicsPort:myPDFContext flipped:NO];
+                        [NSGraphicsContext setCurrentContext:context];
+                        NSDictionary *attributeDic = @{NSFontAttributeName:actulWidget.font,NSForegroundColorAttributeName:[(PDFAnnotationTextWidget *)actulWidget fontColor]};
+                        CGSize size = [actulWidget.caption sizeWithAttributes:attributeDic];
+                        CGRect drawRect = newPosition;
+                        if (CGRectGetWidth(drawRect) > size.width) {
+                            drawRect.origin.x += (CGRectGetWidth(drawRect) - size.width)/2.0;
+                        }
+                        if (CGRectGetHeight(drawRect) > size.height) {
+                            drawRect.origin.y += (CGRectGetHeight(drawRect) - size.height)/2.0;
+                        }
+                        drawRect.size.height = size.height;
+                        [actulWidget.caption drawInRect:drawRect withAttributes:@{NSFontAttributeName:actulWidget.font,NSForegroundColorAttributeName:[(PDFAnnotationTextWidget *)actulWidget fontColor]}];
+                        [NSGraphicsContext restoreGraphicsState];
+                    }
+                }
+            } else if ([annotation isKindOfClass:[PDFAnnotationTextWidget class]]) {
+                PDFAnnotationTextWidget *actualWidget = (PDFAnnotationTextWidget *)annotation;
+                if ([actualWidget stringValue] > 0) {
+                    [NSGraphicsContext saveGraphicsState];
+                    NSGraphicsContext *context = [NSGraphicsContext graphicsContextWithGraphicsPort:myPDFContext flipped:NO];
+                    [NSGraphicsContext setCurrentContext:context];
+                    
+                    NSDictionary *attributeDic = @{NSFontAttributeName:actualWidget.font,NSForegroundColorAttributeName:[actualWidget fontColor]};
+                    
+                    if (actualWidget.isMultiline) {
+                        NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:actualWidget.stringValue];
+                        [attributeString setAlignment:actualWidget.alignment range:NSMakeRange(0, attributeString.length)];
+                        [attributeString addAttributes:attributeDic range:NSMakeRange(0, attributeString.length)];
+                        [attributeString drawInRect:newPosition];
+                    } else {
+                        CGSize size = [actualWidget.stringValue sizeWithAttributes:attributeDic];
+                        
+                        if (size.height < newPosition.size.height) {
+                            newPosition.origin.y = CGRectGetMaxY(newPosition) - size.height;
+                            newPosition.size.height = size.height;
+                        }
+                        
+                        NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:actualWidget.stringValue];
+                        [attributeString addAttributes:attributeDic range:NSMakeRange(0, attributeString.length)];
+                        [attributeString setAlignment:actualWidget.alignment range:NSMakeRange(0, attributeString.length)];
+                        [attributeString drawInRect:newPosition];
+                    }
+                    [NSGraphicsContext restoreGraphicsState];
+                }
+                
+            } else if([annotation isKindOfClass:[PDFAnnotationChoiceWidget class]]){
+                PDFAnnotationChoiceWidget *actualWidget = (PDFAnnotationChoiceWidget *)annotation;
+                if (actualWidget.isListChoice) {
+                    NSDictionary *attributeDict = @{NSFontAttributeName:actualWidget.font,NSForegroundColorAttributeName:[actualWidget fontColor]};
+                    CGFloat fontHeight = [actualWidget.stringValue sizeWithAttributes:attributeDict].height;
+                    NSGraphicsContext *context = [NSGraphicsContext graphicsContextWithGraphicsPort:myPDFContext flipped:NO];
+                    [NSGraphicsContext setCurrentContext:context];
+                    for (NSInteger i = 0; i < actualWidget.choices.count; i++) {
+                        CGRect drawRect = CGRectZero;
+                        CGFloat drawedHeight = i * fontHeight;
+                        CGFloat drawingHeight = fontHeight;
+                        drawRect.origin.y = MAX(CGRectGetMaxY(newPosition) - drawedHeight - drawingHeight,CGRectGetMinY(newPosition));
+                        drawRect.origin.x = newPosition.origin.x;
+                        drawRect.size.width = CGRectGetWidth(newPosition);
+                        drawRect.size.height = MIN(fontHeight, CGRectGetHeight(newPosition) - drawedHeight);
+                        
+                        NSString *drawString = [actualWidget.choices objectAtIndex:i];
+                        if ([drawString isEqualToString:actualWidget.stringValue]) {
+                            CGContextAddRect(myPDFContext, drawRect);
+                            CGContextSetFillColorWithColor(myPDFContext, [NSColor colorWithRed:155/255.0 green:155/255.0 blue:155/255.0 alpha:1.0].CGColor);
+                            CGContextFillPath(myPDFContext);
+                        }
+                        [drawString drawInRect:drawRect withAttributes:attributeDict];
+                        
+                    }
+                    
+                    [NSGraphicsContext restoreGraphicsState];
+                } else {
+                    CGContextSaveGState(myPDFContext);
+                    [NSGraphicsContext saveGraphicsState];
+                    NSGraphicsContext *context = [NSGraphicsContext graphicsContextWithGraphicsPort:myPDFContext flipped:NO];
+                    [NSGraphicsContext setCurrentContext:context];
+                    
+                    NSDictionary *attributeDic = @{NSFontAttributeName:actualWidget.font,NSForegroundColorAttributeName:[actualWidget fontColor]};
+                    
+                    CGSize size = [actualWidget.stringValue sizeWithAttributes:attributeDic];
+                    CGRect drawRect = newPosition;
+                    if (CGRectGetWidth(drawRect) > size.width) {
+                        drawRect.origin.x += (CGRectGetWidth(drawRect) - size.width)/2.0;
+                    }
+                    if (CGRectGetHeight(drawRect) > size.height) {
+                        drawRect.origin.y += (CGRectGetHeight(drawRect) - size.height)/2.0;
+                    }
+                    drawRect.size.height = size.height;
+                    [[actualWidget stringValue] drawInRect:drawRect withAttributes:attributeDic];
+                    
+                    [NSGraphicsContext restoreGraphicsState];
+                    CGContextRestoreGState(myPDFContext);
+                }
+            } else {
+                CGContextSaveGState(myPDFContext);
+                CGContextAddRect(myPDFContext, newPosition);
+                CGContextSetFillColorWithColor(myPDFContext, [NSColor yellowColor].CGColor);
+                CGContextFillPath(myPDFContext);
+                CGContextRestoreGState(myPDFContext);
+            }
+        }
+        /*-------------绘制页结束---------------------**/
+        CGPDFContextEndPage(myPDFContext);
+        CFRelease(pageDictionary);
+        CFRelease(myValues[0]);
+        
+    }
+    CGPDFContextClose(myPDFContext);
+    CGContextRelease(myPDFContext);
+
+    self.preview.document = [[PDFDocument alloc] initWithURL:[NSURL fileURLWithPath:newPDFPath]];
+    
+    [self.preview goToFirstPage:nil];
+    [self adjustPreviewSizeWithPage:[self.preview.document pageAtIndex:0]];
+    
+    self.currentPageNumberTextField.stringValue = @"1";
+    self.totalPageNumberLabel.stringValue = [NSString stringWithFormat:@" / %ld",pagesArray.count];
+}
+
+//创建一个图形上下文对象
+CGContextRef PDFContextCreate (const CGRect *inMediaBox,
+                                 CFStringRef path)
+{
+    CGContextRef myOutContext = NULL;
+    CFURLRef url;
+
+    url = CFURLCreateWithFileSystemPath (NULL, // 1
+                                         path,
+                                         kCFURLPOSIXPathStyle,
+                                         false);
+    if (url != NULL) {
+        myOutContext = CGPDFContextCreateWithURL (url,// 2
+                                                  inMediaBox,
+                                                  NULL);
+        CFRelease(url);// 3
+    }
+    return myOutContext;// 4
+}
+@end

+ 413 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/PrintManage/KMPDFPrintManageWindowController.xib

@@ -0,0 +1,413 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
+        <plugIn identifier="com.apple.pdfkit.ibplugin" version="17701"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMPDFPrintManageWindowController">
+            <connections>
+                <outlet property="allPageButton" destination="pgH-yd-0lW" id="52d-vO-53d"/>
+                <outlet property="bookletButton" destination="bjU-oe-OO9" id="DX7-c5-Nge"/>
+                <outlet property="cancelButton" destination="t9u-rG-tPj" id="sZP-mH-TaG"/>
+                <outlet property="currentPageButton" destination="EH0-aU-6Tg" id="DyP-w5-and"/>
+                <outlet property="currentPageNumberTextField" destination="nLm-kF-Lr3" id="X6n-Ck-5PP"/>
+                <outlet property="evenPageButton" destination="rds-KS-EKa" id="1Sd-4r-g2q"/>
+                <outlet property="handInputPageButton" destination="BCT-p3-WCs" id="jOp-kn-QdM"/>
+                <outlet property="intputPageRangeTextField" destination="4MZ-YN-VjA" id="AKk-F7-w3x"/>
+                <outlet property="mutilpleButton" destination="gKp-bS-GEB" id="x4L-a1-2ic"/>
+                <outlet property="oddPageButton" destination="vQc-HR-vGj" id="Vjk-9l-Tku"/>
+                <outlet property="pagesSettingLabel" destination="Xkk-qV-1r9" id="aUN-E0-md0"/>
+                <outlet property="posterButton" destination="qeG-v0-Q4X" id="A9p-pJ-jZu"/>
+                <outlet property="preview" destination="XXu-fW-s3c" id="7Dv-cZ-caR"/>
+                <outlet property="previewHeightContraint" destination="fWX-Q7-fkd" id="VbF-hc-RGH"/>
+                <outlet property="previewWidthContraint" destination="Bck-Rf-dTt" id="FNk-xD-V4c"/>
+                <outlet property="printButton" destination="dcm-De-kMv" id="ry3-Ol-Xju"/>
+                <outlet property="printDocumentAndMarkupsButton" destination="Ah9-gi-O2t" id="6mX-wf-e8S"/>
+                <outlet property="printDocumentAndStampsButton" destination="XXE-O4-7Kg" id="mRe-ea-c4L"/>
+                <outlet property="printDocumentButton" destination="AVA-Hx-3Ra" id="cwi-4o-BSu"/>
+                <outlet property="printFormOnlyButton" destination="FIu-t0-fhI" id="M1r-fp-tkj"/>
+                <outlet property="printSettingLabel" destination="ZaJ-db-FUf" id="1RP-Oc-CvQ"/>
+                <outlet property="reversePageButton" destination="gT7-6l-HuN" id="b4T-8y-d3O"/>
+                <outlet property="totalPageNumberLabel" destination="Qbl-lx-j1e" id="BNa-Pv-fLn"/>
+                <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" visibleAtLaunch="NO" animationBehavior="default" id="F0z-JX-Cv5">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="196" y="240" width="615" height="409"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
+            <value key="minSize" type="size" width="615" height="409"/>
+            <value key="maxSize" type="size" width="615" height="409"/>
+            <view key="contentView" wantsLayer="YES" id="se5-gp-TjO">
+                <rect key="frame" x="0.0" y="0.0" width="615" height="409"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <box borderType="none" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="U60-RF-D7o">
+                        <rect key="frame" x="305" y="226" width="313" height="154"/>
+                        <view key="contentView" id="Xyb-sj-iIV">
+                            <rect key="frame" x="0.0" y="0.0" width="313" height="154"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="pgH-yd-0lW">
+                                    <rect key="frame" x="8" y="111" width="82" height="18"/>
+                                    <buttonCell key="cell" type="radio" title="All Pages" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="gOt-2n-4HE">
+                                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="buttonItemClicked_AllPages:" target="-2" id="V6X-gR-CUA"/>
+                                    </connections>
+                                </button>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="rds-KS-EKa">
+                                    <rect key="frame" x="8" y="33" width="96" height="18"/>
+                                    <buttonCell key="cell" type="radio" title="Even Pages" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="je0-tL-NAu">
+                                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="buttonItemClicked_EvenPages:" target="-2" id="wRx-Fd-kHy"/>
+                                    </connections>
+                                </button>
+                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Xkk-qV-1r9">
+                                    <rect key="frame" x="8" y="133" width="88" height="16"/>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Pages Setting" id="KcC-vv-fdJ">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="BCT-p3-WCs">
+                                    <rect key="frame" x="8" y="8" width="18" height="18"/>
+                                    <buttonCell key="cell" type="radio" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="lyg-R8-Dv1">
+                                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="buttonItemClicked_handInputPages:" target="-2" id="YO8-5H-4mc"/>
+                                    </connections>
+                                </button>
+                                <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="4MZ-YN-VjA">
+                                    <rect key="frame" x="24" y="7" width="180" height="21"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="180" id="nUY-Qh-BYW"/>
+                                    </constraints>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="Kcy-Li-cMR">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="EH0-aU-6Tg">
+                                    <rect key="frame" x="8" y="85" width="106" height="18"/>
+                                    <buttonCell key="cell" type="radio" title="Current Page" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="V4v-9J-CRr">
+                                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="buttonItemClicked_CurrentPage:" target="-2" id="Uba-jw-Oin"/>
+                                    </connections>
+                                </button>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vQc-HR-vGj">
+                                    <rect key="frame" x="8" y="59" width="93" height="18"/>
+                                    <buttonCell key="cell" type="radio" title="Odd Pages" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="OyA-yt-5SW">
+                                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="buttonItemClicked_OddPages:" target="-2" id="eYA-ju-IP6"/>
+                                    </connections>
+                                </button>
+                            </subviews>
+                            <constraints>
+                                <constraint firstItem="Xkk-qV-1r9" firstAttribute="leading" secondItem="Xyb-sj-iIV" secondAttribute="leading" constant="10" id="1Go-03-K5o"/>
+                                <constraint firstItem="EH0-aU-6Tg" firstAttribute="top" secondItem="pgH-yd-0lW" secondAttribute="bottom" constant="10" id="4gk-FK-Nnh"/>
+                                <constraint firstItem="4MZ-YN-VjA" firstAttribute="leading" secondItem="BCT-p3-WCs" secondAttribute="trailing" id="62W-K2-lGc"/>
+                                <constraint firstItem="pgH-yd-0lW" firstAttribute="top" secondItem="Xkk-qV-1r9" secondAttribute="bottom" constant="5" id="Gml-pt-H9b"/>
+                                <constraint firstAttribute="bottom" secondItem="BCT-p3-WCs" secondAttribute="bottom" constant="10" id="ISI-kZ-aKn"/>
+                                <constraint firstItem="rds-KS-EKa" firstAttribute="top" secondItem="vQc-HR-vGj" secondAttribute="bottom" constant="10" id="RoM-bE-8Ga"/>
+                                <constraint firstItem="Xkk-qV-1r9" firstAttribute="top" secondItem="Xyb-sj-iIV" secondAttribute="top" constant="5" id="WTa-TJ-B6F"/>
+                                <constraint firstItem="rds-KS-EKa" firstAttribute="leading" secondItem="vQc-HR-vGj" secondAttribute="leading" id="Xgh-dy-2C1"/>
+                                <constraint firstItem="BCT-p3-WCs" firstAttribute="top" secondItem="rds-KS-EKa" secondAttribute="bottom" constant="10" id="Zug-57-UEL"/>
+                                <constraint firstItem="4MZ-YN-VjA" firstAttribute="centerY" secondItem="BCT-p3-WCs" secondAttribute="centerY" id="fk8-Gb-wft"/>
+                                <constraint firstItem="EH0-aU-6Tg" firstAttribute="leading" secondItem="pgH-yd-0lW" secondAttribute="leading" id="hjK-xs-kA6"/>
+                                <constraint firstItem="pgH-yd-0lW" firstAttribute="leading" secondItem="Xyb-sj-iIV" secondAttribute="leading" constant="10" id="l7M-dS-PuA"/>
+                                <constraint firstItem="BCT-p3-WCs" firstAttribute="leading" secondItem="rds-KS-EKa" secondAttribute="leading" id="ofL-M1-2mt"/>
+                                <constraint firstItem="vQc-HR-vGj" firstAttribute="top" secondItem="EH0-aU-6Tg" secondAttribute="bottom" constant="10" id="pBj-Oe-KrI"/>
+                                <constraint firstItem="rds-KS-EKa" firstAttribute="leading" secondItem="pgH-yd-0lW" secondAttribute="leading" id="rnt-4F-QBe"/>
+                            </constraints>
+                        </view>
+                    </box>
+                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="qeG-v0-Q4X">
+                        <rect key="frame" x="13" y="7" width="83" height="33"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="21" id="MuQ-7E-2dY"/>
+                            <constraint firstAttribute="width" constant="69" id="x2D-ky-Zzx"/>
+                        </constraints>
+                        <buttonCell key="cell" type="push" title="Poster" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="JAt-Ez-mTu">
+                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                        </buttonCell>
+                        <connections>
+                            <action selector="buttonItemClicked_Poster:" target="-2" id="Ys2-xQ-r4B"/>
+                        </connections>
+                    </button>
+                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gKp-bS-GEB">
+                        <rect key="frame" x="102" y="7" width="83" height="33"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="69" id="dfv-YT-mbr"/>
+                            <constraint firstAttribute="height" constant="21" id="x1n-6h-hSt"/>
+                        </constraints>
+                        <buttonCell key="cell" type="push" title="Multiple" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="oEB-ug-WtK">
+                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                        </buttonCell>
+                        <connections>
+                            <action selector="buttonItemClicked_Multiple:" target="-2" id="fgQ-7h-dZB"/>
+                        </connections>
+                    </button>
+                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="bjU-oe-OO9">
+                        <rect key="frame" x="191" y="7" width="83" height="33"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="21" id="UJy-OB-SyG"/>
+                            <constraint firstAttribute="width" constant="69" id="tf3-q9-Mef"/>
+                        </constraints>
+                        <buttonCell key="cell" type="push" title="Booklet" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="ZEu-sM-mYr">
+                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                        </buttonCell>
+                        <connections>
+                            <action selector="buttonItemClicked_Booklet:" target="-2" id="1Gv-Hy-6E2"/>
+                        </connections>
+                    </button>
+                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="t9u-rG-tPj">
+                        <rect key="frame" x="430" y="7" width="83" height="33"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="69" id="6FP-vB-bCr"/>
+                            <constraint firstAttribute="height" constant="21" id="lIu-jG-3qm"/>
+                        </constraints>
+                        <buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="16K-Vm-FeC">
+                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                            <string key="keyEquivalent" base64-UTF8="YES">
+Gw
+</string>
+                        </buttonCell>
+                        <connections>
+                            <action selector="buttonItemClicked_Cancel:" target="-2" id="R8e-SR-qbO"/>
+                        </connections>
+                    </button>
+                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="dcm-De-kMv">
+                        <rect key="frame" x="519" y="7" width="83" height="33"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="21" id="9rB-pK-Wb7"/>
+                            <constraint firstAttribute="width" constant="69" id="MAm-x2-TtV"/>
+                        </constraints>
+                        <buttonCell key="cell" type="push" title="Print" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="SFh-D4-Sve">
+                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                            <string key="keyEquivalent" base64-UTF8="YES">
+DQ
+</string>
+                        </buttonCell>
+                        <connections>
+                            <action selector="buttonItemClicked_Print:" target="-2" id="vAS-pA-rD4"/>
+                        </connections>
+                    </button>
+                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="ZgV-v3-f2m">
+                        <rect key="frame" x="0.0" y="50" width="308" height="359"/>
+                        <subviews>
+                            <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Nse-wm-75u">
+                                <rect key="frame" x="62" y="8" width="26" height="26"/>
+                                <buttonCell key="cell" type="round" bezelStyle="circular" image="NSGoLeftTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="e8r-Bo-kH1">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                                <connections>
+                                    <action selector="buttonItemClicked_PreviousPage:" target="-2" id="x98-3F-E2J"/>
+                                </connections>
+                            </button>
+                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="rpx-mQ-8Ow">
+                                <rect key="frame" x="125" y="10" width="58" height="21"/>
+                                <subviews>
+                                    <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nLm-kF-Lr3">
+                                        <rect key="frame" x="0.0" y="0.0" width="40" height="21"/>
+                                        <constraints>
+                                            <constraint firstAttribute="width" constant="40" id="Rvv-bR-vYn"/>
+                                        </constraints>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="center" title="20" drawsBackground="YES" id="6HZ-77-Ian">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Qbl-lx-j1e">
+                                        <rect key="frame" x="38" y="3" width="22" height="16"/>
+                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="/10" id="0Jg-Wj-R6H">
+                                            <font key="font" metaFont="system"/>
+                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                        </textFieldCell>
+                                    </textField>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstItem="Qbl-lx-j1e" firstAttribute="centerY" secondItem="nLm-kF-Lr3" secondAttribute="centerY" id="QgB-SM-Yaq"/>
+                                    <constraint firstAttribute="bottom" secondItem="nLm-kF-Lr3" secondAttribute="bottom" id="VfH-IK-1dk"/>
+                                    <constraint firstAttribute="trailing" secondItem="Qbl-lx-j1e" secondAttribute="trailing" id="Wu8-Fs-6O5"/>
+                                    <constraint firstItem="Qbl-lx-j1e" firstAttribute="leading" secondItem="nLm-kF-Lr3" secondAttribute="trailing" id="Xps-2M-iPY"/>
+                                    <constraint firstItem="nLm-kF-Lr3" firstAttribute="leading" secondItem="rpx-mQ-8Ow" secondAttribute="leading" id="Y2G-h2-Ofa"/>
+                                    <constraint firstItem="nLm-kF-Lr3" firstAttribute="top" secondItem="rpx-mQ-8Ow" secondAttribute="top" id="kmZ-Xt-sN8"/>
+                                </constraints>
+                            </customView>
+                            <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="YtV-IM-Ozs">
+                                <rect key="frame" x="220" y="8" width="26" height="26"/>
+                                <buttonCell key="cell" type="round" bezelStyle="circular" image="NSGoRightTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="fps-GX-cx9">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                                <connections>
+                                    <action selector="buttonItemClicked_NextPage:" target="-2" id="Uyx-oc-3R9"/>
+                                </connections>
+                            </button>
+                            <pdfView autoresizesSubviews="NO" wantsLayer="YES" displayMode="singlePage" displaysPageBreaks="NO" autoScales="YES" translatesAutoresizingMaskIntoConstraints="NO" id="XXu-fW-s3c">
+                                <rect key="frame" x="50" y="35" width="207" height="289"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="207" id="Bck-Rf-dTt"/>
+                                    <constraint firstAttribute="height" constant="289" id="fWX-Q7-fkd"/>
+                                </constraints>
+                            </pdfView>
+                        </subviews>
+                        <constraints>
+                            <constraint firstItem="rpx-mQ-8Ow" firstAttribute="centerX" secondItem="ZgV-v3-f2m" secondAttribute="centerX" id="0Mh-mT-lGe"/>
+                            <constraint firstItem="rpx-mQ-8Ow" firstAttribute="leading" secondItem="Nse-wm-75u" secondAttribute="trailing" constant="40" id="OAI-Op-y2A"/>
+                            <constraint firstItem="YtV-IM-Ozs" firstAttribute="centerY" secondItem="Nse-wm-75u" secondAttribute="centerY" id="Qwb-6V-zrR"/>
+                            <constraint firstItem="rpx-mQ-8Ow" firstAttribute="centerY" secondItem="Nse-wm-75u" secondAttribute="centerY" id="TUj-SV-D8j"/>
+                            <constraint firstItem="XXu-fW-s3c" firstAttribute="centerX" secondItem="ZgV-v3-f2m" secondAttribute="centerX" id="YO0-jn-5pf"/>
+                            <constraint firstItem="YtV-IM-Ozs" firstAttribute="leading" secondItem="rpx-mQ-8Ow" secondAttribute="trailing" constant="40" id="m2n-7e-e9Z"/>
+                            <constraint firstAttribute="bottom" secondItem="rpx-mQ-8Ow" secondAttribute="bottom" constant="10" id="nXO-OY-zbL"/>
+                            <constraint firstItem="XXu-fW-s3c" firstAttribute="centerY" secondItem="ZgV-v3-f2m" secondAttribute="centerY" id="yNw-uY-f99"/>
+                        </constraints>
+                    </customView>
+                    <box borderType="none" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="Wdy-az-3mQ">
+                        <rect key="frame" x="305" y="65" width="313" height="120"/>
+                        <view key="contentView" id="NCs-me-Xjl">
+                            <rect key="frame" x="0.0" y="0.0" width="313" height="120"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ah9-gi-O2t">
+                                    <rect key="frame" x="8" y="51" width="175" height="18"/>
+                                    <buttonCell key="cell" type="radio" title="Document and Markups " bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="H3i-s0-ySF">
+                                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="buttonItemClicked_PrintDocumentAndMarkups:" target="-2" id="v8T-7O-uTA"/>
+                                    </connections>
+                                </button>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XXE-O4-7Kg">
+                                    <rect key="frame" x="8" y="25" width="164" height="18"/>
+                                    <buttonCell key="cell" type="radio" title="Document and Stamps" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="UiM-6d-bMn">
+                                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="buttonItemClicked_PrintDocumentAndStamps:" target="-2" id="Vlj-Q6-TME"/>
+                                    </connections>
+                                </button>
+                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ZaJ-db-FUf">
+                                    <rect key="frame" x="8" y="99" width="80" height="16"/>
+                                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Print Setting" id="4AH-bh-FvO">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="AVA-Hx-3Ra">
+                                    <rect key="frame" x="8" y="77" width="89" height="18"/>
+                                    <buttonCell key="cell" type="radio" title="Document" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="5Oc-S7-zID">
+                                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="buttonItemClicked_PrintDocumentOnly:" target="-2" id="Q12-ia-8QB"/>
+                                    </connections>
+                                </button>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="FIu-t0-fhI">
+                                    <rect key="frame" x="8" y="-1" width="96" height="18"/>
+                                    <buttonCell key="cell" type="radio" title="Forms Only" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="beg-RF-9cd">
+                                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="buttonItemClicked_PrintFormOnly:" target="-2" id="F1Z-oB-AnW"/>
+                                    </connections>
+                                </button>
+                            </subviews>
+                            <constraints>
+                                <constraint firstItem="FIu-t0-fhI" firstAttribute="top" secondItem="XXE-O4-7Kg" secondAttribute="bottom" constant="10" id="1E4-da-orx"/>
+                                <constraint firstAttribute="bottom" secondItem="FIu-t0-fhI" secondAttribute="bottom" id="6t6-pR-txU"/>
+                                <constraint firstItem="XXE-O4-7Kg" firstAttribute="leading" secondItem="AVA-Hx-3Ra" secondAttribute="leading" id="Ab7-ZK-4GJ"/>
+                                <constraint firstItem="Ah9-gi-O2t" firstAttribute="top" secondItem="AVA-Hx-3Ra" secondAttribute="bottom" constant="10" id="Ai1-K6-881"/>
+                                <constraint firstItem="Ah9-gi-O2t" firstAttribute="leading" secondItem="AVA-Hx-3Ra" secondAttribute="leading" id="EJT-2v-xjE"/>
+                                <constraint firstItem="ZaJ-db-FUf" firstAttribute="top" secondItem="NCs-me-Xjl" secondAttribute="top" constant="5" id="EM5-NK-pCo"/>
+                                <constraint firstItem="AVA-Hx-3Ra" firstAttribute="leading" secondItem="ZaJ-db-FUf" secondAttribute="leading" id="U3O-3v-gJF"/>
+                                <constraint firstItem="FIu-t0-fhI" firstAttribute="leading" secondItem="XXE-O4-7Kg" secondAttribute="leading" id="doW-fQ-Xfv"/>
+                                <constraint firstItem="ZaJ-db-FUf" firstAttribute="leading" secondItem="NCs-me-Xjl" secondAttribute="leading" constant="10" id="eid-Qj-eBy"/>
+                                <constraint firstItem="XXE-O4-7Kg" firstAttribute="top" secondItem="Ah9-gi-O2t" secondAttribute="bottom" constant="10" id="kvT-JO-VOS"/>
+                                <constraint firstItem="AVA-Hx-3Ra" firstAttribute="top" secondItem="ZaJ-db-FUf" secondAttribute="bottom" constant="5" id="wvn-Xx-B3I"/>
+                            </constraints>
+                        </view>
+                    </box>
+                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gT7-6l-HuN">
+                        <rect key="frame" x="316" y="198" width="115" height="18"/>
+                        <buttonCell key="cell" type="check" title="Reverse Pages" bezelStyle="regularSquare" imagePosition="left" inset="2" id="iPo-36-LUf">
+                            <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                            <font key="font" metaFont="system"/>
+                        </buttonCell>
+                        <connections>
+                            <action selector="buttonItemClicked_Reversepages:" target="-2" id="2VZ-U5-h7Q"/>
+                        </connections>
+                    </button>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="t9u-rG-tPj" firstAttribute="centerY" secondItem="qeG-v0-Q4X" secondAttribute="centerY" id="0ZC-Y2-r8n"/>
+                    <constraint firstAttribute="trailing" secondItem="U60-RF-D7o" secondAttribute="trailing" id="1bG-V4-2wC"/>
+                    <constraint firstItem="gT7-6l-HuN" firstAttribute="top" secondItem="U60-RF-D7o" secondAttribute="bottom" constant="15" id="2Zt-Bp-0IR"/>
+                    <constraint firstItem="bjU-oe-OO9" firstAttribute="leading" secondItem="gKp-bS-GEB" secondAttribute="trailing" constant="20" id="4Yh-dE-kYw"/>
+                    <constraint firstAttribute="trailing" secondItem="dcm-De-kMv" secondAttribute="trailing" constant="20" id="6UZ-30-ReU"/>
+                    <constraint firstAttribute="bottom" secondItem="ZgV-v3-f2m" secondAttribute="bottom" constant="50" id="DCN-dM-e1k"/>
+                    <constraint firstItem="qeG-v0-Q4X" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" constant="20" id="Jjg-uk-QLv"/>
+                    <constraint firstAttribute="bottom" secondItem="dcm-De-kMv" secondAttribute="bottom" constant="14" id="K5d-jd-luI"/>
+                    <constraint firstAttribute="trailing" secondItem="Wdy-az-3mQ" secondAttribute="trailing" id="RFP-K8-mTe"/>
+                    <constraint firstItem="ZgV-v3-f2m" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" id="WKJ-mL-Wtb"/>
+                    <constraint firstItem="U60-RF-D7o" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" constant="31" id="XDd-XE-R0A"/>
+                    <constraint firstItem="dcm-De-kMv" firstAttribute="leading" secondItem="t9u-rG-tPj" secondAttribute="trailing" constant="20" id="Yf4-BL-W76"/>
+                    <constraint firstItem="gKp-bS-GEB" firstAttribute="leading" secondItem="qeG-v0-Q4X" secondAttribute="trailing" constant="20" id="bWX-SB-GXl"/>
+                    <constraint firstItem="Wdy-az-3mQ" firstAttribute="top" secondItem="gT7-6l-HuN" secondAttribute="bottom" constant="16" id="bYZ-6W-vfU"/>
+                    <constraint firstItem="bjU-oe-OO9" firstAttribute="centerY" secondItem="qeG-v0-Q4X" secondAttribute="centerY" id="izh-rF-UM4"/>
+                    <constraint firstItem="Wdy-az-3mQ" firstAttribute="leading" secondItem="U60-RF-D7o" secondAttribute="leading" id="mwi-dg-JwT"/>
+                    <constraint firstItem="gKp-bS-GEB" firstAttribute="centerY" secondItem="qeG-v0-Q4X" secondAttribute="centerY" id="oBr-ic-gO5"/>
+                    <constraint firstItem="gT7-6l-HuN" firstAttribute="leading" secondItem="ZgV-v3-f2m" secondAttribute="trailing" constant="10" id="wSO-dQ-muW"/>
+                    <constraint firstItem="ZgV-v3-f2m" firstAttribute="width" secondItem="se5-gp-TjO" secondAttribute="width" multiplier="0.5" id="xrc-hH-C53"/>
+                    <constraint firstItem="U60-RF-D7o" firstAttribute="leading" secondItem="ZgV-v3-f2m" secondAttribute="trailing" id="y3w-rQ-kEm"/>
+                    <constraint firstItem="ZgV-v3-f2m" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" id="y9S-4X-NH8"/>
+                    <constraint firstItem="dcm-De-kMv" firstAttribute="centerY" secondItem="qeG-v0-Q4X" secondAttribute="centerY" id="ykI-aa-HjS"/>
+                </constraints>
+            </view>
+            <contentBorderThickness minY="50"/>
+            <connections>
+                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
+            </connections>
+            <point key="canvasLocation" x="-33.5" y="-339.5"/>
+        </window>
+    </objects>
+    <resources>
+        <image name="NSGoLeftTemplate" width="10" height="14"/>
+        <image name="NSGoRightTemplate" width="10" height="14"/>
+    </resources>
+</document>

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

@@ -1402,6 +1402,54 @@
 		AD1D48522AFB8510007AC1F0 /* KMMergeTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1D48512AFB8510007AC1F0 /* KMMergeTableViewCell.xib */; };
 		AD1D48532AFB8510007AC1F0 /* KMMergeTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1D48512AFB8510007AC1F0 /* KMMergeTableViewCell.xib */; };
 		AD1D48542AFB8510007AC1F0 /* KMMergeTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1D48512AFB8510007AC1F0 /* KMMergeTableViewCell.xib */; };
+		AD1FE8142BD7C98300AA4A9B /* KMPDFMultipleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE7F12BD7C98300AA4A9B /* KMPDFMultipleManager.m */; };
+		AD1FE8152BD7C98300AA4A9B /* KMPDFMultipleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE7F12BD7C98300AA4A9B /* KMPDFMultipleManager.m */; };
+		AD1FE8162BD7C98300AA4A9B /* KMPDFMultipleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE7F12BD7C98300AA4A9B /* KMPDFMultipleManager.m */; };
+		AD1FE8172BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE7F22BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.m */; };
+		AD1FE8182BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE7F22BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.m */; };
+		AD1FE8192BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE7F22BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.m */; };
+		AD1FE81A2BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1FE7F32BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.xib */; };
+		AD1FE81B2BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1FE7F32BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.xib */; };
+		AD1FE81C2BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1FE7F32BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.xib */; };
+		AD1FE81D2BD7C98300AA4A9B /* KMBookletManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE7FD2BD7C98300AA4A9B /* KMBookletManager.m */; };
+		AD1FE81E2BD7C98300AA4A9B /* KMBookletManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE7FD2BD7C98300AA4A9B /* KMBookletManager.m */; };
+		AD1FE81F2BD7C98300AA4A9B /* KMBookletManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE7FD2BD7C98300AA4A9B /* KMBookletManager.m */; };
+		AD1FE8202BD7C98300AA4A9B /* KMPDFBookletWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1FE7FE2BD7C98300AA4A9B /* KMPDFBookletWindowController.xib */; };
+		AD1FE8212BD7C98300AA4A9B /* KMPDFBookletWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1FE7FE2BD7C98300AA4A9B /* KMPDFBookletWindowController.xib */; };
+		AD1FE8222BD7C98300AA4A9B /* KMPDFBookletWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1FE7FE2BD7C98300AA4A9B /* KMPDFBookletWindowController.xib */; };
+		AD1FE8262BD7C98300AA4A9B /* KMBookletPDFView.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE8022BD7C98300AA4A9B /* KMBookletPDFView.m */; };
+		AD1FE8272BD7C98300AA4A9B /* KMBookletPDFView.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE8022BD7C98300AA4A9B /* KMBookletPDFView.m */; };
+		AD1FE8282BD7C98300AA4A9B /* KMBookletPDFView.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE8022BD7C98300AA4A9B /* KMBookletPDFView.m */; };
+		AD1FE8292BD7C98300AA4A9B /* KMMaskView.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE8032BD7C98300AA4A9B /* KMMaskView.m */; };
+		AD1FE82A2BD7C98300AA4A9B /* KMMaskView.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE8032BD7C98300AA4A9B /* KMMaskView.m */; };
+		AD1FE82B2BD7C98300AA4A9B /* KMMaskView.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE8032BD7C98300AA4A9B /* KMMaskView.m */; };
+		AD1FE82C2BD7C98300AA4A9B /* KMPDFBookletWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE8042BD7C98300AA4A9B /* KMPDFBookletWindowController.m */; };
+		AD1FE82D2BD7C98300AA4A9B /* KMPDFBookletWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE8042BD7C98300AA4A9B /* KMPDFBookletWindowController.m */; };
+		AD1FE82E2BD7C98300AA4A9B /* KMPDFBookletWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE8042BD7C98300AA4A9B /* KMPDFBookletWindowController.m */; };
+		AD1FE82F2BD7C98300AA4A9B /* KMBookletParameterModel.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE8062BD7C98300AA4A9B /* KMBookletParameterModel.m */; };
+		AD1FE8302BD7C98300AA4A9B /* KMBookletParameterModel.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE8062BD7C98300AA4A9B /* KMBookletParameterModel.m */; };
+		AD1FE8312BD7C98300AA4A9B /* KMBookletParameterModel.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE8062BD7C98300AA4A9B /* KMBookletParameterModel.m */; };
+		AD1FE8322BD7C98300AA4A9B /* NSMutableArray+KMOddEvenPartFetch.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE8072BD7C98300AA4A9B /* NSMutableArray+KMOddEvenPartFetch.m */; };
+		AD1FE8332BD7C98300AA4A9B /* NSMutableArray+KMOddEvenPartFetch.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE8072BD7C98300AA4A9B /* NSMutableArray+KMOddEvenPartFetch.m */; };
+		AD1FE8342BD7C98300AA4A9B /* NSMutableArray+KMOddEvenPartFetch.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE8072BD7C98300AA4A9B /* NSMutableArray+KMOddEvenPartFetch.m */; };
+		AD1FE8352BD7C98300AA4A9B /* KMPDFPrintManageWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE8092BD7C98300AA4A9B /* KMPDFPrintManageWindowController.m */; };
+		AD1FE8362BD7C98300AA4A9B /* KMPDFPrintManageWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE8092BD7C98300AA4A9B /* KMPDFPrintManageWindowController.m */; };
+		AD1FE8372BD7C98300AA4A9B /* KMPDFPrintManageWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE8092BD7C98300AA4A9B /* KMPDFPrintManageWindowController.m */; };
+		AD1FE8382BD7C98300AA4A9B /* KMPDFPrintManageWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1FE80A2BD7C98300AA4A9B /* KMPDFPrintManageWindowController.xib */; };
+		AD1FE8392BD7C98300AA4A9B /* KMPDFPrintManageWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1FE80A2BD7C98300AA4A9B /* KMPDFPrintManageWindowController.xib */; };
+		AD1FE83A2BD7C98300AA4A9B /* KMPDFPrintManageWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1FE80A2BD7C98300AA4A9B /* KMPDFPrintManageWindowController.xib */; };
+		AD1FE83E2BD7C98300AA4A9B /* KMPageRangeRecordTool.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE80D2BD7C98300AA4A9B /* KMPageRangeRecordTool.m */; };
+		AD1FE83F2BD7C98300AA4A9B /* KMPageRangeRecordTool.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE80D2BD7C98300AA4A9B /* KMPageRangeRecordTool.m */; };
+		AD1FE8402BD7C98300AA4A9B /* KMPageRangeRecordTool.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE80D2BD7C98300AA4A9B /* KMPageRangeRecordTool.m */; };
+		AD1FE8412BD7C98300AA4A9B /* KMPosterPrintManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE80F2BD7C98300AA4A9B /* KMPosterPrintManager.m */; };
+		AD1FE8422BD7C98300AA4A9B /* KMPosterPrintManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE80F2BD7C98300AA4A9B /* KMPosterPrintManager.m */; };
+		AD1FE8432BD7C98300AA4A9B /* KMPosterPrintManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE80F2BD7C98300AA4A9B /* KMPosterPrintManager.m */; };
+		AD1FE8442BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE8102BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.m */; };
+		AD1FE8452BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE8102BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.m */; };
+		AD1FE8462BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1FE8102BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.m */; };
+		AD1FE8472BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1FE8132BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.xib */; };
+		AD1FE8482BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1FE8132BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.xib */; };
+		AD1FE8492BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD1FE8132BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.xib */; };
 		AD2432CF2B89DFED00A119A9 /* KMFormAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD2432CE2B89DFED00A119A9 /* KMFormAlertView.swift */; };
 		AD2432D02B89DFED00A119A9 /* KMFormAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD2432CE2B89DFED00A119A9 /* KMFormAlertView.swift */; };
 		AD2432D12B89DFED00A119A9 /* KMFormAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD2432CE2B89DFED00A119A9 /* KMFormAlertView.swift */; };
@@ -5745,6 +5793,34 @@
 		AD1D483D2AFB81F4007AC1F0 /* KMMergeBlankView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMMergeBlankView.xib; sourceTree = "<group>"; };
 		AD1D484D2AFB8506007AC1F0 /* KMMergeTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMMergeTableViewCell.swift; sourceTree = "<group>"; };
 		AD1D48512AFB8510007AC1F0 /* KMMergeTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMMergeTableViewCell.xib; sourceTree = "<group>"; };
+		AD1FE7F12BD7C98300AA4A9B /* KMPDFMultipleManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMPDFMultipleManager.m; sourceTree = "<group>"; };
+		AD1FE7F22BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMPDFMultiplePrintWindowController.m; sourceTree = "<group>"; };
+		AD1FE7F32BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMPDFMultiplePrintWindowController.xib; sourceTree = "<group>"; };
+		AD1FE7F42BD7C98300AA4A9B /* KMPDFMultipleManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMPDFMultipleManager.h; sourceTree = "<group>"; };
+		AD1FE7F52BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMPDFMultiplePrintWindowController.h; sourceTree = "<group>"; };
+		AD1FE7F72BD7C98300AA4A9B /* KMPageRangeRecordTool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMPageRangeRecordTool.h; sourceTree = "<group>"; };
+		AD1FE7FA2BD7C98300AA4A9B /* KMPDFBookletWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMPDFBookletWindowController.h; sourceTree = "<group>"; };
+		AD1FE7FB2BD7C98300AA4A9B /* KMMaskView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMMaskView.h; sourceTree = "<group>"; };
+		AD1FE7FC2BD7C98300AA4A9B /* KMBookletPDFView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMBookletPDFView.h; sourceTree = "<group>"; };
+		AD1FE7FD2BD7C98300AA4A9B /* KMBookletManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMBookletManager.m; sourceTree = "<group>"; };
+		AD1FE7FE2BD7C98300AA4A9B /* KMPDFBookletWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMPDFBookletWindowController.xib; sourceTree = "<group>"; };
+		AD1FE7FF2BD7C98300AA4A9B /* NSMutableArray+KMOddEvenPartFetch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableArray+KMOddEvenPartFetch.h"; sourceTree = "<group>"; };
+		AD1FE8002BD7C98300AA4A9B /* KMBookletParameterModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMBookletParameterModel.h; sourceTree = "<group>"; };
+		AD1FE8022BD7C98300AA4A9B /* KMBookletPDFView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMBookletPDFView.m; sourceTree = "<group>"; };
+		AD1FE8032BD7C98300AA4A9B /* KMMaskView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMMaskView.m; sourceTree = "<group>"; };
+		AD1FE8042BD7C98300AA4A9B /* KMPDFBookletWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMPDFBookletWindowController.m; sourceTree = "<group>"; };
+		AD1FE8052BD7C98300AA4A9B /* KMBookletManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMBookletManager.h; sourceTree = "<group>"; };
+		AD1FE8062BD7C98300AA4A9B /* KMBookletParameterModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMBookletParameterModel.m; sourceTree = "<group>"; };
+		AD1FE8072BD7C98300AA4A9B /* NSMutableArray+KMOddEvenPartFetch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableArray+KMOddEvenPartFetch.m"; sourceTree = "<group>"; };
+		AD1FE8092BD7C98300AA4A9B /* KMPDFPrintManageWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMPDFPrintManageWindowController.m; sourceTree = "<group>"; };
+		AD1FE80A2BD7C98300AA4A9B /* KMPDFPrintManageWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMPDFPrintManageWindowController.xib; sourceTree = "<group>"; };
+		AD1FE80B2BD7C98300AA4A9B /* KMPDFPrintManageWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMPDFPrintManageWindowController.h; sourceTree = "<group>"; };
+		AD1FE80D2BD7C98300AA4A9B /* KMPageRangeRecordTool.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMPageRangeRecordTool.m; sourceTree = "<group>"; };
+		AD1FE80F2BD7C98300AA4A9B /* KMPosterPrintManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMPosterPrintManager.m; sourceTree = "<group>"; };
+		AD1FE8102BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMPDFPosterPrintWindowController.m; sourceTree = "<group>"; };
+		AD1FE8112BD7C98300AA4A9B /* KMPosterPrintManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMPosterPrintManager.h; sourceTree = "<group>"; };
+		AD1FE8122BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMPDFPosterPrintWindowController.h; sourceTree = "<group>"; };
+		AD1FE8132BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMPDFPosterPrintWindowController.xib; sourceTree = "<group>"; };
 		AD2432CE2B89DFED00A119A9 /* KMFormAlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMFormAlertView.swift; sourceTree = "<group>"; };
 		AD2432D22B89DFF800A119A9 /* KMFormAlertView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMFormAlertView.xib; sourceTree = "<group>"; };
 		AD2BEC002B5548DF0029F03F /* PDF_Reaer_Pro_EditionApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PDF_Reaer_Pro_EditionApp.swift; sourceTree = "<group>"; };
@@ -8759,6 +8835,73 @@
 			path = KMMergeBlankView;
 			sourceTree = "<group>";
 		};
+		AD1FE7EF2BD7C98300AA4A9B /* PrintHelper */ = {
+			isa = PBXGroup;
+			children = (
+				AD1FE7F82BD7C98300AA4A9B /* Booklet */,
+				AD1FE7F72BD7C98300AA4A9B /* KMPageRangeRecordTool.h */,
+				AD1FE80D2BD7C98300AA4A9B /* KMPageRangeRecordTool.m */,
+				AD1FE7F02BD7C98300AA4A9B /* Multiple */,
+				AD1FE80E2BD7C98300AA4A9B /* Poster */,
+				AD1FE8082BD7C98300AA4A9B /* PrintManage */,
+			);
+			path = PrintHelper;
+			sourceTree = "<group>";
+		};
+		AD1FE7F02BD7C98300AA4A9B /* Multiple */ = {
+			isa = PBXGroup;
+			children = (
+				AD1FE7F42BD7C98300AA4A9B /* KMPDFMultipleManager.h */,
+				AD1FE7F12BD7C98300AA4A9B /* KMPDFMultipleManager.m */,
+				AD1FE7F52BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.h */,
+				AD1FE7F22BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.m */,
+				AD1FE7F32BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.xib */,
+			);
+			path = Multiple;
+			sourceTree = "<group>";
+		};
+		AD1FE7F82BD7C98300AA4A9B /* Booklet */ = {
+			isa = PBXGroup;
+			children = (
+				AD1FE8052BD7C98300AA4A9B /* KMBookletManager.h */,
+				AD1FE7FD2BD7C98300AA4A9B /* KMBookletManager.m */,
+				AD1FE8002BD7C98300AA4A9B /* KMBookletParameterModel.h */,
+				AD1FE8062BD7C98300AA4A9B /* KMBookletParameterModel.m */,
+				AD1FE7FC2BD7C98300AA4A9B /* KMBookletPDFView.h */,
+				AD1FE8022BD7C98300AA4A9B /* KMBookletPDFView.m */,
+				AD1FE7FB2BD7C98300AA4A9B /* KMMaskView.h */,
+				AD1FE8032BD7C98300AA4A9B /* KMMaskView.m */,
+				AD1FE7FA2BD7C98300AA4A9B /* KMPDFBookletWindowController.h */,
+				AD1FE8042BD7C98300AA4A9B /* KMPDFBookletWindowController.m */,
+				AD1FE7FE2BD7C98300AA4A9B /* KMPDFBookletWindowController.xib */,
+				AD1FE7FF2BD7C98300AA4A9B /* NSMutableArray+KMOddEvenPartFetch.h */,
+				AD1FE8072BD7C98300AA4A9B /* NSMutableArray+KMOddEvenPartFetch.m */,
+			);
+			path = Booklet;
+			sourceTree = "<group>";
+		};
+		AD1FE8082BD7C98300AA4A9B /* PrintManage */ = {
+			isa = PBXGroup;
+			children = (
+				AD1FE80B2BD7C98300AA4A9B /* KMPDFPrintManageWindowController.h */,
+				AD1FE8092BD7C98300AA4A9B /* KMPDFPrintManageWindowController.m */,
+				AD1FE80A2BD7C98300AA4A9B /* KMPDFPrintManageWindowController.xib */,
+			);
+			path = PrintManage;
+			sourceTree = "<group>";
+		};
+		AD1FE80E2BD7C98300AA4A9B /* Poster */ = {
+			isa = PBXGroup;
+			children = (
+				AD1FE8122BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.h */,
+				AD1FE8102BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.m */,
+				AD1FE8132BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.xib */,
+				AD1FE8112BD7C98300AA4A9B /* KMPosterPrintManager.h */,
+				AD1FE80F2BD7C98300AA4A9B /* KMPosterPrintManager.m */,
+			);
+			path = Poster;
+			sourceTree = "<group>";
+		};
 		AD2432C82B89DFB800A119A9 /* AlertView */ = {
 			isa = PBXGroup;
 			children = (
@@ -9827,6 +9970,7 @@
 		ADD1B6A82941E94D00C3FFF7 /* Print */ = {
 			isa = PBXGroup;
 			children = (
+				AD1FE7EF2BD7C98300AA4A9B /* PrintHelper */,
 				ADE3C1A829A4775600793B13 /* Controller */,
 				ADBC2CF3299C7B2C006280C8 /* Source */,
 				AD9527D12952D4F70039D2BC /* Presenter */,
@@ -13842,6 +13986,7 @@
 				BB4F7E852B0C4E820077EC8C /* KMNoteFilterCollevtionViewItem.xib in Resources */,
 				ADDF83502B391A5C00A81A4E /* CDSignatureCertificateCustomViewController.xib in Resources */,
 				9FA607E128FD4C9F00B46586 /* KMHomePopViewController.xib in Resources */,
+				AD1FE81A2BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.xib in Resources */,
 				9F0CB4B82977BC1000007028 /* KMPropertiesPanelPreviewSubVC.xib in Resources */,
 				AD7D5CDB2B957687006562CD /* KMBookmarkOutlinePageCellView.xib in Resources */,
 				ADE86A842B0222B300414DFA /* KMSecurityView.xib in Resources */,
@@ -13874,6 +14019,7 @@
 				9F69DBBD2B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.xib in Resources */,
 				BBA9223B2B4E97540061057A /* KMPurchaseLimitWindowController.xib in Resources */,
 				BB9007032B8DDCE400623B78 /* SyncPreferences.xib in Resources */,
+				AD1FE8472BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.xib in Resources */,
 				9F0201992A1F352100C9B673 /* KMAITranslationConfirmWindowController.xib in Resources */,
 				BB89721B294AED6C0045787C /* KMWatermarkAdjectivePreViewBaseController.xib in Resources */,
 				89E4E72F2963FBA2002DBA6F /* KMPropertiesViewPopController.xib in Resources */,
@@ -13922,6 +14068,7 @@
 				ADBC376129CC637900D93208 /* KMReadModelView.xib in Resources */,
 				ADDF83832B391A5D00A81A4E /* DSignatureSaveTypeViewController.xib in Resources */,
 				BBD8EE992B8EC86A00EB05FE /* AutoSaveFileItem.xib in Resources */,
+				AD1FE8382BD7C98300AA4A9B /* KMPDFPrintManageWindowController.xib in Resources */,
 				AD1D480B2AFB18DA007AC1F0 /* KMCompressWIndowControllerNew.xib in Resources */,
 				9F1F82DD292F84D60092C4B4 /* KMHomeInsertActionViewController.xib in Resources */,
 				9F78EFBE28F7C1CC001E66F4 /* KMHomeViewController.xib in Resources */,
@@ -14057,6 +14204,7 @@
 				BBE9D09B2AF0CEEB002E83CE /* KMBatchOperateCompressViewController.xib in Resources */,
 				BB88108E2B4F7C4100AFA63E /* KMVerificationExpiredViewController.xib in Resources */,
 				9F5752EC2B58FF73005DC303 /* KMAnnotationFromViewController.xib in Resources */,
+				AD1FE8202BD7C98300AA4A9B /* KMPDFBookletWindowController.xib in Resources */,
 				BB4F7E992B0C858D0077EC8C /* KMNoteTypeCollectionViewItem.xib in Resources */,
 				BBF811E42B0717970074874F /* KMExtractImageWindowController.xib in Resources */,
 				AD3AAD1E2B0B5B4400DE5FE7 /* KMCompareCoveringWindowController.xib in Resources */,
@@ -14416,6 +14564,7 @@
 				BBA9223C2B4E97540061057A /* KMPurchaseLimitWindowController.xib in Resources */,
 				BB0FE0352B734DD1001E0F88 /* AIConfigWindowController.xib in Resources */,
 				ADE8BC3429F9261900570F89 /* KMSearchCellView.xib in Resources */,
+				AD1FE8392BD7C98300AA4A9B /* KMPDFPrintManageWindowController.xib in Resources */,
 				ADFCEB4C2B4FBA440001EBAF /* ProRemoteConfigDefaults.plist in Resources */,
 				AD58F4062B14954B00299EE0 /* KMCompareTextHeaderView.xib in Resources */,
 				9F8539DB294318D600DF644E /* TabsImage.xcassets in Resources */,
@@ -14432,6 +14581,7 @@
 				BB0B2CD92B04AE560088FFD8 /* LeftSideView.xib in Resources */,
 				9F8810892B564E9700F69815 /* KMAnnotationButtonWidgetOptionsViewController.xib in Resources */,
 				9F8539FA2947137500DF644E /* newtab_p.pdf in Resources */,
+				AD1FE81B2BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.xib in Resources */,
 				BB853C962AF8DCC7009C20C1 /* KMBatchOperateRemovePasswordViewController.xib in Resources */,
 				BB1B0AE42B4FC6E900889528 /* KMOpenFileGuideToolbar.xib in Resources */,
 				ADD56F5B2BB3F48300E87ED9 /* KMFreeTextStylesViewController.xib in Resources */,
@@ -14499,6 +14649,7 @@
 				ADBC376229CC637900D93208 /* KMReadModelView.xib in Resources */,
 				9F1F82D6292F6D510092C4B4 /* KMPDFInsertPreviewViewController.xib in Resources */,
 				BB8810742B4F785200AFA63E /* KMUnlockAlertViewController.xib in Resources */,
+				AD1FE8482BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.xib in Resources */,
 				BB1BFF6E2AEA030F003EB179 /* KMBatchOperateSplitViewController.xib in Resources */,
 				BB89721C294AED6C0045787C /* KMWatermarkAdjectivePreViewBaseController.xib in Resources */,
 				ADB5E51F2A3711DF007110A8 /* KMSubscribeWaterMarkView.xib in Resources */,
@@ -14645,6 +14796,7 @@
 				BBA2109529ACC10F00E6B346 /* signlist_add.pdf in Resources */,
 				BBB2ACE12B5943F800098854 /* Quick Start Guide.pdf in Resources */,
 				ADDF835D2B391A5C00A81A4E /* CDSignatureCertificateStateViewController.xib in Resources */,
+				AD1FE8212BD7C98300AA4A9B /* KMPDFBookletWindowController.xib in Resources */,
 				BB7289E52B8844BA004B53B5 /* GoogleService-Info.plist in Resources */,
 				AD867F8C29D950B400F00440 /* KMBOTAOutlineView.xib in Resources */,
 				9FBA0F0229015A82001117AF /* KMFastToolCollectionViewItem.xib in Resources */,
@@ -14702,6 +14854,7 @@
 				ADE86AEB2B0AF50B00414DFA /* KMCompareCoveringSettingWindowController.xib in Resources */,
 				BB90E4EC2AF347A700B04B9F /* PreferenceWindow.xib in Resources */,
 				BBAC26AE2AFE31F400563A08 /* KMBatchOperateAddPasswordViewController.xib in Resources */,
+				AD1FE83A2BD7C98300AA4A9B /* KMPDFPrintManageWindowController.xib in Resources */,
 				9F705F7B291A3A84005199AD /* KMHistoryFileDeleteWindowController.xib in Resources */,
 				89E4E7432964160F002DBA6F /* KMAnnotationLinkViewController.xib in Resources */,
 				ADBC373929CA975B00D93208 /* KMCompatative.xcassets in Resources */,
@@ -14777,6 +14930,7 @@
 				BBA9222A2B4E96450061057A /* KMPurchaseCompareWindowController.xib in Resources */,
 				F3B7DF9F2948565000333201 /* CPDFListHoverAnnotationViewController.xib in Resources */,
 				AD3AAD292B0B6FB100DE5FE7 /* KMCompareContentView.xib in Resources */,
+				AD1FE8222BD7C98300AA4A9B /* KMPDFBookletWindowController.xib in Resources */,
 				ADAFDA6E2AEB470200F084BC /* KMQucikToolsView.xib in Resources */,
 				BB69C961299116FD0001A9B1 /* plaid.pdf in Resources */,
 				ADDF83912B391A5D00A81A4E /* DSignDetailTypeACellView.xib in Resources */,
@@ -14902,6 +15056,7 @@
 				9F69DBBF2B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.xib in Resources */,
 				BBA9223D2B4E97540061057A /* KMPurchaseLimitWindowController.xib in Resources */,
 				BB276A5E2B038D3A00AB5578 /* KMOCRPDFWindowController.xib in Resources */,
+				AD1FE81C2BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.xib in Resources */,
 				AD0FA50029A8DD8700EDEB50 /* KMRegisterSuccessView.xib in Resources */,
 				894A00F72976314C0070ED83 /* KMPDFViewPanelSetViewController.xib in Resources */,
 				899700FB28F4051B009AF911 /* KMAnnotationViewController.xib in Resources */,
@@ -14913,6 +15068,7 @@
 				AD055E322B70B3D50035F824 /* KMBookmarkSheetController.xib in Resources */,
 				9F853A012947137500DF644E /* throbber.png in Resources */,
 				AD7D5CF22B96B9E1006562CD /* KMBookmarkOutlineRowView.xib in Resources */,
+				AD1FE8492BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.xib in Resources */,
 				AD1CA41E2A061CE10070541F /* KMAnnotationScreenTypeViewItem.xib in Resources */,
 				ADAFDA602AEB455500F084BC /* KMHomeContentView.xib in Resources */,
 				BBA8B7B5293635D80097D183 /* KMPasswordInputWindow.xib in Resources */,
@@ -15252,6 +15408,7 @@
 				BB003035298D356E002DD1A0 /* KMPreferenceMarkupColorView.swift in Sources */,
 				ADE614AC29779C5200F62ED7 /* KMImageTitleButton.swift in Sources */,
 				9FF94F0929A62B5000B1EF69 /* KMDesignSelect.swift in Sources */,
+				AD1FE81D2BD7C98300AA4A9B /* KMBookletManager.m in Sources */,
 				BB1BFF712AEA0AFE003EB179 /* KMBatchOperateLeftViewController.swift in Sources */,
 				BB146FBD299DC0D100784A6A /* GTMGatherInputStream.m in Sources */,
 				9F78EFC628F7E965001E66F4 /* KMHomeViewController+UI.swift in Sources */,
@@ -15530,6 +15687,7 @@
 				BBF811E02B07178F0074874F /* KMExtractImageWindowController.swift in Sources */,
 				9F02017E2A1BAC1600C9B673 /* KMAIRewritingVC.swift in Sources */,
 				BB96A0B82AFCE45800559E24 /* WaitingView.swift in Sources */,
+				AD1FE83E2BD7C98300AA4A9B /* KMPageRangeRecordTool.m in Sources */,
 				9FCFECA02AD17B8A00EAD2CB /* SKProgressController.swift in Sources */,
 				89D9897428FE743E003A3E87 /* KMOutlineView.swift in Sources */,
 				AD5999362AD7D9C200412F8B /* KMPropertiesViewPopController.swift in Sources */,
@@ -15705,6 +15863,7 @@
 				BB4A94A02B04D8EC00940F8B /* KMGOCRManager.m in Sources */,
 				BB6DD821293497B6001F0544 /* KMSecureEncryptModel.swift in Sources */,
 				ADBC373229CA95AA00D93208 /* KMComparativeModel.swift in Sources */,
+				AD1FE8172BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.m in Sources */,
 				9FCFEC802AD0E74C00EAD2CB /* KMPopMenuButtonCell.swift in Sources */,
 				ADDF83AD2B391A5D00A81A4E /* DSignatureConfig.swift in Sources */,
 				ADAFDA2B2AE8DE1B00F084BC /* KMAdvertisementCache.swift in Sources */,
@@ -15876,6 +16035,7 @@
 				BBB9B32E299A5D6D004F3235 /* GTMAppAuthFetcherAuthorization.m in Sources */,
 				BB3198162AC55E6D00107371 /* CPDFDocument+KMExtension.swift in Sources */,
 				BB1B0ADA2B4FC6E900889528 /* KMOpenFileGuideToolbar.swift in Sources */,
+				AD1FE8262BD7C98300AA4A9B /* KMBookletPDFView.m in Sources */,
 				ADE86A802B02220700414DFA /* KMSecurityView.swift in Sources */,
 				BB0FE03D2B734DD1001E0F88 /* AITipIconView.swift in Sources */,
 				BB4A94912B04926700940F8B /* KMGOCROperation.swift in Sources */,
@@ -15891,6 +16051,7 @@
 				BBC2BCC6295DA8F30036B983 /* KMCropPreviewController.swift in Sources */,
 				BB0A55142A3052F800B6E84B /* KMCustomTextField.swift in Sources */,
 				ADE3C1FD29A5C44700793B13 /* KMLightMemberManager.swift in Sources */,
+				AD1FE82C2BD7C98300AA4A9B /* KMPDFBookletWindowController.m in Sources */,
 				BB14701A299DC0D100784A6A /* OIDURLSessionProvider.m in Sources */,
 				BBA8B7AF293600D70097D183 /* KMPasswordInputWindow.swift in Sources */,
 				BBEC00A4295BD42D00A26C98 /* KMHeaderFooterPageInfoView.swift in Sources */,
@@ -15942,6 +16103,7 @@
 				BB14702C299DC0D100784A6A /* OIDEndSessionRequest.m in Sources */,
 				9F0CB4A7296CF19600007028 /* KMPropertiesPanelListMenuSubVC.swift in Sources */,
 				BB4F7E8D2B0C7FE70077EC8C /* KMNoteColorCollectionViewItem.swift in Sources */,
+				AD1FE8142BD7C98300AA4A9B /* KMPDFMultipleManager.m in Sources */,
 				BB146FE7299DC0D100784A6A /* GTLRQuery.m in Sources */,
 				ADDF83892B391A5D00A81A4E /* DSignatureFileListCellView.swift in Sources */,
 				BB49ED21293F527700C82CA2 /* KMConvertExcelSettingView.swift in Sources */,
@@ -16008,10 +16170,12 @@
 				9FE0BBDE2B0E009F00CD1CAC /* KMColorPickerView.swift in Sources */,
 				ADBC2D1F299CDA29006280C8 /* NSView+Layer.swift in Sources */,
 				ADAFDA3E2AE8F32400F084BC /* KMAdvertisementManager.swift in Sources */,
+				AD1FE8442BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.m in Sources */,
 				BBC8A76D2B05EDDF00FA9377 /* KMThumbnail.swift in Sources */,
 				BBF62C702B0347AF007B7E86 /* SplitWindowController.swift in Sources */,
 				AD1CA3F72A05FCB60070541F /* KMAnnotationScreenViewController.swift in Sources */,
 				BBFCCE082B56988C003742B3 /* KMPreferenceCommon.swift in Sources */,
+				AD1FE8412BD7C98300AA4A9B /* KMPosterPrintManager.m in Sources */,
 				ADB2D6E6294740F30029D2B3 /* KMPrintPaperSetWindowController.swift in Sources */,
 				BB897271294DB6BE0045787C /* KMWatermarkAdjectivePlainView.swift in Sources */,
 				ADBC2D37299F0A5A006280C8 /* KMPrintHelpViewController.swift in Sources */,
@@ -16097,6 +16261,7 @@
 				9F1FE4F929406E4700E952CA /* CTTabStripView.m in Sources */,
 				AD8810B229A846B100178CA1 /* KMVerficationCodeWindowController.swift in Sources */,
 				BB5F8A0E29BB04F000365ADB /* GBDeviceInfo_OSX.m in Sources */,
+				AD1FE82F2BD7C98300AA4A9B /* KMBookletParameterModel.m in Sources */,
 				BBB7B4892A033F6200B58A5A /* KMThumbnailView.swift in Sources */,
 				BBB3FF9C2B56852700145C4A /* NSDocument+KMExtensions.swift in Sources */,
 				BB671A012AD2D2A0003D44D5 /* CPDFStampAnnotation+PDFListView.swift in Sources */,
@@ -16104,6 +16269,7 @@
 				9F0CB4F5298655D500007028 /* KMDesignToken+Fill.swift in Sources */,
 				BB61F2122B59120F00777E27 /* KMScroller.swift in Sources */,
 				ADDF83652B391A5C00A81A4E /* DSignatureFromFileViewController.swift in Sources */,
+				AD1FE8292BD7C98300AA4A9B /* KMMaskView.m in Sources */,
 				BBB7B48D2A0384E100B58A5A /* NSCollectionViewItem+KMExtension.swift in Sources */,
 				F3732323292DFFFE0013862C /* CPDFListView+Extension.m in Sources */,
 				BB4EEF4C2976544F003A3537 /* KMRedactAligementView.swift in Sources */,
@@ -16246,6 +16412,7 @@
 				BB3A81AC2AC2A4E4006FC66C /* NSTextView+KMExtension.swift in Sources */,
 				BB65A0802AF8FE7A003A27A0 /* KMBatchOperateRemoveHeaderFooterViewController.swift in Sources */,
 				ADFCEB322B4F78150001EBAF /* KMFileManager.swift in Sources */,
+				AD1FE8322BD7C98300AA4A9B /* NSMutableArray+KMOddEvenPartFetch.m in Sources */,
 				ADE86AD62B05A52B00414DFA /* KMCompareFilesConfig.swift in Sources */,
 				BB147047299DC0D200784A6A /* OIDServiceConfiguration.m in Sources */,
 				BB89726D294DB67D0045787C /* KMWatermarkAdjectiveBaseView.swift in Sources */,
@@ -16347,6 +16514,7 @@
 				9F8539C629430AC400DF644E /* KMToolbarRightView.swift in Sources */,
 				BB04FD0C2B206F3600D80F7B /* KMPlanViewController.swift in Sources */,
 				BB49ECED293F3B0D00C82CA2 /* KMConvertOCRSettingItemView.swift in Sources */,
+				AD1FE8352BD7C98300AA4A9B /* KMPDFPrintManageWindowController.m in Sources */,
 				BB65A0542AF8B90F003A27A0 /* KMDisplayPreferences.swift in Sources */,
 				AD7D5C9B2B8F20FE006562CD /* synctex_parser.m in Sources */,
 				9F0CB49729683E1000007028 /* KMPropertiesPanelTextSubVC.swift in Sources */,
@@ -16442,6 +16610,7 @@
 				9FBA0EFF29015A82001117AF /* KMFastToolCollectionViewItem.swift in Sources */,
 				BB003036298D356E002DD1A0 /* KMPreferenceMarkupColorView.swift in Sources */,
 				ADDF838A2B391A5D00A81A4E /* DSignatureFileListCellView.swift in Sources */,
+				AD1FE83F2BD7C98300AA4A9B /* KMPageRangeRecordTool.m in Sources */,
 				BB8810BF2B4F872500AFA63E /* KMVerificationWindowController.m in Sources */,
 				ADE614AD29779C5200F62ED7 /* KMImageTitleButton.swift in Sources */,
 				9FF94F0A29A62B5000B1EF69 /* KMDesignSelect.swift in Sources */,
@@ -16487,6 +16656,7 @@
 				ADF1569429A62D1D001D1018 /* KMLoginLeftImageView.swift in Sources */,
 				AD3AAD352B0B7AF500DE5FE7 /* KMCompareThumbView.swift in Sources */,
 				BBE78F1C2B36F69F0071AC1A /* KMLeftSideViewController+Note.swift in Sources */,
+				AD1FE8152BD7C98300AA4A9B /* KMPDFMultipleManager.m in Sources */,
 				ADDEEA5B2AD399BB00EF675D /* KMSignature.swift in Sources */,
 				9F53D5582AD6908600CCF9D8 /* KMAnnotationLinkViewController.swift in Sources */,
 				BBE9D0932AF0A85C002E83CE /* KMBatchOperation.swift in Sources */,
@@ -16564,6 +16734,7 @@
 				BB2EDF77296ECE17003BCF58 /* KMPageEditInsertPageSizeItemView.swift in Sources */,
 				9F1F82DB292F84D60092C4B4 /* KMHomeInsertActionViewController.swift in Sources */,
 				BB35732E2AF50066004CDA92 /* KMBatchOperateConvertViewController.swift in Sources */,
+				AD1FE82A2BD7C98300AA4A9B /* KMMaskView.m in Sources */,
 				BB86C1EE28F544F4005AD968 /* CPDFListView+Event.m in Sources */,
 				9F1FE4A029406E4700E952CA /* HoverButton.m in Sources */,
 				BB1CA5CC298E5F540059E31C /* KMMergeTools.swift in Sources */,
@@ -16581,6 +16752,7 @@
 				BB8810D12B4F980E00AFA63E /* NSNULL+Filtration.m in Sources */,
 				AD58F4202B1DC29100299EE0 /* KMPrintViewModel.swift in Sources */,
 				BB83B8ED2BA8415A00EFF584 /* KMPageEditExtractWindowController.swift in Sources */,
+				AD1FE8302BD7C98300AA4A9B /* KMBookletParameterModel.m in Sources */,
 				BB65A0552AF8B90F003A27A0 /* KMDisplayPreferences.swift in Sources */,
 				BB74DA7C2AC41DE9006EDFE7 /* NSString+KMExtension.swift in Sources */,
 				BB0FE0382B734DD1001E0F88 /* AIConfigWindowController.swift in Sources */,
@@ -16644,6 +16816,7 @@
 				9FCFEC692AC2EAD500EAD2CB /* CPDFListViewColorMenuItemView.swift in Sources */,
 				ADAFDA262AE8DE1B00F084BC /* KMAdvertisementModel.swift in Sources */,
 				AD055E2E2B70B3D50035F824 /* KMBookmarkSheetController.swift in Sources */,
+				AD1FE8332BD7C98300AA4A9B /* NSMutableArray+KMOddEvenPartFetch.m in Sources */,
 				ADBC372A29CA950500D93208 /* KMComparativeOutlineView.swift in Sources */,
 				9FDD0FA729533494000C4DAD /* KMJSONParser.swift in Sources */,
 				9FDD0F70294AD13C000C4DAD /* KMMainViewController+Action.swift in Sources */,
@@ -16759,6 +16932,7 @@
 				9F221ED829A9EC0900978A59 /* KMFillSignTextPanel.swift in Sources */,
 				ADC63E492A49BEDD00854E02 /* KMSubscribeWaterMarkCollectionItem.swift in Sources */,
 				ADDF83212B391A5C00A81A4E /* KMPDFDigitalSignViewController.swift in Sources */,
+				AD1FE8452BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.m in Sources */,
 				BBF38A5F294F42FF0086D025 /* KMWatermarkAdjectiveStepper.swift in Sources */,
 				ADBC17502A2991F700959CEE /* KMPurchaseManager.swift in Sources */,
 				BBD9222C2B50D50A00DB9585 /* iRate.m in Sources */,
@@ -16770,6 +16944,7 @@
 				ADAFDA312AE8E45000F084BC /* KMAdvertisementConfig.swift in Sources */,
 				ADE787A32AA5A833002EC85A /* KMAccountExceptionWindowController.swift in Sources */,
 				BB3A66972B071B0300575343 /* KMSnapshotTableViewCell.swift in Sources */,
+				AD1FE8272BD7C98300AA4A9B /* KMBookletPDFView.m in Sources */,
 				BB146FBB299DC0D100784A6A /* GTLRBase64.m in Sources */,
 				BB2C6ACE28F41B9F00478A33 /* CPDFListView.m in Sources */,
 				BB6013892AD3A3CB00A76FB2 /* CPDFWidgetAnnotation+PDFListView.swift in Sources */,
@@ -16784,6 +16959,7 @@
 				AD055E4B2B72346E0035F824 /* KMBookmarkSheetView.swift in Sources */,
 				BB3A669B2B07520800575343 /* KMCustomOutlineView.swift in Sources */,
 				BB04FD0D2B206F3600D80F7B /* KMPlanViewController.swift in Sources */,
+				AD1FE8422BD7C98300AA4A9B /* KMPosterPrintManager.m in Sources */,
 				9FB2210F2B1AE35E00A5B208 /* NSBitmapImageRep_KMExtension.swift in Sources */,
 				9F1FE4E529406E4700E952CA /* GTMNSColor+Luminance.m in Sources */,
 				BB8116002992682F0008F536 /* KMSecureLimitAlertView.swift in Sources */,
@@ -16816,6 +16992,7 @@
 				BB1BFF722AEA0AFE003EB179 /* KMBatchOperateLeftViewController.swift in Sources */,
 				BBB9B31A299A5D6D004F3235 /* KMCloudServer.m in Sources */,
 				9F1FE4BE29406E4700E952CA /* URLDropTarget.m in Sources */,
+				AD1FE82D2BD7C98300AA4A9B /* KMPDFBookletWindowController.m in Sources */,
 				ADBC374229CAB1C300D93208 /* KMComparativeOutlineCell.swift in Sources */,
 				9F705F8A291E576D005199AD /* KMTableView.swift in Sources */,
 				BB86C1F328F54535005AD968 /* CPDFListView+KeyEvent.m in Sources */,
@@ -16823,6 +17000,7 @@
 				BBBF68812A3BF17F0058E14E /* KMFilePromiseProvider.swift in Sources */,
 				BB897247294C19980045787C /* KMWatermarkAdjectiveListController.swift in Sources */,
 				9F02018F2A1DDAA500C9B673 /* KMAITranslationWindowController.swift in Sources */,
+				AD1FE81E2BD7C98300AA4A9B /* KMBookletManager.m in Sources */,
 				9F1FE4A929406E4700E952CA /* CTBrowserWindowController.m in Sources */,
 				ADDF83272B391A5C00A81A4E /* CPDFDigtalView.m in Sources */,
 				BB00301E298CB799002DD1A0 /* KMPreferenceManager.swift in Sources */,
@@ -16941,6 +17119,7 @@
 				9FAAA33A290F72CC0046FFCE /* KMHistoryFileCollectionView.swift in Sources */,
 				BBCE57192A72723600508EFC /* NSResponder+KMExtension.swift in Sources */,
 				BB146FC1299DC0D100784A6A /* GTMSessionFetcherLogging.m in Sources */,
+				AD1FE8362BD7C98300AA4A9B /* KMPDFPrintManageWindowController.m in Sources */,
 				AD1CA4222A061D190070541F /* KMAnnotationScreenAuthorViewItem.swift in Sources */,
 				BB3A81B62AC2C0F4006FC66C /* NSObject+KMExtension.swift in Sources */,
 				AD7D5CC32B9566D0006562CD /* KMBookmarkOutlineView.swift in Sources */,
@@ -17390,6 +17569,7 @@
 				BB3A81B12AC2B82A006FC66C /* KMPageSizeTool.swift in Sources */,
 				ADAFDA352AE8EE9300F084BC /* KMAdvertisementImage.swift in Sources */,
 				9F1F82CB292F6CF90092C4B4 /* KMPDFInsertPageWindow.swift in Sources */,
+				AD1FE8182BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.m in Sources */,
 				BBF729BC2B19717200576AC5 /* KMBatchRemoveBackgroundOperation.swift in Sources */,
 				ADB5E51A2A3711CB007110A8 /* KMSubscribeWaterMarkView.swift in Sources */,
 				BB8F456E295AC1220037EA22 /* KMHeaderFooterAdjectiveModel.swift in Sources */,
@@ -17590,6 +17770,7 @@
 				9F1F82DC292F84D60092C4B4 /* KMHomeInsertActionViewController.swift in Sources */,
 				ADB5E5142A371131007110A8 /* KMSubscribeWaterMarkWindowController.swift in Sources */,
 				ADE86ACA2B034CB200414DFA /* KMAddBackgroundView.swift in Sources */,
+				AD1FE81F2BD7C98300AA4A9B /* KMBookletManager.m in Sources */,
 				AD7D5CEE2B96B9D6006562CD /* KMBookmarkOutlineRowView.swift in Sources */,
 				BBC8A7732B06408600FA9377 /* KMBotaSearchViewController.swift in Sources */,
 				BB8810662B4F74DD00AFA63E /* KMRepeatTrialAlertController.m in Sources */,
@@ -17868,6 +18049,7 @@
 				BB6D2DAD2B674D7900624C24 /* CPDFPage+KMExtension.swift in Sources */,
 				BB67EE252B54FFEF00573BF0 /* ASIInputStream.m in Sources */,
 				BB146FDA299DC0D100784A6A /* GTLRFramework.m in Sources */,
+				AD1FE8402BD7C98300AA4A9B /* KMPageRangeRecordTool.m in Sources */,
 				AD85D1A02AEF927D000F4D28 /* KMQucikToolsModel.swift in Sources */,
 				BBC28F432B0EE7D600D73206 /* KMGroupFindTableRowView.swift in Sources */,
 				9FF94F0B29A62B5000B1EF69 /* KMDesignSelect.swift in Sources */,
@@ -18043,6 +18225,7 @@
 				ADDEEA882AD7805200EF675D /* KMGeneralButton.swift in Sources */,
 				BBD54ED62A1CBD720012A230 /* NSView+KMExtension.swift in Sources */,
 				BBC3485029582920008D2CD1 /* KMBackgroundColorView.swift in Sources */,
+				AD1FE8192BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.m in Sources */,
 				BB4EEF3A2976451E003A3537 /* KMRedactContentBaseView.swift in Sources */,
 				BB853C9F2AF8E436009C20C1 /* KMBatchRemovePasswordOperation.swift in Sources */,
 				ADE3C1E629A5ABC200793B13 /* KMLoginWindowController.swift in Sources */,
@@ -18214,6 +18397,7 @@
 				BB147025299DC0D100784A6A /* OIDResponseTypes.m in Sources */,
 				BB14701C299DC0D100784A6A /* OIDURLSessionProvider.m in Sources */,
 				BB981E542AD4F638001988CA /* KMCoverButton.swift in Sources */,
+				AD1FE8282BD7C98300AA4A9B /* KMBookletPDFView.m in Sources */,
 				AD1D48502AFB8506007AC1F0 /* KMMergeTableViewCell.swift in Sources */,
 				BB49ECF8293F44DC00C82CA2 /* KMConvertExcelWindowController.swift in Sources */,
 				9FBC48BA299B44C600CA39D7 /* KMSecondaryViewController.m in Sources */,
@@ -18229,6 +18413,7 @@
 				BBD1F77E296F9BE000343885 /* KMPageEditSettingBaseWindowController.swift in Sources */,
 				9F080B25298FCB0D00FC27DA /* KMDesignToken+Action.swift in Sources */,
 				BB0FE03F2B734DD1001E0F88 /* AITipIconView.swift in Sources */,
+				AD1FE82E2BD7C98300AA4A9B /* KMPDFBookletWindowController.m in Sources */,
 				BB67EE1F2B54FFEF00573BF0 /* ASIFormDataRequest.m in Sources */,
 				ADDF838B2B391A5D00A81A4E /* DSignatureFileListCellView.swift in Sources */,
 				9F81ADC829B9B12C002251F4 /* NSButton+DesignToken.swift in Sources */,
@@ -18280,6 +18465,7 @@
 				BB1B0AD02B4FC6E900889528 /* KMFunctionGuideMultiController.swift in Sources */,
 				9F1FE49829406E4700E952CA /* common.c in Sources */,
 				9F69DBBC2B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.swift in Sources */,
+				AD1FE8162BD7C98300AA4A9B /* KMPDFMultipleManager.m in Sources */,
 				ADBC375629CAE94700D93208 /* KMComparativeOutlineSectionCell.swift in Sources */,
 				9F0CB5442986953A00007028 /* KMURLToPDFWindowController.swift in Sources */,
 				ADAFDA322AE8E45000F084BC /* KMAdvertisementConfig.swift in Sources */,
@@ -18346,10 +18532,12 @@
 				BB88E45A29404752002B3655 /* KMPDFConvert.swift in Sources */,
 				BB147004299DC0D100784A6A /* OIDScopeUtilities.m in Sources */,
 				AD3AAD832B0E004B00DE5FE7 /* KMPostionIndicateView.swift in Sources */,
+				AD1FE8462BD7C98300AA4A9B /* KMPDFPosterPrintWindowController.m in Sources */,
 				ADAFDA362AE8EE9300F084BC /* KMAdvertisementImage.swift in Sources */,
 				9F0CB4712967E63100007028 /* KMPropertiesPanelNameSubVC.swift in Sources */,
 				9F1FE4CE29406E4700E952CA /* CTTabContentsController.m in Sources */,
 				9F0CB4EF298655A800007028 /* KMDesignToken+PaddingLeft.swift in Sources */,
+				AD1FE8432BD7C98300AA4A9B /* KMPosterPrintManager.m in Sources */,
 				BB9695B429BDA46500FD68D3 /* SKLocalization.m in Sources */,
 				9FF0D05A2B6A43750018A732 /* KMPDFAnnotationButtonWidgetSub.swift in Sources */,
 				9F3D819029A22AD90087B5AD /* Date+KMExtensions.swift in Sources */,
@@ -18435,6 +18623,7 @@
 				9FCFEC922AD11E5F00EAD2CB /* KMSplitView.swift in Sources */,
 				ADD1B6B929420B2300C3FFF7 /* KMPrintChooseView.swift in Sources */,
 				BB276A5A2B038D1100AB5578 /* KMOCRPDFWindowController.swift in Sources */,
+				AD1FE8312BD7C98300AA4A9B /* KMBookletParameterModel.m in Sources */,
 				AD9527D92952ED970039D2BC /* KMPrintPresenter_C.swift in Sources */,
 				9F0CB4E32986556400007028 /* KMDesignToken+PaddingTop.swift in Sources */,
 				BB2EDF6F296ECE17003BCF58 /* KMPageEditInsertDirectionItemView.swift in Sources */,
@@ -18442,6 +18631,7 @@
 				BB1B0AD32B4FC6E900889528 /* KMFunctionGuideSingleController.swift in Sources */,
 				BB74DA812AC42959006EDFE7 /* NSButton+KMExtension.swift in Sources */,
 				ADDF83942B391A5D00A81A4E /* DSignatureFilelistRow.swift in Sources */,
+				AD1FE82B2BD7C98300AA4A9B /* KMMaskView.m in Sources */,
 				9F0CB4F3298655BC00007028 /* KMDesignToken+ItemSpacing.swift in Sources */,
 				ADFCEB732B4FC1410001EBAF /* KMAdsManager.swift in Sources */,
 				8942F819292B678100389627 /* KMAnnotationTableCellView.swift in Sources */,
@@ -18584,6 +18774,7 @@
 				AD8F06192999DB5900D93CBC /* KMPrintDrawPage.swift in Sources */,
 				BB3A42A02B4BF03A006D0642 /* KMSystemPDFMenu.swift in Sources */,
 				9F512CC92B4640AB00EC0BC3 /* KMPageDisplayCustomThemesCollectionViewItem.swift in Sources */,
+				AD1FE8342BD7C98300AA4A9B /* NSMutableArray+KMOddEvenPartFetch.m in Sources */,
 				BBFDFA962AF328BA00E08AA2 /* KMBatchOperateManager.swift in Sources */,
 				9FF94F1B29A770B500B1EF69 /* KMFillSignShapePanel.swift in Sources */,
 				BBA5429E29F13A140041BAD0 /* KMMemorandumPattern.swift in Sources */,
@@ -18685,6 +18876,7 @@
 				BB1B0AC72B4FC6E900889528 /* KMGuideInfoWindow.swift in Sources */,
 				ADD1B70C29471FA500C3FFF7 /* KMPrintChoosePresenter.swift in Sources */,
 				9F0CB4692967E5CB00007028 /* KMPropertiesPanelSubViewController.swift in Sources */,
+				AD1FE8372BD7C98300AA4A9B /* KMPDFPrintManageWindowController.m in Sources */,
 				9FBC48C1299E23B100CA39D7 /* NSViewController+DesignToken.swift in Sources */,
 				89752DF429389F82003FF08E /* KMToolbarItem.m in Sources */,
 				ADDEEA742AD3EFE200EF675D /* KMButton.swift in Sources */,