2008-10-08 1338 views
7

.Net contiene un buen control llamado DocumentViewer. también ofrece un subcontrol para encontrar texto en el documento cargado (eso es al menos lo que se supone que debe hacer).WPF DocumentViewer Find-function y documentos FixedPage

Al insertar los objetos FixedPage como fuente de documentos para DocumentViewer, la funcionalidad de búsqueda simplemente no encuentra nada. Ni siquiera letras sueltas. No he probado FlowDocument 's, sin embargo, como la documentación de DocumentViewer no es tan útil y los recursos en la red no son realmente existente, ahora quiero pedir a la comunidad stackoverflow:

¿Qué se necesita para obtener la función Find del WPF DocumentViewer trabajando con documentos FixedPage?

[por cierto, yo no uso encargo ControlTemplates para DocumentViewer]

Respuesta

8

tenía este mismo problema con FixedDocuments. Si convierte su FixedDocument a un documento XPS, funciona bien.

Ejemplo de creación de un documento XPS en memoria desde un FixedDocument que se muestra en un DocumentViewer.

// 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 funcionaba perfectamente para mí –

1

tuve problemas con la búsqueda de texto en RichTextBox, era demasiado lento. Lo que hice fue crunch the xaml cada vez que quería buscar. Mejoré varios órdenes de magnitud.

Es una gran solución basada en una parte de Chris Anderson book.

Saludos

Cuestiones relacionadas