Druckprobleme

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Druckprobleme

    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:

    Quellcode

    1. //...
    2. //Schnipsel aus Michaels PrinterDemo.app
    3. // Einen View mit der notwendigen Größe instanzieren
    4. NSView *printView = [[[NSView alloc] initWithFrame:NSMakeRect(0.0, 0.0, printSize.width, printSize.height * pageCount)] autorelease];
    5. NSInteger count = pageCount;
    6. while (count)
    7. {
    8. NSTextField *labelField = [[[NSTextField alloc] initWithFrame:NSMakeRect(0.0, printSize.height * count - 17, printSize.width, 17)] autorelease];
    9. [labelField setBezeled:NO];
    10. --count;
    11. [labelField setStringValue:[NSString stringWithFormat:@"Seite %i", pageCount - count]];
    12. //auf Seite 3 soll als Test eine Bemaßungsskizze gedruckt werden...
    13. if (count == 3)
    14. {
    15. //LineDrawer zeichnet die Bemaßungs-Skizzen
    16. NSView *printGrafik = [[[LineDrawer alloc] initWithFrame:NSMakeRect(0.0, 0.0, 200, 200)] autorelease];
    17. [printView addSubview:printGrafik];
    18. }
    19. [printView addSubview:labelField];
    20. }
    21. [printView print:self];
    22. //...
    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!