Вывод пользовательского размера страницы в XPS из отчета WPF
У меня есть отчет WPF, который рисует содержимое отчета в нестандартном размере страницы (мы можем рассматривать его как A4, проблема та же), если я отправляю вывод на принтер (физический или виртуальный, например, PDFCreator), мой нестандартный размер страницы правильно сохранены для каждой страницы.
Но когда я вывожу его в формате XPS, страницы адаптируются к размеру страницы Letter.
Как сохранить мой размер страницы при выводе отчета WPF в XPS?
Моя заключительная цель: получить PDF от WPF, и мой подход заключается в преобразовании XPS в PDF с использованием PDFSharper. Преобразование работает хорошо, но вывод XPS портит мой пользовательский размер страницы. Другие подходы приветствуются, но я все равно хотел бы понять и контролировать размер выходной страницы XPS.
ОБРАЗЕЦ ПРОЕКТА: Test_WpfToPDF_withXpsCorruptingPageSizeToLetter.zip
1 ответ
Кажется, это работает, когда вы оборачиваете пользовательский элемент управления (отчет) внутри другого элемента, предоставляя также реальный размер и не забывая помещать фон. Я не знаю точно, почему, но фон, кажется, помогает, наряду с размером.
public override DocumentPage GetPage(int pageNumber) {
var page = new MyUserControl();
Border wrapper = new Border();
wrapper.Width = this.PageSize.Width;
wrapper.Height = this.PageSize.Height;
wrapper.Background = Brushes.White;
wrapper.Child = page;
wrapper.Measure(this.PageSize);
wrapper.Arrange(new Rect(new Point(0, 0), this.PageSize));
wrapper.UpdateLayout();
return new DocumentPage(wrapper);
}