You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF应用按序打印PDF至网络打印机:提速与保序问题求助

解决方案:WPF PDF顺序打印优化

一、保证打印顺序不乱

要实现前一个打印任务进入打印机队列(EndPrint触发)后再启动下一个任务,可以通过异步等待EndPrint事件实现,替代原来的同步循环或并行执行逻辑。

修改后的异步打印方法

将PrintJob改为异步方法,用TaskCompletionSource监听EndPrint事件,确保前一个任务提交完成后再启动下一个:

using System.Threading.Tasks;
using System.Drawing.Printing;

public static async Task PrintJobAsync(File file)
{
    var doc = file.PdfDocument.GetPrintDocument(SettingsPrinter.DefaultSettings);
    var tcs = new TaskCompletionSource<bool>();

    // 定义EndPrint事件处理逻辑
    void EndPrintHandler(object sender, PrintEventArgs e)
    {
        doc.EndPrint -= EndPrintHandler; // 移除事件订阅避免内存泄漏
        tcs.TrySetResult(true); // 标记任务完成
    }

    doc.EndPrint += EndPrintHandler;
    doc.Print(); // 启动打印任务
    await tcs.Task; // 等待EndPrint触发,即任务进入打印机队列
}

调用方式(保证顺序)

在循环中逐个等待异步打印任务完成,确保严格按文件顺序提交:

foreach(var file in files)
{
    await PrintJobAsync(file);
}

为什么之前的PagePrint监听无效?

PagePrint事件中HasMorePages=false仅表示当前文档的所有页面已被渲染并提交到打印系统,但并不代表整个打印任务已成功进入打印机队列。EndPrint事件才是打印任务完成提交的可靠标志,此时任务已被打印机队列接收。


二、优化打印速度

1. 绕过PrintDocument直接打印PDF

PrintDocument基于GDI渲染,对PDF的转换过程耗时较长。可以使用专门的PDF打印库(如PdfiumViewer、iTextSharp)直接将PDF发送到网络打印机,跳过GDI渲染步骤,大幅提升速度。示例(以PdfiumViewer为例):

using PdfiumViewer;

public static void PrintPdfDirectly(File file)
{
    using (var pdfDocument = PdfDocument.Load(file.FullName))
    using (var printDocument = pdfDocument.CreatePrintDocument())
    {
        printDocument.PrinterSettings = SettingsPrinter.DefaultSettings;
        printDocument.Print();
    }
}

该方式的打印效率远高于将PDF转成通用PrintDocument的方式。

2. 启用打印机后台打印

进入网络打印机的属性设置,确保开启后台打印选项。这样应用只需将任务提交到本地打印队列即可返回,无需等待打印机实际完成打印,减少等待时间。

3. 合并PDF后批量打印

如果打印机支持,可将所有需要打印的PDF按顺序合并成一个文件,再提交一次打印任务,减少多次任务提交的网络和系统开销。

4. 优化PDF渲染参数

若必须使用原有GetPrintDocument方法,检查是否有可优化的渲染参数:

  • 降低打印分辨率(如从300DPI改为150DPI,非文档类打印影响不大)
  • 禁用色彩管理(如果打印黑白文档)
  • 关闭不必要的打印附加功能(如双面打印、水印)

5. 检查网络连接

网络打印机的速度瓶颈常出现在网络传输上:

  • 尝试使用有线连接替代无线连接
  • 检查打印机所在网络的带宽和延迟,避免网络拥堵

内容的提问来源于stack exchange,提问作者Rekan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 20:55:12