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; }
}
}