Какао. Создайте NSTextView, добавьте к нему NSString и напечатайте - PullRequest
1 голос
/ 17 августа 2011

У меня есть окно с кнопкой для печати квитанций.Что мне нужно сделать, это создать простой 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 в один из существующих видов моего окна, он печатает нормально.

Главное ... Я не хочу отображать вид после нажатия кнопки Печать.В идеале я хотел бы напечатать текст, а не вид.

Ответы [ 4 ]

6 голосов
/ 17 августа 2011

Вы пытались использовать -initWithFrame с ненулевым прямоугольником?

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

(468 x 648 подойдет для листа А4 с полями в 1 дюйм.)

2 голосов
/ 16 октября 2016

Вот реализация, которая работает в подклассе 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];
}
0 голосов
/ 27 февраля 2015

Это очень хорошо.Еще одно улучшение.Чтобы распечатать не по центру и правильно заполнить страницу, передайте 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];
0 голосов
/ 17 августа 2011

Вы пробовали только:

[textView print];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...