问题描述
我有一个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}");
}
}
请注意,我是这家公司的员工