XPS anzeigen ohne vorher speichern



  • Hallo,

    ich erstelle eine Datei, die ich im XPS-Format anzeigen möchte. Der voreigestellte Drucker ist daher der XPS-Drucker:

    Printer->PrinterIndex = Printer->Printers->IndexOf("Microsoft XPS Document Writer")
    
    Printer->GetPrinter(device, driver, port, hdmode)
    pdmode = GlobalLock(hdmode)
    
    Printer->BeginDoc;
    SetBkMode(Printer->Canvas->Handle, TRANSPARENT)
    dc = GetDC(Printer->Handle())
    SetMapMode(dc, MM_LOMETRIC)
    //hier wird jetzt der Drucker "gefüllt"
    Printer->EndDoc()
    

    Läuft alles prima, nur muss immer gespeichert werden. Ich würde die Datei aber gerne "on the fly" direkt betrachten, ohne den sich immer öffnenden speichern-unter-Dialog zu bestätigen. Hat da jemand einen Rat?

    MfG Ingo



  • Bis zum Speichern in eine Datei existieren die Druckdaten nur im Speicher des XPS-Druckers, also einer Fremdanwendung, und auf Speicherbereiche einer Fremdanwendung kannst du nicht zugreifen(*).
    Das Problem dürfte sich für alle Datei-Drucker stellen, also auch für die diversen PDF-Erstellprogramme.

    (*) zumindest wohl nicht ohne extreme WinAPI-Verrenkungen



  • Danke für die Antwort, Jansen.

    Dann weiß ich jetzt zumindest, dass es keine praktikable Durckvorschau-Lösung gibt, um der mangelhaften xps-usability Abhilfe zu verschaffen.

    MfG Ingo



  • Die Alternative wäre, einen eigenen XPS-Exporter zu schreiben, falls das Format und/oder eine entsprechende API denn dokumentiert sind.
    Ist aber vermutlich ein erheblicher Aufwand; wird das XPS-Format denn tatsächlich irgendwo ernsthaft eingesetzt?



  • Jansen schrieb:

    Die Alternative wäre, einen eigenen XPS-Exporter zu schreiben, falls das Format und/oder eine entsprechende API denn dokumentiert sind.
    Ist aber vermutlich ein erheblicher Aufwand; wird das XPS-Format denn tatsächlich irgendwo ernsthaft eingesetzt?

    Bei uns 🙂
    Als Druckvorschau lt. obigem Codeschnipsel leistet das xps-Format sehr gute Arbeit. Die Vorschau stimmt 100%ig mit dem Ausdruck überein. Sollte es einen anderen Treiber geben, der das gleiche leistet, aber nicht zwischenspeichert werden will, wäre das natürlich schön, gefunden habe ich nur noch keinen.


Anmelden zum Antworten