5

XPS ドキュメントをFixedDocumentで保存しようとしています。これまでのところ、ページサイズを変更できませんでした。カスタムサイズに変更するにはどうすればよいですか?

この質問に対する最初の回答に基づいてコードを作成しました。より具体的には、次のコードを使用しています。

        if (File.Exists(filename)) {
            File.Delete(filename);
        }

        var oldParent = LogicalTreeHelper.GetParent(this) as ContentControl;
        try {
            oldParent.Content = null;

            FixedDocument doc = new FixedDocument();

            PageContent pageCnt = new PageContent();
            FixedPage page = new FixedPage();

            page.Children.Add(this);
            try {
                ((System.Windows.Markup.IAddChild)pageCnt).AddChild(page);
                doc.Pages.Add(pageCnt);

                XpsDocument xpsDoc = new XpsDocument(filename, FileAccess.ReadWrite);
                try {
                    var writer = XpsDocument.CreateXpsDocumentWriter(xpsDoc);
                    writer.Write(doc);
                }
                finally {
                    xpsDoc.Close();
                }
            }
            finally {
                page.Children.Clear();
            }
        }
        finally {
            ((ContentControl)oldParent).Content = this;
        }

ユーザー コントロールを XPS ドキュメントにコピーし、正常にコピーしますが、前述のとおり、既定の用紙サイズを使用します。

プロパティを使用しDocumentPaginator.PageSizeて新しいページ サイズを設定しようとしましたが (インスタンス化した後FixedDocument)、そのプロパティに割り当てたものは無視されるようです。結果の XPS ドキュメントのページは、既定の用紙サイズを保持します。

段階的に実行すると、PageSizeプロパティの値が実際に変更されていることがわかります。そのため、新しい値がDocumentPaginator.

さまざまなオンライン リソースを見つけましたが、いずれもまだ問題を解決していません。

  • MS Social でのこのフォーラムの投稿では、プロパティの設定が機能すると主張していますPageSizeが、私が知る限りではそうではありません。
  • ドキュメントは、プロパティの設定が機能すると主張し、PageSize私が試したことと同じことを行う例を提供します。(それ以外は、このドキュメントページに基づいて、使用する数値の単位さえわかりません。)
  • DocumentPage.Sizeドキュメントはプロパティも指していますが、そのプロパティは公開して変更することはできません。別のページ サイズを取得するためだけに、ドキュメントにページを追加する前に、ページ クラスをオーバーライドする必要がありますか?
  • このフォーラムへの投稿でも同じ問題が説明されていますが、その答えは私には無意味に思えます。DocumentPaginatorプロパティを一度しか使用していないため、インスタンスを保存できる「(...).DocumentPaginator を再度呼び出す」ことはありません。
  • この質問は有望に思えますが、実際にはページ サイズに関するものではなく、特定のページ上の画像の縮尺に関するものです。
  • 前述のPageSizeプロパティ (ここではデフォルトのサイズに設定されているようです) の他に、このチュートリアルではWidthとのHeightプロパティを使用しますFixedPage。ただし、簡単なテストのためにこれらに正のランダム値を割り当てると、XPS ドキュメントが破損しているように見え、XPS Viewer でドキュメントを開くときにエラー メッセージが表示されます。
4

2 に答える 2

2

FixedDocuments には固定ページがあります。FixedPage の高さと幅を制御できます。ややこのように:

        FixedPage pageOne = new FixedPage();
        pageOne.Height = 20;
        pageOne.Width = 10;

または XAML で:

高さ="20" 幅="10"

于 2012-10-31T11:39:54.527 に答える
1

FixedDocument はそのページのサイズでのみ印刷されると思います。FixedDocument を DocumentViewer にロードする場合でも、印刷ボタンをクリックしたときにプリンター設定のページ サイズを変更しても効果はありません。FixedDocument は、まさにその定義により、そのコンテンツの忠実度を正確に保持します。

これを変更する唯一の方法は、FixedDocument.DocumentPaginator の関数を内部的に呼び出し、それに応じて戻り値を変更する派生 DocumentPaginator を作成することです。

于 2012-10-15T12:17:53.740 に答える