Покажите несколько FixdDocuments в документе, как если бы они были одним документом

StackOverflow https://stackoverflow.com/questions/5831622

Вопрос

В моем приложении WPF у меня есть несколько FixedDocument объекты, которые я хочу отобразить вместе в DocumentViewer, как будто они были единственным документом.

Легко отобразить один FixedDocument в просмотре документов:

myDocumentViewer.Document = myFixedDocument;

Моей первой идеей было создать FixedDocumentSequence всего моего FixedDocuments (который также может быть установлен как DocumentViewer.document ценность, как он реализует IdocumentPaginatorsource) Но при строительстве FixedDocumentSequence, можно только добавить в коллекцию DocumentReference объекты. Нет простого способа добавить FixedDocument прямо, и я не могу понять, как создать и добавить DocumentReference что каким -то образом связано с одним из моих FixedDocuments.

Моя вторая идея - создать мастера FixedDocument, а затем пройти через все FixedDocuments, и перемещать свои страницы в мастер FixedDocument. Анкет Но я сталкиваюсь с всевозможными проблемами при попытке сделать это (для того, чтобы сделать с страницами, которые уже принадлежат к другому документу (без возможности удалить их из этого документа! И т. Д. и т. Д.)

Моя третья идея состояла в том, чтобы создать и построить временный XPSDocument, и извлечь FixedDocumentSequence что он автоматически создает. Я немного посмотрел на это, но это становится тем, что кажется излишне сложным, поэтому я подумал, что я сначала опубликую здесь, чтобы посмотреть, есть ли какие -либо другие идеи или помочь с моими первыми двумя попытками!

Это было полезно?

Решение

Догадаться.

Вы можете на самом деле динамически создать DocumentReference Объекты связаны с FixedDocuments:

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

Я не совсем уверен, как я пропустил SetDocument Метод до. Я думаю, я, должно быть, искал DocumentReference.Document свойство с Getter/Setter. Это немного непоследовательно в .NET Framework, чтобы вместо этого иметь GetDocument а также SetDocument Методы, на мой взгляд.

Другие советы

Вы пробовали это сделать, я попытался реализовать ваш первый подход. Я надеюсь, что это подойдет для вас -

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);
                            }
                        }
                    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top