Używanie kontrolki WpF DocumentViewer Nie mogę określić, jak ustawić PageOrientation w PrintDialog, który wyświetla się w oknie DocumentViewer, gdy użytkownik kliknie przycisk drukowania. Czy istnieje sposób, aby się w to wciągnąć?Ustawienie właściwości strony dla Document Viewer Wpf PrintDialog
Odpowiedz
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;
}
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);
}
}
}
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
Czy powinien to być printDialog.PrintTicket = printDialog.PrintQueue.DefaultPrintTicket ;? Nie kompiluje się inaczej –
Byłoby miło zobaczyć twoją implementację GetDesiredPageOrientation! –