Вывод пользовательского размера страницы в 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);
}
Другие вопросы по тегам