Tag!
Ich hab eine Applikation, die Bemaßungsskizzen zeichnet. Das funktioniert auch gut; je nachdem, was gezeichnet werden soll, zeichnet das View eben die angeforderte Zeichnung via NSBezierPath aus einer bestimmten Perspektive - von vorne, oben, links rechts - und bemaßt die Zeichnung.
Wie es es der Teufel will, sollen die Grafiken jetzt auch in ein PDF gedruckt werden können, d.h.:
Auf der ersten Seite kommt Ansicht 1/2, auf Seite 2 Ansicht 3, auf Seite 3 Ansicht 4...
Zum Thema "Drucken" hab ich hier im Forum schon einiges finden können, stecke aber jetzt dennoch fest.
Grundsätzliches Vorgehen ist wohl folgendes:
- Offscreen NSView erstellen
- in das View alles hineinstopfen, was gedruckt werden soll
- Paginierung vornehmen
- drucken
Aus dem Thread hier, hab ich mir die Printer-Demo.app (Danke dafür) geschnappt und versucht zu modifizieren:
Alles anzeigen
Zwei Probleme/Fragen hab ich nun:
1. Wenn das Dokument 5 Seiten lang ist (pageCount = 5) wird das printGrafik-View immer auf der letzten Seite ganz unten ausgegeben und nicht wie im Code-Schnipsel bei count == 3 / Seite 3. Warum?
2. Wie kann ich bestimmen, wo "LineDrawer" innerhalb der aktuellen Printpage gezeichnet werden soll? Es wird immer unten Links auf der Seite gedruckt.
Bringt mich da "locationOfPrintRect:" weiter? Oder sollte ich das Ergebnis von LineDrawer irgendwie in ein NSImage umwandeln, dass ich dann auf der Seite platzieren kann?
Hängt evtl. das Problem hier mit dem ersten zusammen?
Für Hinweise, die mich in die richtige Richtung bringen, schon mal vielen Dank!
Ich hab eine Applikation, die Bemaßungsskizzen zeichnet. Das funktioniert auch gut; je nachdem, was gezeichnet werden soll, zeichnet das View eben die angeforderte Zeichnung via NSBezierPath aus einer bestimmten Perspektive - von vorne, oben, links rechts - und bemaßt die Zeichnung.
Wie es es der Teufel will, sollen die Grafiken jetzt auch in ein PDF gedruckt werden können, d.h.:
Auf der ersten Seite kommt Ansicht 1/2, auf Seite 2 Ansicht 3, auf Seite 3 Ansicht 4...
Zum Thema "Drucken" hab ich hier im Forum schon einiges finden können, stecke aber jetzt dennoch fest.
Grundsätzliches Vorgehen ist wohl folgendes:
- Offscreen NSView erstellen
- in das View alles hineinstopfen, was gedruckt werden soll
- Paginierung vornehmen
Aus dem Thread hier, hab ich mir die Printer-Demo.app (Danke dafür) geschnappt und versucht zu modifizieren:
Quellcode
- //...
- //Schnipsel aus Michaels PrinterDemo.app
- // Einen View mit der notwendigen Größe instanzieren
- NSView *printView = [[[NSView alloc] initWithFrame:NSMakeRect(0.0, 0.0, printSize.width, printSize.height * pageCount)] autorelease];
- NSInteger count = pageCount;
- while (count)
- {
- NSTextField *labelField = [[[NSTextField alloc] initWithFrame:NSMakeRect(0.0, printSize.height * count - 17, printSize.width, 17)] autorelease];
- [labelField setBezeled:NO];
- --count;
- [labelField setStringValue:[NSString stringWithFormat:@"Seite %i", pageCount - count]];
- //auf Seite 3 soll als Test eine Bemaßungsskizze gedruckt werden...
- if (count == 3)
- {
- //LineDrawer zeichnet die Bemaßungs-Skizzen
- NSView *printGrafik = [[[LineDrawer alloc] initWithFrame:NSMakeRect(0.0, 0.0, 200, 200)] autorelease];
- [printView addSubview:printGrafik];
- }
- [printView addSubview:labelField];
- }
- [printView print:self];
- //...
Zwei Probleme/Fragen hab ich nun:
1. Wenn das Dokument 5 Seiten lang ist (pageCount = 5) wird das printGrafik-View immer auf der letzten Seite ganz unten ausgegeben und nicht wie im Code-Schnipsel bei count == 3 / Seite 3. Warum?
2. Wie kann ich bestimmen, wo "LineDrawer" innerhalb der aktuellen Printpage gezeichnet werden soll? Es wird immer unten Links auf der Seite gedruckt.
Bringt mich da "locationOfPrintRect:" weiter? Oder sollte ich das Ergebnis von LineDrawer irgendwie in ein NSImage umwandeln, dass ich dann auf der Seite platzieren kann?
Hängt evtl. das Problem hier mit dem ersten zusammen?
Für Hinweise, die mich in die richtige Richtung bringen, schon mal vielen Dank!