2013-02-27 32 views
6

मैं एक रसीद प्रिंटर (स्टार टीएसपी 700II) में डब्ल्यूपीएफ में एक दृश्य प्रिंट कर रहा हूं। जब दृश्य छोटा होता है तो यह ठीक है और यह ठीक प्रिंट करता है।रसीद प्रिंटर पर डब्ल्यूपीएफ प्रिंट विज़ुअल क्लिपिंग छवि

हालांकि जब दृश्य बढ़ता है तो यह छवि को क्लिप करेगा और यह स्टार प्रिंटर में रोल पर एक निश्चित आकार पर प्रिंट करता है और फिर यह छवि के शेष को प्रिंट किए बिना बस कट जाता है।

PrintDialog.PrintVisual(Grid1, "Test"); 

मैंने पेजमीडिया आकार को समायोजित करने का प्रयास किया है लेकिन यह प्रिंटआउट पर कुछ भी नहीं बदल रहा है।

दिलचस्प जब मैं माइक्रोसॉफ्ट एक्सपीएस दस्तावेज़ राइटर को प्रिंट करता हूं तो सहेजी गई फ़ाइल में पूर्ण छवि होती है।

enter image description here

मैं भी आकार इसे करने के लिए प्रिंट देखा है हमेशा अधिकतम ऊंचाई = एक A4 पेज की ऊंचाई है। प्रश्न यह है कि मैं इसे A4 की ऊंचाई से पहले प्रिंट करने के लिए कैसे प्राप्त करूं (जब मैं प्रिंटर वरीयताओं से एक परीक्षण दस्तावेज़ मुद्रित करता हूं तो यह ऐसा करने में सक्षम होता है)।

+6

आपका बारकोड पूरी तरह से पठनीय है। – AgentFire

+0

वैसे भी एक परीक्षण सर्वर से बाहर है, इसलिए वास्तव में कोई फर्क नहीं पड़ता (हालांकि सिर के लिए धन्यवाद)। – DermFrench

उत्तर

8

ठीक है मैंने निम्न वर्ग का उपयोग करके इसे हल किया। मूल रूप से मैं डाल क्या मैं एक ScrollViewer अंदर प्रिंट और है कि अंदर एक StackPanel रखना चाहते हैं, तो अपने प्रिंट सहायक को यह StackPanel गुजरती हैं और यह अब कतरन बिना प्रिंट:

public static class PrintHelper 
{ 

    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; 
    } 

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

    public static void PrintNoPreview(PrintDialog printDialog,FixedDocument fixedDoc) 
    { 
     printDialog.PrintDocument(fixedDoc.DocumentPaginator, "Test Print No Preview"); 

    } 

} 
+0

इस उत्तर के लिए धन्यवाद, यह मेरे दिन को सुरक्षित करता है। मैंने अन्य सभी चीजों की कोशिश की लेकिन प्रिंटविज़ुअल विधि को नजरअंदाज कर दिया। –

0

आप PrintDialog.PrintVisual का उपयोग कर रहे हैं जो केवल आप जो देख सकते हैं उसे मुद्रित करना चाहिए। बहु पृष्ठ परिणामों के लिए आपको और अधिक करने की आवश्यकता होगी।

आप DocumentPaginator http://msdn2.microsoft.com/en-us/library/system.windows.documents.documentpaginator.aspx

या

PrintDialog.PrintDocument http://msdn2.microsoft.com/en-us/library/system.windows.controls.printdialog.printdocument.aspx की कोशिश कर सकते।

+0

जब मैं दृश्य प्रिंट करता हूं और माइक्रोसॉफ़्ट एक्सपीएस दस्तावेज़ राइटर का चयन करता हूं तो यह ठीक प्रिंट करता है, मुझे नहीं लगता कि समस्या यह है कि मैं दृश्य नहीं देख सकता, क्योंकि मैं स्क्रीन पर सभी दृश्य देख सकता हूं, प्रिंटर कटौती करता है कागज इससे पहले कि यह सब प्रिंट करता है। – DermFrench

1

पिछले कुछ दिनों मैं भी इस समस्या थी।

समाधान स्मृति में मूल तत्व प्रस्तुत करना था। प्रिंटर का उपयोग करने के लिए

PrintDialog dlg = new PrintDialog(); 

// Let it meassure to the printer's default width 
// and use an infinity height 
Grid1.Meassure(new Size(dlg.PrintableAreaWidth, double.PositiveInfinity)); 

// Let it arrange to the meassured size 
Grid1.Arrange(new Rect(Grid1.DesiredSize)); 

// Update the element 
Grid1.UpdateLayout(); 

फिर एक नई papersize बनाएँ:

आप अपने प्रिंटर की कटौती सेटिंग देखनी चाहिए (उदाहरण, का उपयोग Receipt काटने मोड)।

// Create a new papersize with the printer's default width, and the Grids height 
dlg.PrintTicket.PageMediaSize 
= new PageMediaSize(dlg.PrintableAreaWidth, Grid1.ActualHeight); 

// Let's print ! 
dlg.PrintVisual(Grid1, "blah"); 

यह मेरे लिए एक आकर्षण की तरह काम करता है, और मुझे बहुत सारे कोड बचाता है।

रसीद प्रिंटर की pagination की आवश्यकता नहीं है, मुझे लगता है कि इसका उपयोग करना बहुत आसान है।

ध्यान दें कि मैं नहीं एक UIElement XAML में बनाया प्रतिपादन के लिए इस विधि का उपयोग , यह सब मूल तत्व के रूप में एक StackPanel साथ कोड में की गई है।

+0

मैं वास्तव में एक दृश्य मुद्रित कर रहा था (इसलिए मुझे नहीं लगता कि मैं इसे उत्तर के रूप में स्वीकार कर सकता हूं)? – DermFrench

+0

क्या वह वही नहीं है? बीटीडब्ल्यू आपको यह नहीं करना है कि यह भविष्य में संदर्भ के लिए है यदि कोई और इस समस्या से आता है, क्योंकि मुझे लगता है कि अगर आपको 'पेजिनेशन' की आवश्यकता नहीं है तो प्रिंट करने का यह सबसे आसान तरीका है;) – DeMama

+0

यह शायद वही है, लेकिन चूंकि दूसरा काम करता है, हम शायद इसे परीक्षण करने से परेशान नहीं करेंगे, और यह भी पेजिनेट करता है (यदि उपयोगकर्ता ए 4 प्रिंटर पर प्रिंट करने का निर्णय लेता है - मुझे पता है कि मूल प्रश्न में नहीं था लेकिन यह अच्छा दुष्प्रभाव लगता है जवाब मैंने स्वीकार किया)। – DermFrench

संबंधित मुद्दे