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

2021-08-03 17:52:53 浏览数 (1)

调用打印命令打印

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

这种方式

缺点在于

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

0 人点赞