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 でドキュメントを開くときにエラー メッセージが表示されます。