使用C#的虚拟PDF打印机以编程方式和静默方式打印Word文档

问题描述

我有一个Docx Word文档,我正在尝试使用虚拟PDF打印机(例如PDFCreator或类似产品)将其转换为PDF。我想做的事情与您在Word中打开文档,然后使用系统上安装的可用虚拟PDF打印机进行打印时相同,但就我而言,我有兴趣以编程方式和无提示方式从C#中进行操作(不向用户显示任何弹出窗口)窗口)。

我对使用Word Interop(Office自动化)不感兴趣。

有人可以给我一些例子吗?

解决方法

您可以检出Leadtools Virtual Printer c# sdk

这将允许您创建自定义虚拟打印机,并提供您控制的事件以执行各种不同的操作,包括将其静默保存为PDF。

这里有一个教程,您可以按照免费的评估版进行测试: Print to File Using the Virtual Printer Driver - Console C#

其中的相关部分突出显示如下:

Empf事件将针对打印作业的每一页触发。 Job事件将触发两次:第一次是在工作开始时,第二次是在工作结束时。

static void LeadPrinter_EmfEvent(object sender,EmfEventArgs e) 
{ 
    Metafile metaFile = new Metafile(e.Stream); 
 
    DocumentWriterEmfPage documentPage = new DocumentWriterEmfPage 
    { 
        EmfHandle = metaFile.GetHenhmetafile() 
    }; 
    DocumentWriter.AddPage(documentPage); 
} 
 
static void LeadPrinter_JobEvent(object sender,JobEventArgs e) 
{ 
    string printerName = e.PrinterName; 
    int jobID = e.JobID; 
 
    if (e.JobEventState == EventState.JobStart) 
    { 
        OutputFile = Path.Combine(@"C:\Temp",Path.ChangeExtension(Path.GetRandomFileName(),"pdf")); 
        DocumentWriter.BeginDocument(OutputFile,DocumentFormat.Pdf); 
 
        Console.WriteLine($"Job {jobID} for {printerName} was started"); 
    } 
    else if (e.JobEventState == EventState.JobEnd) 
    { 
        DocumentWriter.EndDocument(); 
 
        Console.WriteLine($"Job {jobID} for {printerName} was ended. PDF saved to {OutputFile}"); 
    } 
} 

请注意,我是这家公司的员工