Question

Dans mon WPF app, j'ai plusieurs FixedDocument objets que je veux afficher ensemble dans un DocumentViewer , comme si elles étaient un seul document.

Il est facile d'afficher un FixedDocument dans un lecteur de document:

myDocumentViewer.Document = myFixedDocument;

Ma première idée était de créer un FixedDocumentSequence de tous mes FixedDocuments (qui peut aussi être défini comme DocumentViewer.Document valeur comme outils IDocumentPaginatorSource ). Mais quand la construction d'un FixedDocumentSequence , on ne peut ajouter à une collection de DocumentReference objets. Il n'y a aucun moyen simple d'ajouter un FixedDocument directement, et je ne peux pas comprendre comment créer et ajouter un DocumentReference qui est en quelque sorte lié à l'un de mes FixedDocuments .

Ma deuxième idée était de créer un maître FixedDocument , puis boucle à travers tous les FixedDocuments , et déplacer leurs pages dans le maître FixedDocument . Mais je lance dans toutes sortes de problèmes en essayant de le faire (à faire avec des pages appartenant déjà à un autre document (sans possibilité de les retirer de ce document! Etc etc.)

Ma troisième idée était de créer et de construire un temporaire XpsDocument , et récupérer les FixedDocumentSequence qu'il semble créer automatiquement. Je l'ai regardé ce un peu, mais il est en train de devenir ce qui se sent inutilement complexe, donc je pensais que je poste ici pour voir s'il y a d'autres idées, ou avec l'aide de mes deux premières tentatives!

Était-ce utile?

La solution

figured it out.

Vous pouvez en effet, créer de façon dynamique DocumentReference projet d'objets liés à FixedDocuments :

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

Je ne suis pas tout à fait sûr que je manqué la méthode SetDocument avant. Je pense que je dois avoir cherché une propriété DocumentReference.Document avec getter / setter. Il est un peu incohérent dans le cadre de .NET à la place ont GetDocument et setDocument méthodes, à mon avis.

Autres conseils

Avez-vous essayé de faire cela, je l'ai essayé la mise en œuvre de votre 1ère approche. J'espère que cela fera pour vous -

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);
                            }
                        }
                    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top