2

私の WPF アプリには、複数のFixedDocumentオブジェクトがあり、それらを 1 つのドキュメントのようにDocumentViewerにまとめて表示したいと考えています。

ドキュメント ビューアーに1 つのFixedDocumentを表示するのは簡単です。

myDocumentViewer.Document = myFixedDocument;

私の最初のアイデアは、すべての FixedDocuments のFixedDocumentSequenceを作成することでした ( IDocumentPaginatorSourceを実装しているため、 DocumentViewer.Document値として設定することもできます)。ただし、 FixedDocumentSequenceを構築する場合、 DocumentReferenceオブジェクトのコレクションにのみ追加できます。FixedDocumentを直接追加する簡単な方法はありません。また、何らかの形でFixedDocumentsの 1 つにリンクされているDocumentReferenceを作成して追加する方法がわかりません。

私の 2 番目のアイデアは、マスターFixedDocumentを作成し、次にすべてのFixedDocumentsをループして、それらのページをマスターFixedDocumentに移動することでした。しかし、これを行おうとすると、あらゆる種類の問題に遭遇します(すでに別のドキュメントに属しているページを処理するため(そのドキュメントからそれらを削除する機能はありません!など))。

3 つ目のアイデアは、一時的なXpsDocumentを作成してビルドし、自動的に作成されたように見えるFixedDocumentSequenceを取得することでした。私はこれを少し調べましたが、不必要に複雑に感じられるようになってきているので、最初にここに投稿して、他のアイデアがあるかどうかを確認したり、最初の 2 つの試みを支援したりしようと思いました!

4

2 に答える 2

2

理解した。

実際、 FixedDocumentsにリンクされたDocumentReferenceオブジェクトを動的に作成できます。

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

以前にメソッドを見逃した方法がよくわかりませんSetDocumentDocumentReference.Documentゲッター/セッターでプロパティを探していたに違いないと思います。私の意見では、代わりにGetDocumentメソッドとSetDocumentメソッドを使用するのは、.NET フレームワークでは少し一貫性がありません。

于 2011-05-03T10:21:39.840 に答える
1

あなたはこれをやってみましたか、私はあなたの最初のアプローチを実装しようとしました. これでうまくいくことを願っています -

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);
                            }
                        }
                    }
于 2011-04-29T12:27:22.407 に答える