2015-12-11 3 views
10

मैं वर्तमान में एक सामग्री कंटेनर की सामग्री मुद्रित करने की कोशिश कर रहा हूं (इसमें केवल जानकारी के साथ डेटाग्रिड्स शामिल हैं) और PrintFixedDocument का उपयोग कर एक छवि। यह पूरी छवि गुणवत्ता के साथ मेरी मशीन (विंडोज़ 10) पर बेकार ढंग से प्रिंट करता है और विंडोज 8 पर एक और पीसी पर गुणवत्ता समान होती है।प्रिंटफिक्स्ड डॉक्यूमेंट डब्लूपीएफ प्रिंट गुणवत्ता- विंडोज 10/8 बनाम विंडोज 7

हालांकि जब यह विंडोज 7 पीसी पर किया जाता है तो छवि की गुणवत्ता बहुत खराब हो जाती है और अंतिम परिणाम बहुत धुंधला होता है। यह एक समस्या है क्योंकि कंप्यूटर को विभिन्न कारणों से विंडोज 7 से अपडेट नहीं किया जा सकता है, इसलिए मुझे आश्चर्य है कि किसी और ने इसका अनुभव किया है और यदि ऐसा कोई कामकाज है? इसके अलावा मेरे GetFixedDocument विधि के साथ एक मुद्दा हो सकता है, हालांकि मैं बाहर काम नहीं कर सकता क्यों यह दोनों जीत 10 और 8 नहीं बल्कि 7.

नोट यह प्रत्येक पीसी

पर आवेदन का एक स्थापित संस्करण से चल रहा है पर काम करेगा

  <StackPanel Margin="-105,146,66,0" Height="900" VerticalAlignment="Top" x:Name="PrintImageContextMenu"> 
       <Image Canvas.ZIndex="0" Source="{Binding Coupon.OverlayImagePath}" Margin="0,-21,-76,108" Stretch="Fill" /> 

       <ContentControl Content="{Binding}" ContentTemplateSelector="{StaticResource DataViewerDataTemplateSelector}" /> 

      </StackPanel> 
:

भी पर सभी 3 ऑपरेटिंग सिस्टम

किसी भी मदद की सराहना की जाएगी

Xaml एकाधिक प्रिंटर पर कोशिश की गई

सी #: सार्वजनिक आंशिक वर्ग CouponViewerView { सार्वजनिक CouponViewerView() { InitializeComponent(); }

public void Print() 
    { 
     //Executes On Thread 
     Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, (EventHandler)delegate 
     { 
      UpdateLayout(); 

      var fixedDoc = PrintHelper.GetFixedDocument(StackPanelToPrint, new PrintDialog()); 

      PrintHelper.ShowPrintPreview(fixedDoc); 


     }, null, null); 



    } 

    private void PrintCurrentForm(object sender, RoutedEventArgs e) 
    { 
     Print(); 
    } 

सी # प्रिंट सहायक कोड: और

public static void ShowPrintPreview(FixedDocument fixedDoc) 
     { 
      var wnd = new Window(); 
      var viewer = new DocumentViewer(); 
      viewer.Document = fixedDoc; 
      wnd.Content = viewer; 
      wnd.ShowDialog(); 
     } 


    public static FixedDocument GetFixedDocument(FrameworkElement toPrint, PrintDialog printDialog) 
     { 
      var capabilities = printDialog.PrintQueue.GetPrintCapabilities(printDialog.PrintTicket); 
      var pageSize = new Size(printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight); 
      var visibleSize = new Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight); 
      var fixedDoc = new FixedDocument(); 
      //If the toPrint visual is not displayed on screen we neeed to measure and arrange it 
      toPrint.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); 
      toPrint.Arrange(new Rect(new Point(0, 0), toPrint.DesiredSize)); 
      // 
      var size = toPrint.DesiredSize; 
      //Will assume for simplicity the control fits horizontally on the page 
      double yOffset = 0; 
      while (yOffset < size.Height) 
      { 
       var vb = new VisualBrush(toPrint) 
       { 
        Stretch = Stretch.None, 
        AlignmentX = AlignmentX.Left, 
        AlignmentY = AlignmentY.Top, 
        ViewboxUnits = BrushMappingMode.Absolute, 
        TileMode = TileMode.None, 
        Viewbox = new Rect(0, yOffset, visibleSize.Width, visibleSize.Height) 
       }; 
       var pageContent = new PageContent(); 
       var page = new FixedPage(); 
       ((IAddChild)pageContent).AddChild(page); 
       fixedDoc.Pages.Add(pageContent); 
       page.Width = pageSize.Width; 
       page.Height = pageSize.Height; 
       var canvas = new Canvas(); 
       FixedPage.SetLeft(canvas, capabilities.PageImageableArea.OriginWidth); 
       FixedPage.SetTop(canvas, capabilities.PageImageableArea.OriginHeight); 
       canvas.Width = visibleSize.Width; 
       canvas.Height = visibleSize.Height; 
       canvas.Background = vb; 
       page.Children.Add(canvas); 
       yOffset += visibleSize.Height; 
      } 
      return fixedDoc; 
     } 
+0

बस गिगल्स के लिए हालांकि मुझे यकीन है कि आप शायद पहले से ही चेक कर चुके हैं।क्या आपने यह सुनिश्चित करने के लिए Win7 मशीन पर सेटिंग्स की जांच की है कि यह ड्राफ्ट मोड में प्रिंट नहीं कर रहा है या कोई मैन्युअल आकार बदलने आदि है, साथ ही यह सुनिश्चित किया है कि कोई भी प्रिंट ड्राइवर अद्यतित है? –

+0

हां सभी सामान्य संदिग्धों को समाप्त कर दिया है। सभी प्रिंटर और सभी ड्राइवरों पर अच्छी गुणवत्ता के लिए प्रिंटिंग अद्यतित हैं। यह वास्तव में अजीब है जैसा कि कभी भी ऐसा कुछ नहीं देखा। – philmckendry

+0

हाँ, मुझे पता है कि उन्होंने ड्राइवरों के पैकेज और सामान में कुछ बदलाव किए हैं ताकि निर्माताओं को OEM ब्लूटवेयर बकवास के समूह पर लोडिंग छोड़ने की कोशिश की जा सके और जहां तक ​​मुझे पता था कि इसे ओएस संस्करण के बावजूद वही तरीके से खिलाया जाना चाहिए। यह एक दिलचस्प है। –

उत्तर

0

किसी को भी इस का अनुभव किया है और यदि ऐसा है तो वहाँ एक समाधान है?

यह एकमात्र सीधा उत्तरदायी प्रश्न है, हां, कई। ध्यान रखें कि आप अक्सर प्रिंटर पर एक छवि को काफी कम करते हैं, वे मॉनीटर की तुलना में बहुत अधिक बिंदुओं-प्रति-इंच रिज़ॉल्यूशन वाले डिवाइस होते हैं। Win7 को बूट करने वाली मशीन अक्सर 96 डीपीआई पर चलती है, बाद में बेहतर मॉनीटर होते हैं इसलिए अक्सर उच्च डीपीआई सेटिंग्स पर चलते हैं। स्रोत छवि के लिए बाहर देखने के लिए पहली बात है। यदि इसमें एक पिक्सेल आकार है जो कि Win7 पीसी के लिए पर्याप्त है तो यह 600 डीपीआई तक उड़ाए जाने पर बहुत धुंधला हो सकता है।

शायद WPF में सबसे अनजान स्केलिंग व्यवहार तब होता है जब छवि संरेखण पूरी तरह से स्केलिंग के बाद लक्ष्य पिक्सेल से मेल नहीं खाता है। this blog post में अच्छी तरह से वर्णित एक समस्या। this SO question को भी पढ़ना सुनिश्चित करें, VisualBrush और इसकी धुंधली समस्या के उपयोग के लिए लगभग एकदम सही फिट है। इस समस्या को जोड़ा गया UseLayoutRounding संपत्ति के साथ .NET 4.0 में संबोधित किया गया था। आप इसका उपयोग नहीं कर रहे हैं, आपको निश्चित रूप से करना चाहिए। बिटमैपस्कलिंग मोड को अंधाधुंध रूप से लागू न करें जो डुप्ली अनुशंसा करता है, छवि का प्रकार (लाइन-कला बनाम फोटो) बहुत मायने रखता है।

+0

उत्तर के लिए ठीक है धन्यवाद। यह मुझे दूर जाने के लिए बहुत कुछ देता है और इसे हल करने के लिए देखता है – philmckendry

0

मेरे पास एक ऐसा ही मुद्दा था जो मैंने पीडीएफ बनाने के लिए सीधे प्रिंटिंग के बजाय समाप्त किया और क्लाइंट के लिए खुला था और अगर वे ठीक चाहते थे तो वे इसे प्रिंट कर सकते थे।

विंडोज 7 बस कुछ WPF प्रिंटिंग के साथ टूटा हुआ लगता है।