Cocoa: NSTextView-Inhalte drucken
Bei nicht dokument-basierten Applikationen hat man immer das Problem, dass beim Druck der Inhalt vertikal auf der Seite zentriert wird.
Die Lösung ist eine eigene Print-Action in der Controller-Klasse.
-(IBAction)printContents:(id)sender {
NSPrintInfo *pi;
NSPrintInfo *sharedInfo;
NSPrintOperation *printOp;
NSMutableDictionary *piDict;
NSMutableDictionary *sharedDict;
sharedInfo = [NSPrintInfo sharedPrintInfo];
sharedDict = [sharedInfo dictionary];
piDict = [NSMutableDictionary dictionaryWithDictionary:
sharedDict];
pi = [[NSPrintInfo alloc] initWithDictionary: piDict];
/* Hier wird der Inhalt automatisch in Seiten aufgeteilt */
[pi setHorizontalPagination: NSAutoPagination];
[pi setVerticalPagination: NSAutoPagination];
[pi setVerticallyCentered:NO]; //Nicht mehr zentrieren
/* Abstaende setzen */
[pi setTopMargin:40.0];
[pi setLeftMargin:10.0];
/* unserem 'Druckobjekt' sagen, dass es den Inhalt des TextViews drucken soll */
printOp = [NSPrintOperation intOperationWithView:textView printInfo:pi];
/* Wir moechten den Druckdialog angezeigt bekommen (Vorschau, etc) */
[printOp setShowPanels:YES];
/* Alle Einstellungen gemacht - also starten */
[printOp runOperation];
}
„textView“ ist der Name des Outlets für das NSTextView.
Nun muss man nur noch den entsprechenden Menüpunkt „Drucken“ mit der eigenen Aktion verbinden.
Das piDict habe ich nur mit hereingenommen, damit ich die Möglichkeit habe, die Funktion z. B. um eine PDF-Speicherung zu erweitern.
Die Margins kann man natürlich noch verändern je nach Belieben. Wer möchte, kann sie auch aus einer plist beziehen.
ich bekomme immer nur:
selector not recognized
was mache ich falsch?
Ziemlich simpel.. hier muss man bei der 3. Zeile von unten (also: printOp = [NSPrintOperation intOperationWithView:textView printInfo:pi];)
Zu:
printOp = [NSPrintOperation printOperationWithView:textView printInfo:pi]; ändern ..
ohhhhhhhhh – nun gehts :-))
danke!