2008-10-08 14 views
7

.Net में DocumentViewer नामक एक अच्छा नियंत्रण होता है। यह लोड किए गए दस्तावेज़ में टेक्स्ट ढूंढने के लिए एक सबस्ट्रक्चर भी प्रदान करता है (कम से कम यह क्या करना चाहिए)।WPF DocumentViewer Find-function और FixedPage दस्तावेज़

की ऑब्जेक्ट्स DocumentViewer के लिए दस्तावेज़ स्रोत के रूप में डालने पर, खोज-कार्यक्षमता को कुछ भी नहीं मिला है। एक भी पत्र नहीं।

क्या यह प्राप्त करने की आवश्यकता है: मैं अभी तक की कोशिश की है नहीं FlowDocument की, DocumentViewer के लिए प्रलेखन के रूप में है कि उपयोगी नहीं है और नेट पर संसाधनों की वजह से मौजूदा नहीं कर रहे हैं, मैं अब stackoverflow समुदाय पूछना चाहता हूँ WPF DocumentViewer का ढूँढ-फ़ंक्शन FixedPage दस्तावेज़ों के साथ काम कर रहा है?

उत्तर

8

मुझे फिक्स्ड डॉक्यूमेंट्स के साथ भी यही समस्या थी। यदि आप अपने फिक्स्ड डॉक्यूमेंट को एक्सपीएस दस्तावेज़ में कनवर्ट करते हैं तो यह ठीक काम करता है।

एक फिक्स्ड डॉक्यूमेंट से स्मृति में एक्सपीएस दस्तावेज़ बनाने का उदाहरण दस्तावेज़ दस्तावेज़ में प्रदर्शित करना।

// Add to xaml: <DocumentViewer x:Name="documentViewer" /> 
// Add project references to "ReachFramework" and "System.Printing" 
using System; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.IO; 
using System.IO.Packaging; 
using System.Windows.Xps.Packaging; 

namespace WpfApplication1 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      // Set up demo FixedDocument containing text to be searched 
      var fixedDocument = new FixedDocument(); 
      var pageContent = new PageContent(); 
      var fixedPage = new FixedPage(); 
      fixedPage.Children.Add(new TextBlock() { Text = "Demo document text." }); 
      pageContent.Child = fixedPage; 
      fixedDocument.Pages.Add(pageContent); 

      // Set up fresh XpsDocument 
      var stream = new MemoryStream(); 
      var uri = new Uri("pack://document.xps"); 
      var package = Package.Open(stream, FileMode.Create, FileAccess.ReadWrite); 
      PackageStore.AddPackage(uri, package); 
      var xpsDoc = new XpsDocument(package, CompressionOption.NotCompressed, uri.AbsoluteUri); 

      // Write FixedDocument to the XpsDocument 
      var docWriter = XpsDocument.CreateXpsDocumentWriter(xpsDoc); 
      docWriter.Write(fixedDocument); 

      // Display XpsDocument in DocumentViewer 
      documentViewer.Document = xpsDoc.GetFixedDocumentSequence(); 
     } 
    } 
} 

enter image description here

+0

+1 मेरे लिए पूरी तरह से काम किया –

1

मैं richtextbox में पाठ की खोज करने में समस्या आई [btw, मैं कस्टम ControlTemplates के लिए DocumentViewer का उपयोग नहीं करते], यह बहुत धीमी गति से किया गया था। जब भी मैं खोजना चाहता था, मैंने जो किया वह xaml को क्रंच कर रहा था। मैंने परिमाण के कई आदेशों में सुधार किया।

यह क्रिस एंडरसन के book के एक हिस्से में आधारित एक बड़ा कामकाज है।

चीयर्स