DocumentPaginator不能直接缩放,需要继承DocumentPaginator后才能进行缩放
/// <summary>
/// 重写DocumentPaginator 用于流文档打印缩放
/// </summary>
public class FittedDocumentPaginator : DocumentPaginator
{
//流文档
private DocumentPaginator DocPaginator {get; set; }
//缩放
private readonly ScaleTransform _sTransform;
//打印机属性
PrintCapabilities PrintCap { get; set; }
public FittedDocumentPaginator(DocumentPaginator baseDp,PrintCapabilities printCap, double scaleX,double scaleY)
{
if (baseDp == null)
return;
DocPaginator = baseDp;
PrintCap = printCap;
_sTransform = new ScaleTransform(scaleX, scaleY);
}
public override bool IsPageCountValid
{
get { return DocPaginator.IsPageCountValid; }
}
public override int PageCount
{
get { return DocPaginator.PageCount; }
}
public override Size PageSize
{
get { return DocPaginator.PageSize; }
set { DocPaginator.PageSize = value; }
}
public override IDocumentPaginatorSource Source
{
get { return DocPaginator.Source; }
}
/// <summary>
/// print.document时会调用GetPage方法
/// </summary>
/// <param name="pageNumber"></param>
/// <returns></returns>
public override DocumentPage GetPage(int pageNumber)
{
DocumentPage page = DocPaginator.GetPage(pageNumber);
ContainerVisual newVisual = new ContainerVisual();
DrawingVisual title = new DrawingVisual();
//缩放
title.Transform = _sTransform;
title.Children.Add(page.Visual);
newVisual.Children.Add(title);
//根据左右边距移动到可以打印的区域
newVisual.Transform = new TranslateTransform(PrintCap.PageImageableArea.OriginWidth, PrintCap.PageImageableArea.OriginHeight);
return new DocumentPage(newVisual, page.Size, page.BleedBox, page.ContentBox);
}
}