我正在编写一个基于文档的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和setHorizontallyCentered:1进行整体查看时,看起来完全正常。
我知道Apple的替代(和更复杂的)分页方法,它涉及子类化NSView并覆盖knowsPageRange:和rectForPage:,但我宁愿避免这种情况,除非有技术的已知问题我和#39; m使用它使它变得不可靠。