2009-06-16 13 views
16

Wpf DocumentViewer नियंत्रण का उपयोग करके मैं यह नहीं समझ सकता कि PrintDialog पर पेजऑरिएंटेशन कैसे सेट करें, जब दस्तावेज़ प्रिंट बटन पर क्लिक करता है तो DocumentViewer प्रदर्शित करता है। क्या इसमें शामिल होने का कोई तरीका है?Wpf DocumentViewer के लिए पेजऑरिएंटेशन सेट करना PrintDialog

उत्तर

10

मेरे दस्तावेज़ व्यूअर के प्रिंट संवाद पर अभिविन्यास सेट करने के लिए उपयोग किए जाने वाले वर्कअराउंड को टेम्पलेट से बटन को छोड़कर दस्तावेज़ व्यूअर नियंत्रण पर प्रिंट बटन को छिपाना था। मैं तो अपने ही प्रिंट बटन प्रदान की है और निम्नलिखित कोड को यह बंधे:

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 काम करता है। जिस तरह से मैंने इसे लागू करने के लिए चुना है, वह इसके बजाय DocumentViewer से व्युत्पन्न अपना स्वयं का दस्तावेज़ दर्शक बनाना था। साथ ही, फिक्स्ड डॉक्यूमेंट में दस्तावेज़ प्रॉपर्टी कास्टिंग मेरे लिए काम नहीं कर रहा था - फिक्स्ड डॉक्यूमेंट सिक्योरिटी कास्टिंग था।

GetDesiredPageOrientation जो कुछ भी आपको चाहिए, वह है। मेरे मामले में, मैं पहले पृष्ठ के आयामों का निरीक्षण कर रहा हूं, क्योंकि मैं दस्तावेजों को उत्पन्न करता हूं जो दस्तावेज़ में सभी पृष्ठों के लिए समान आकार और अभिविन्यास हैं, और अनुक्रम में केवल एक दस्तावेज़ के साथ।

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

मैंने पहले ही डिफ़ॉल्ट दस्तावेज़ व्यूअर को ओवरराइड कर दिया था क्योंकि इसमें टेक्स्ट है जो गैर-एल 18 एन-अनुकूल है, इसलिए यह एक अच्छा समाधान साबित हुआ। धन्यवाद! – JoeB

+0

इसे प्रिंट किया जाना चाहिएDialog.PrintTicket = printDialog.PrintQueue.DefaultPrintTicket ;? अन्यथा संकलित नहीं करता –

+0

GetDesiredPageOrientation के कार्यान्वयन को देखना भी अच्छा लगेगा! –