2009-06-16 11 views

Odpowiedz

10

Obejściem, które ustawiłem w oknie dialogowym drukowania w aplikacji DocumentViewer było ukrycie przycisku drukowania w kontrolce DocumentViewer poprzez pominięcie przycisku z szablonu. Potem pod warunkiem mój własny przycisk drukowania i związał go z następującym kodem:

public bool Print() 
    { 
     PrintDialog dialog = new PrintDialog(); 
     dialog.PrintQueue = LocalPrintServer.GetDefaultPrintQueue(); 
     dialog.PrintTicket = dialog.PrintQueue.DefaultPrintTicket; 
     dialog.PrintTicket.PageOrientation = PageOrientation.Landscape; 

     if (dialog.ShowDialog() == true) 
     { 
      XpsDocumentWriter writer = PrintQueue.CreateXpsDocumentWriter(dialog.PrintQueue); 
      writer.WriteAsync(_DocumentViewer.Document as FixedDocument, dialog.PrintTicket); 
      return true; 
     } 

     return false; 
    } 
15

Mike's answer prace. Sposób, w jaki zdecydowałem się go wdrożyć, polegał na tym, że zamiast tego utworzyłem swoją własną przeglądarkę dokumentów, pochodzącą z DocumentViewer. Ponadto nie działała mi funkcja Cast do właściwości FixedDocument - przesyłanie do FixedDocumentSequence było.

GetDesiredPageOrientation to wszystko, czego potrzebujesz. W moim przypadku sprawdzam wymiary pierwszej strony, ponieważ generuję dokumenty o jednolitym rozmiarze i orientacji dla wszystkich stron w dokumencie oraz z tylko jednym dokumentem w sekwencji.

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Windows.Controls; 
using System.Windows.Xps; 
using System.Printing; 
using System.Windows.Documents; 

public class MyDocumentViewer : DocumentViewer 
{ 
    protected override void OnPrintCommand() 
    { 
     // get a print dialog, defaulted to default printer and default printer's preferences. 
     PrintDialog printDialog = new PrintDialog(); 
     printDialog.PrintQueue = LocalPrintServer.GetDefaultPrintQueue(); 
     printDialog.PrintTicket = printDialog.PrintQueue.DefaultPrintTicket; 

     // get a reference to the FixedDocumentSequence for the viewer. 
     FixedDocumentSequence docSeq = this.Document as FixedDocumentSequence; 

     // set the default page orientation based on the desired output. 
     printDialog.PrintTicket.PageOrientation = GetDesiredPageOrientation(docSeq); 

     if (printDialog.ShowDialog() == true) 
     { 
      // set the print ticket for the document sequence and write it to the printer. 
      docSeq.PrintTicket = printDialog.PrintTicket; 

      XpsDocumentWriter writer = PrintQueue.CreateXpsDocumentWriter(printDialog.PrintQueue); 
      writer.WriteAsync(docSeq, printDialog.PrintTicket); 
     } 
    } 
} 
+0

Miałem już zastąpiony domyślny DocumentViewer, ponieważ zawiera tekst, który nie jest przyjazny dla l18n, więc okazało się to świetnym rozwiązaniem. Dzięki! – JoeB

+0

Czy powinien to być printDialog.PrintTicket = printDialog.PrintQueue.DefaultPrintTicket ;? Nie kompiluje się inaczej –

+0

Byłoby miło zobaczyć twoją implementację GetDesiredPageOrientation! –

Powiązane problemy