我做了一个非常适合 A4 页面的视图。现在我想打印它。请注意,我没有使用 drawRect 或类似的东西,只是带有子视图和文本标签的普通视图。我的问题是我对该视图有一些视图,我使用图层在项目周围放置背景颜色和圆角矩形。子视图不打印,但所有文本标签都会打印。
_printReport 只是一个带有视图和一堆文本标签的普通窗口。
我做错了什么,我怎么能做得更好?我真的不想做一个drawrect,但如果必须的话我会做的。
这是有人打印时发生的代码:
- (void)printWorksheet {
TJContact *worksheet = [[self.workSheets selectedObjects] objectAtIndex:0];
if (worksheet == nil) return;
_printReport = [[TJPrintReportWindowController alloc] initWithWindowNibName:@"TJPrintReportWindowController"];
[self.printReport setCompany:self.company];
[self.printReport setContact:worksheet];
[self.printReport showWindow:self];
[self.printReport becomeFirstResponder];
[self.printReport.view becomeFirstResponder];
NSPrintInfo* printInfo = [NSPrintInfo sharedPrintInfo];
[printInfo setHorizontalPagination:NSFitPagination];
[printInfo setVerticalPagination:NSFitPagination];
[printInfo setHorizontallyCentered:YES];
[printInfo setVerticallyCentered:YES];
[printInfo setLeftMargin:20.0];
[printInfo setRightMargin:20.0];
[printInfo setTopMargin:10.0];
[printInfo setBottomMargin:10.0];
NSPrintOperation* printOperation = [NSPrintOperation printOperationWithView:self.printReport.view printInfo:printInfo];
[printOperation setShowsPrintPanel:YES];
[printOperation runOperationModalForWindow:[self window] delegate:nil didRunSelector:nil contextInfo:nil];
}
不确定这是否有帮助,但主视图确实将 setWantsLayers 设置为 YES,这是我的装饰之一:
CALayer *customerLayer = [self.customerView layer];
[customerLayer setCornerRadius:10];
[customerLayer setBackgroundColor:[NSColor colorWithDeviceWhite:0 alpha:0.30].CGColor];
[customerLayer setBorderColor:[NSColor blackColor].CGColor];
[customerLayer setBorderWidth:1.5];
当我在屏幕上显示窗口时,它看起来就像我想要的那样,但是上面的圆形矩形没有被打印,但它上面的所有标签都会打印。