我的打印预览对话框中的输出纸张尺寸有问题。它应该是A4,但始终将我的PrintPreview显示为Letter Size。
我使用DocumentPaginator
类作为多页输出的基础。 PageCount是正确的。我找到了this解决方案,但对我来说它不起作用,最终效果还是一样。抱歉,很长的代码,但是我不知道错误/忽略在哪里。任何想法都很感激
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();
}
}
派生文档分页器类:
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; } }
}
简单的打印预览窗口:
public partial class PrintPreview : Window
{
public PrintPreview()
{
InitializeComponent();
}
public IDocumentPaginatorSource Document
{
get { return viewer.Document; }
set { viewer.Document = value; }
}
}