我有一个带打印收据按钮的窗口。我需要做的是创建一个简单的NSTextView,向它添加一个NSString(至少像“Hello World”)并打印它而不在窗口上显示NSTextView。
以下是我目前的情况:
NSTextView *textView = [[NSTextView alloc] init];
NSString *text = @"testing";
[textView setEditable:true];
NSRange range = NSMakeRange( 0, [[textView string] length]);
[textView setSelectedRange:range];
[[[textView textStorage] mutableString] appendString:text];
NSPrintOperation *printOperation;
printOperation = [NSPrintOperation printOperationWithView:textView];
[printOperation runOperation];
当我运行它时,我看到打印对话框,但预览为空。 当我更改printOperationWithView:textView];从textView到我窗口上的一个现有视图,它打印正常。
最重要的是......单击“打印”按钮后,我不想显示视图。理想情况下,我想打印文本,而不是视图。
答案 0 :(得分:6)
您是否尝试将-initWithFrame
与非零矩形一起使用?
NSTextView *textview = [[NSTextView alloc] initWithFrame:NSMakeRect(0, 0, 468, 648);
(468 x 648可使其适合A4纸张,边距为1英寸。)
答案 1 :(得分:2)
这是一个在NSDocument
子类中工作的实现。修改它以满足您的需求。
- (NSPrintOperation *)printOperationWithSettings:(NSDictionary<NSString *,id> *)printSettings error:(NSError * _Nullable __autoreleasing *)outError
{
NSPrintInfo * printInfo = [self printInfo];
printInfo.topMargin = 15.0;
printInfo.leftMargin = 10.0;
printInfo.rightMargin = 10.0;
printInfo.bottomMargin = 15.0;
printInfo.verticallyCentered = NO;
NSRect bounds = printInfo.imageablePageBounds;
NSTextView * printView = [[NSTextView alloc] initWithFrame:bounds];
printView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;
[printView.textStorage appendAttributedString:self.attributedStringRepresentation];
return [NSPrintOperation printOperationWithView:printView printInfo:printInfo];
}
答案 2 :(得分:0)
您是否尝试过:
[textView print];
答案 3 :(得分:0)
这非常好。再增加一个。为了使打印输出不居中,并正确填充页面,请将printInfo作为参数传递。
NSPrintOperation *printOperation;
NSPrintInfo *pInfo = [[NSPrintInfo alloc] init];
[pInfo setBottomMargin:50];
[pInfo setTopMargin:50];
[pInfo setVerticallyCentered:false];
printOperation = [NSPrintOperation printOperationWithView:textView printInfo:pInfo];
[printOperation runOperation];