Pregunta

En mi aplicación WPF, tengo varios Documento fijo objetos, que quiero mostrar juntos en un Visor de documentos, como si fueran un solo documento.

Es fácil mostrar un solo Documento fijo En un espectador de documentos:

myDocumentViewer.Document = myFixedDocument;

Mi primera idea fue crear un Secuencia fija de todo mi Documentos fijos (que también se puede configurar como el DocumentViewer.document valor a medida que implementa IdocumentPaginatorSource). Pero al construir un Secuencia fija, uno solo puede agregar a una colección de Referencia de documento objetos. No hay una forma directa de agregar un Documento fijo directamente, y no puedo entender cómo crear y agregar un Referencia de documento que de alguna manera está vinculado a uno de mis Documentos fijos.

Mi segunda idea era crear un maestro Documento fijo, y luego atraviesa todo el Documentos fijos, y mueve sus páginas al maestro Documento fijo. Pero me encuentro con todo tipo de problemas al tratar de hacer esto (para ver con páginas que ya pertenecen a otro documento (¡sin capacidad para eliminarlos de ese documento! Etc., etc.)

Mi tercera idea era crear y construir un temporal XPSDocument, y recuperar el Secuencia fija que automáticamente parece crear. He mirado esto un poco, pero es lo que se siente innecesariamente complejo, así que pensé en publicar aquí primero para ver si hay otras ideas o ayudar con mis dos primeros intentos.

¿Fue útil?

Solución

Lo averigué.

De hecho, puedes crear dinámicamente Referencia de documento objetos vinculados a Documentos fijos:

var documentReference = new DocumentReference();
documentReference.SetDocument(document);
fixedDocumentSequence.References.Add(documentReference);

No estoy muy seguro de cómo me perdí el SetDocument Método antes. Creo que debo haber estado buscando un DocumentReference.Document Propiedad con Getter/Setter. Es un poco inconsistente en el marco .net para tener en cambio GetDocument y SetDocument Métodos, en mi opinión.

Otros consejos

¿Has intentado hacer esto? He intentado implementar tu primer enfoque. Espero que esto lo haga por ti -

FixedDocument destFixedDoc = new FixedDocument();
    foreach (FixedDocument sourceFixedDoc in YourCollection)
                    {
                        if ((sourceFixedDoc != null) && (sourceFixedDoc.Pages != null))
                        {
                            foreach (PageContent sourcePage in sourceFixedDoc.Pages)
                            {
                                PageContent newPage = new PageContent();
                                newPage.Source = sourcePage.Source;
                                (newPage as IUriContext).BaseUri = ((IUriContext)sourcePage).BaseUri;
                                newPage.GetPageRoot(true);
                                destFixedDoc.Pages.Add(newPage);
                            }
                        }
                    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top