PrintPreview с использованием Xps и Xps.Packaging - вывод неправильного размера страницы

У меня проблема с размером бумаги в диалоговом окне предварительного просмотра. Это должно быть A4, но он продолжает отображать мой PrintPreview как Размер письма. я использую DocumentPaginator класс, как база для многостраничного вывода. PageCount является правильным. Я нашел это решение, но для меня оно не работает, конечный эффект все тот же. Извините, за длинный код, но я понятия не имею, где может быть ошибка / упущение. Любые идеи высоко ценится

private void BtnPrint_Click(object sender, RoutedEventArgs e)
        {
            PrintDialog dialog = new PrintDialog();
            PageMediaSize pageSize = new PageMediaSize(PageMediaSizeName.ISOA4);
            dialog.PrintTicket.PageMediaSize = pageSize;

            var paginator = new RowPaginator(SomeData)
            { PageSize = new Size(dialog.PrintableAreaWidth, dialog.PrintableAreaHeight) };

            using (XpsDocument xpsDocument = new XpsDocument(someFileName, FileAccess.ReadWrite))
            {
                XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(xpsDocument);
                writer.Write(paginator);

                PrintPreview previewWindow = new PrintPreview
                {
                    Owner = this,
                    Document = xpsDocument.GetFixedDocumentSequence()
                };
                previewWindow.ShowDialog();
            }
        }

Производный документ Paginator класс:

public class RowPaginator : DocumentPaginator
    {
        Data data;
        public RowPaginator(Data data)
        {
            this.data = data;
        }

        public override DocumentPage GetPage(int pageNumber)
        {
            var page = new PageElementRenderer(pageNumber, this.data)
            {
                Width = PageSize.Width,
                Height = PageSize.Height,
            };
            page.Measure(PageSize);
            page.Arrange(new Rect(new Point(0, 0), PageSize));
            page.UpdateLayout();

            return new DocumentPage(page);
        }
        public override bool IsPageCountValid { get { return true; } }
        public override int PageCount { get { return someInteger; } }
        public override Size PageSize
        {
            get { return this.pageSize; }
            set { this.pageSize = value; }
        }
        public override IDocumentPaginatorSource Source { get { return null; } }
    }

Простое окно PrintPreview:

public partial class PrintPreview : Window
    {
        public PrintPreview()
        {
            InitializeComponent();
        }

        public IDocumentPaginatorSource Document
        {
            get { return viewer.Document; }
            set { viewer.Document = value; }
        }
    }

0 ответов

Другие вопросы по тегам