0

我正在尝试找到一个通用解决方案,说明如何在 Windows 7/10 操作系统上的实际打印机上打印时将文档保存为 PDF。场景:无论我要打印的是图像还是文件,还是来自第三方应用程序(如 POS 或丝网打印)(如用户按下第三方应用程序上的 pint 按钮,或者如果第三方应用程序支持此热键,则按 CTRL+P),我需要将文档保存为 PDF 格式,该文档正在到达正在打印硬拷贝的实际打印机。我想推广以支持各种打印机,无论是点阵打印机还是激光打印机或热敏打印机等...

我尝试过的解决方案:

  1. 虚拟打印机将打印 pdf,然后将 pdf 路由到实际打印机。但是很少有打印机不支持 PDF,例如热敏打印机不支持 PDF,此外,我需要注意纸张设置和页面设置。我试过像 Win2PDF / ClawPDF 这样的虚拟打印机
  2. 我研究了 Windows 打印体系结构,并尝试保存假脱机文件并监听打印事件并将假脱机文件路由到虚拟打印机以创建 pdf。这部分起作用,因为某些打印机驱动程序会发出 RAW Spool 文件。PCL 和 Postscript 可以很好地转换为 PDF。
  3. 使用 PrintMulti 之类的打印处理器,但问题与第二个相同。
  4. 即使我可以从 Windows 打印创建假脱机文件的某种输入文件中得到某种输入文件,我也试图调查,但我无法得到它。
  5. 我尝试了打印机池,但这就像负载共享之类的东西。

谁能帮我解决这个问题。我也无法通过谷歌找到任何解决方案,所以在这里发布。实现它看起来很正常,但即使在两周后我也找不到任何解决方案。这很难实现通用解决方案吗?

4

1 回答 1

0

考虑一种使用诸如ePrint虚拟打印机之类的方法,该方法通过从打印作业中捕获 Windows EMF 文件并将其转换为 PDF,同时仍能够将 EMF 发送到物理打印机并进行打印。该应用程序本身允许在虚拟打印机中创建打印任务,可以将其配置为保存为 PDF 并批量打印到其他打印机。

另一方面,ePrint 基于 LEADTOOLS 虚拟打印机SDK,如果您想编写自己的方法,它可能对您很有用。

例如,挂钩到虚拟打印机以将捕获的 EMF 保存为 PDF 的事件的代码:

// Write the EMF as file to disk as PDF.
static void VirtualPrinter_EmfEvent( object sender, EmfEventArgs e )
{
   string pdfPath = Path.Combine(
      @"c:\Output\PDF\",
      Path.GetFileNameWithoutExtension( Path.GetRandomFileName() )
      ) + ".pdf";
   Directory.CreateDirectory( Path.GetDirectoryName( pdfPath ) );
            
   // Create an instance of the LEADTOOLS DocumentWriter
   DocumentWriter docWriter = new DocumentWriter();
   docWriter.BeginDocument( pdfPath, DocumentFormat.Pdf );
   DocumentEmfPage page = new DocumentEmfPage() {
      EmfHandle = new Metafile( e.Stream ) )
         .GetHenhmetafile()
   };
   docWriter.AddPage( page );
   docWriter.EndDocument();
}

如果您对更多详细信息感兴趣,可以在此处查看这篇文章。

于 2020-11-26T16:38:54.203 回答