2011-08-17 51 views
1

我有一個打印收據按鈕的窗口。我需要做的是創建一個簡單的NSTextView,爲它添加一個NSString(至少類似於「Hello World」)並在不顯示NSTextView的情況下打印它。可可。創建NSTextView,添加NSString並打印

這是我目前有:

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到我窗口上現有的視圖之一,它打印確定。

最主要的是..我不想在點擊打印按鈕後顯示視圖。理想情況下,我想打印文本,而不是視圖。

回答

5

您是否嘗試過使用-initWithFrame非零矩形?

NSTextView *textview = [[NSTextView alloc] initWithFrame:NSMakeRect(0, 0, 468, 648); 

(468 X 648會使其適合用1英寸的頁邊距一張A4紙。)

+1

做到了!謝謝! – Irina

+0

648的高度產生2頁(在10.7.3中)。我是唯一一個? – brutella

0

你有沒有嘗試過:

[textView print]; 
+0

是的,我做到了。我試過'[textView print:nil];''[textView print:self];'它仍然沒有返回。還有一件事:如果我添加類似'NSRect pos; pos.origin = NSMakePoint(0,0); NSTextView * textView = [[NSTextView alloc] initWithFrame:pos];'它顯示21個空白頁。 – Irina

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]; 
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]; 
}