是否可以依靠NSAutoPagination将NSView彻底划分为多个页面?

时间:2015-01-29 03:26:14

标签: cocoa printing document

我正在编写一个基于文档的cocoa应用程序,允许用户打印多页文档。我试图使用cocoa的能力将一个非常高的NSView基本上分成一列相同大小的页面:

- (void)printDocumentWithSettings:(NSDictionary *)printSettings
                   showPrintPanel:(BOOL)showPrintPanel
                         delegate:(id)delegate
                 didPrintSelector:(SEL)didPrintSelector
                      contextInfo:(void *)contextInfo
{
    [self.printInfo setVerticallyCentered:0];
    [self.printInfo setHorizontallyCentered:0];

    [self.printInfo setHorizontalPagination:NSFitPagination];
    [self.printInfo setVerticalPagination:NSAutoPagination];

    [self.printInfo setRightMargin:0];
    [self.printInfo setLeftMargin:0];
    [self.printInfo setTopMargin:0];
    [self.printInfo setBottomMargin:0];

    NSPrintOperation *printOperation = 
        [NSPrintOperation printOperationWithView:self.printView];

    [printOperation runOperationModalForWindow:[self.printView window]
                                      delegate:nil
                                didRunSelector:nil
                                   contextInfo:nil];
}

有问题的视图的宽度(self.printView)正好是self.printInfo.paperSize的宽度,而height是self.printInfo.paperSize的精确倍数。因此,我将所有printInfo边距设置为零,当我调用它时:

[self.printInfo setVerticalPagination:NSAutoPagination];

我希望这些页面能够完美地分成一个列,在它们的边界上均匀分割。但是,当我打印文档时,分页会垂直偏移。

这样做的结果是,第一页的底部边缘似乎有少量的额外空间。第二页在页面上显示的位置略低于应有的位置,第三页甚至更低,依此类推,直到第六页完全失控,看起来与原始printView完全不同。

尽管我已经验证了我的printView,但在单独的实验中使用setVerticallyCentered:1和setHorizo​​ntallyCentered:1进行整体查看时,看起来完全正常。

我知道Apple的替代(和更复杂的)分页方法,它涉及子类化NSView并覆盖knowsPageRange:和rectForPage:,但我宁愿避免这种情况,除非有技术的已知问题我和#39; m使用它使它变得不可靠。

0 个答案:

没有答案