Cocoa 热可可创建NSTextView,向其中添加NSString并打印
我有一个窗口,有一个打印收据的按钮。我需要做的是创建一个简单的NSTextView,向其中添加一个NSString(至少类似于“Hello World”)并打印它,而不在窗口上显示NSTextView 以下是我目前拥有的:Cocoa 热可可创建NSTextView,向其中添加NSString并打印,cocoa,macos,Cocoa,Macos,我有一个窗口,有一个打印收据的按钮。我需要做的是创建一个简单的NSTextView,向其中添加一个NSString(至少类似于“Hello World”)并打印它,而不在窗口上显示NSTextView 以下是我目前拥有的: NSTextView *textView = [[NSTextView alloc] init]; NSString *text = @"testing"; [textView setEditable:true]; NSRange rang
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];
当我运行它时,我看到打印对话框,但预览是空的。
当我更改打印操作WithView:textView];从“文本视图”到“我的窗口”上的一个现有视图,它会打印“确定”
主要是。。我不想在单击“打印”按钮后显示视图。理想情况下,我希望打印文本,而不是视图 您是否尝试过:
[textView print];
您是否尝试过将
-initWithFrame
与非零rect一起使用
NSTextView *textview = [[NSTextView alloc] initWithFrame:NSMakeRect(0, 0, 468, 648);
(468 x 648将适合1英寸边距的A4纸张。)这非常好。再做一次增强。为了使打印输出不居中,并正确填充页面,请将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];
下面是一个在
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];
}
-(NSPrintOperation*)带设置的打印操作:(NSDictionary*)打印设置错误:(NSError*\u Nullable\u autoreleasing*)outError
{
NSPrintInfo*printInfo=[self printInfo];
printInfo.topMargin=15.0;
printInfo.leftMargin=10.0;
printInfo.rightMargin=10.0;
printInfo.bottomMargin=15.0;
printInfo.verticallyCentered=否;
NSRect bounds=printInfo.imageablePageBounds;
NSTextView*printView=[[NSTextView alloc]initWithFrame:bounds];
printView.autoresizingMask=NSViewWidthSizable | NSViewHeightSizable;
[printView.textStorage appendAttributedString:self.attributedStringRepresentation];
返回[NSPrintOperation printOperationWithView:printView printInfo:printInfo];
}
是的,我做了。我尝试了[textView打印:nil]代码>[textView打印:self]代码>它仍然不返回任何内容。还有一件事:如果我添加类似于NSRect pos的内容;位置原点=NSMakePoint(0,0);NSTextView*textView=[[NSTextView alloc]initWithFrame:pos]代码>它显示21个空白页。648的高度产生2页(在10.7.3中)。我是唯一一个吗?