前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WPF开发之调用打印机打印文件

WPF开发之调用打印机打印文件

作者头像
码客说
发布2021-08-03 17:52:53
2K0
发布2021-08-03 17:52:53
举报
文章被收录于专栏:码客码客

调用打印命令打印

这种方法会使用文件在系统中默认的打开工具打开进行打印。

这种方式

缺点在于

  1. 必须设置文件的默认打开方式。
  2. 必须在系统里设置默认的打印机。
  3. 不能同时打印多份。

优点

  1. 不用安装额外的库。
  2. 如果打印的精度较高的情况下,调用其他库打印的效果没有这种调用专门软件打印的效果好。

示例

代码语言:javascript
复制
/// <summary>
/// 调用打印机打印
/// </summary>
/// <param name="PDFPath">PDF文件路径</param>
/// <param name="PrinterName">打印机名称</param>
private void Print2(string PDFPath, string PrinterName)
{
    PrintDocument pd = new PrintDocument();
    Process p = new Process();
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.CreateNoWindow = true;
    startInfo.WindowStyle = ProcessWindowStyle.Hidden;
    startInfo.UseShellExecute = true;
    startInfo.FileName = PDFPath;
    startInfo.Verb = "print";
    Console.WriteLine("PrinterName:"+ PrinterName);
    Console.WriteLine("pd.PrinterSettings.PrinterName", pd.PrinterSettings.PrinterName);
    startInfo.Arguments = @"/p /h \" + PDFPath + "\"\"" + PrinterName + "\"";
    p.StartInfo = startInfo;
    p.Start();
    p.WaitForExit();
}

使用Spire.Pdf库打印

这种方式

缺点

  1. 需要引用库。
  2. 精度较高的文件打印的效果不好。
  3. 进度较高的文件在打印机队列里数据量太大,达到200-300多M。

优点

  1. 可以设置打印的数量及其他打印参数。

示例

代码语言:javascript
复制
/// <summary>
/// 调用打印机打印
/// </summary>
/// <param name="PDFPath">PDF文件路径</param>
/// <param name="PrinterName">打印机名称</param>
private void Print(string PDFPath, string PrinterName, short PrinterNum = 1)
{
    Console.WriteLine("PDFPath:" + PDFPath);
    //PDFPath = "D:/123.pdf";
    //加载PDF文档
    PdfDocument doc = new PdfDocument();
    doc.LoadFromFile(PDFPath);

    //指定打印机
    doc.PrintSettings.PrinterName = PrinterName;

    //静默打印PDF文档
    doc.PrintSettings.PrintController = new StandardPrintController();

    ////设置文档打印页码范围
    //doc.PrintSettings.SelectPageRange(1, 5);

    //打印不连续的页面
    //doc.PrintSettings.SelectSomePages(new int[] { 1, 3, 5, 7 });

    //设置打印份数为2份
    doc.PrintSettings.Copies = PrinterNum;

    doc.PrintSettings.PrinterResolutionKind = PdfPrinterResolutionKind.High;
    //获取原文档第一页的纸张大小,这里的单位是Point

    doc.PrintSettings.SelectSinglePageLayout(PdfSinglePageScalingMode.ActualSize, true);
    //打印PDF文档

    doc.Print();
}

使用PDFRender4NET打印

这一种和前面的方式优缺点一致

需要引用O2S.Components.PDFRender4NET.dll

代码语言:javascript
复制
using O2S.Components.PDFRender4NET;
private void Print3(string PDFPath, string PrinterName, short PrinterNum = 1)
{
    PDFFile file = PDFFile.Open(PDFPath);
    PrinterSettings settings = new PrinterSettings();

    settings.PrinterName = PrinterName;
    settings.PrintToFile = false;

    //设置纸张大小(可以不设置,取默认设置)3.90 in,  8.65 in
    PaperSize ps = new PaperSize("test", 4, 9);

    ps.RawKind = 9; //如果是自定义纸张,就要大于118,(A4值为9,详细纸张类型与值的对照请看http://msdn.microsoft.com/zh-tw/library/system.drawing.printing.papersize.rawkind(v=vs.85).aspx)

    O2S.Components.PDFRender4NET.Printing.PDFPrintSettings pdfPrintSettings = new O2S.Components.PDFRender4NET.Printing.PDFPrintSettings(settings)
    {
        PaperSize = ps,
        PageScaling = O2S.Components.PDFRender4NET.Printing.PageScaling.FitToPrinterMarginsProportional
    };

    pdfPrintSettings.PrinterSettings.Copies = PrinterNum;

    try
    {
        file.Print(pdfPrintSettings);
    }
    catch (Exception)
    {
    }
    finally
    {
        file.Dispose();
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-07-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 调用打印命令打印
  • 使用Spire.Pdf库打印
  • 使用PDFRender4NET打印
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档