WPF 打印机打印PDF功能

其实很简单,直接把界面的控件传入直接打印控件的内容:
private void Button_Click(object sender, RoutedEventArgs e)
{
    PrintDialog dialog = new PrintDialog();
    if (dialog.ShowDialog() == true)
    { 
        dialog.PrintVisual(控件名, "Print Test"); 
    }
}

 上述方法确实能打印了,但是发现不能居中打印,不能打印多页。

以下是网上找到的方法:(https://www.cnblogs.com/naliang/p/wpfprint.html)

public void print(FrameworkElement ViewContainer)        

{

     FrameworkElement objectToPrint = ViewContainer as FrameworkElement;        

     PrintDialog printDialog = new PrintDialog();           

  printDialog.PrintTicket.PageOrientation = PageOrientation.Landscape;        

     if ((bool)printDialog.ShowDialog().GetValueOrDefault())          

   {                

Mouse.OverrideCursor = Cursors.Wait;                

PrintCapabilities capabilities =      

            printDialog.PrintQueue.GetPrintCapabilities(printDialog.PrintTicket);

                double dpiScale = 300.0 / 96.0;

                FixedDocument document = new FixedDocument();                

try                 {

                    objectToPrint.Width = capabilities.PageImageableArea.ExtentWidth;

                    objectToPrint.UpdateLayout();

                    objectToPrint.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));

                    Size size = new Size(capabilities.PageImageableArea.ExtentWidth,

                                             objectToPrint.DesiredSize.Height);

                    objectToPrint.Measure(size);

                    size = new Size(capabilities.PageImageableArea.ExtentWidth,

                                    objectToPrint.DesiredSize.Height);

                    objectToPrint.Measure(size);

                    objectToPrint.Arrange(new Rect(size));

                    // Convert the UI control into a bitmap at 300 dpi

                    double dpiX = 300;

                    double dpiY = 300;

                    RenderTargetBitmap bmp = new RenderTargetBitmap(Convert.ToInt32(

                        capabilities.PageImageableArea.ExtentWidth * dpiScale),

                        Convert.ToInt32(objectToPrint.ActualHeight * dpiScale),

                        dpiX, dpiY, PixelFormats.Pbgra32);

                    bmp.Render(objectToPrint);

                    // Convert the RenderTargetBitmap into a bitmap we can more readily use

                    PngBitmapEncoder png = new PngBitmapEncoder();

                    png.Frames.Add(BitmapFrame.Create(bmp));

                    System.Drawing.Bitmap bmp2;

                    using (MemoryStream memoryStream = new MemoryStream())

                    {

                        png.Save(memoryStream);

                        bmp2 = new System.Drawing.Bitmap(memoryStream);

                    }

                    document.DocumentPaginator.PageSize =

                      new Size(printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight);

                    // break the bitmap down into pages

                    int pageBreak = 0;

                    int previousPageBreak = 0;  

                   int pageHeight =

                        Convert.ToInt32(capabilities.PageImageableArea.ExtentHeight * dpiScale);

     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值