Покажите несколько FixdDocuments в документе, как если бы они были одним документом
-
27-10-2019 - |
Вопрос
В моем приложении 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);
}
}
}