问题标签 [print-spooler-api]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Microsoft Print Spooler API - 保留打印作业?
有谁知道是否可以在 Microsoft Print Spooler API的帮助下进行打印作业?
我想在它被发送到打印机之前保留它。
这可能吗?
c# - 为什么我在尝试使用 OpenPrinter 打开特定作业时收到 ERROR_ACCESS_DENIED?
根据给定作业ID的undocprint,应该可以使用格式为“PrinterName,Job xxxx”的字符串打开打印机来检索作业OpenPrinter
的假脱机文件。MSDN 文档也列出了此方法,但在逗号“PrinterName, Job xxxx”之后有一个额外的空格ReadPrinter
。
每当我尝试从我的测试应用程序(使用任一字符串格式)调用此方法时,我都会得到ERROR_ACCESS_DENIED
(Windows 8 x64)。为什么会这样,我需要做什么才能使其正常工作?
我以管理员身份运行测试应用程序,暂停作业或打印机或访问其他信息没有问题。
我知道我使用的 ID 是有效的,因为它会返回无效 ID ERROR_INVALID_PRINTER_NAME
。
我正在使用的代码:
c# - 即使启用了假脱机文件池,如何找到具有给定 ID 的作业的假脱机文件?
我想将给定 Windows 打印作业的假脱机数据复制到磁盘上的任意位置。
我有来自Print Spooler API的打印作业的作业 ID 。我知道这项工作已经完成了假脱机。我知道在我有时间完成我需要做的任何事情之前,该工作不会被删除。
如果禁用了文件池,我可以通过在假脱机目录中查找格式为“xxxxx.spl”的文件来执行此操作,其中 xxxxx 是填充为 0 的作业 ID。
如果启用了文件池,我该怎么做?
如果有一种方法可以获取作业 ID 并返回假脱机数据流,我会很高兴,但目前这似乎不太可能。OpenPrinter
据推测,使用“PrinterName,Job xxxx”和 ReadPrinter可能会出现类似的情况,如此处所述,但到目前为止我还无法让它工作,即使我这样做了,它看起来也会将数据加载到内存中,而且我不确定这将如何处理大型假脱机文件(> 1 GB 并不罕见)。
我的第二个偏好是传递 ID 并使用磁盘上的假脱机数据取回文件位置的方法(无论文件池设置如何)。
我的第三个偏好是将池文件(“FPyyyyy.spl”)映射到它的作业 ID 的方法。
这些是否可行,或者是否有人对如何解决这个问题有更好的想法?
(编辑添加,因为不清楚我们是否知道此选项):我们的后备方案是要求我们的客户通过编辑每台打印机的注册表来禁用假脱机文件池,但我们更希望避免这种情况。
windows-7 - 我在 Windows 7 客户端计算机上获得了共享打印机的重复打印作业
我有一个用于共享打印机的打印作业
我在 win server 2008 上共享了一台打印机
我正在使用 Windows 7 客户端机器上的这台打印机
我正在开发一个为所有打印作业编写所有打印机通知的应用程序
而对于打印队列中的一个作业,我收到了两个作业的通知,两个作业具有两个不同的 JobID 和两个不同的机器名称。
我的问题是为什么只为发送到打印队列的一项作业创建两个作业?为什么它们如此不同?虚拟作业具有 le 客户端的机器名称,真实作业具有打印服务器的机器名称
winapi - 打印后台处理程序作业取消消息或需要回调
背景:
我现在正在尝试通过GDI Print API进行打印,它看起来像这样:
问题:
在打印过程中会有一个通知区域图标,单击它会出现一个小窗口,显示指定打印机上的当前打印作业。
通过右键单击打印作业并选择Cancel
,将取消打印作业。但是我的应用程序会继续向打印机 DC 发送数据,直到处理完所有页面,并且状态Deleting - Spooling
在完成之前一直显示。
我想要的是在选择取消后立即停止打印过程。
我试过的:
1.首先我认为取消作业后设备内容会变得无效(这当然不是真的),并尝试检查 and 的返回StartPage
值EndPage
。然后我发现他们在取消打印作业后都没有失败。
2. 我也试过SetAbortProc
and DocumentEvent
,发现它们不是我想要的。
但是我想当打印作业被取消时应该有一些机制来指示我的应用程序。如果有人试图提供帮助,我们将不胜感激。
fonts - 如何处理 EMR_FORCEUFIMAPPING 和 EMR_GDICOMMENT?
我正在将 EMF 转换为 PDF,但我进入了一个有问题的领域。我有一些 EMF 假脱机文件,其中包含一些未记录的 EMR 结构,例如 EMR_FORCEUFIMAPPING
和EMR_GDICOMMENT
.
MSDN 对这些记录的描述并不那么详细,因此搜索这些关键字并不能帮助我找到答案。据我所知,这些记录可以帮助我将字体嵌入到我生成的 PDF 中。有没有人在这个领域有经验?你能推荐我一些书籍或教程或源代码存储库或一些示例吗?
如何处理这些记录?
谢谢你。
windows - 为 Windows 开发自定义打印机驱动程序
对于我的软件的需要,我需要创建一个打印机驱动程序,它允许我将发送给它的所有图像保存到文件中,然后打开我的程序窗口,让用户对渲染的页面进行一些操作。
我找到了这篇文章,但是示例使用了FILE:
端口,而我需要制作自己的端口,将图像转储到文件并运行可执行文件。但是,我认为我可以通过在驱动程序代码中执行此操作来完成我的任务,但我不确定这是一个好的决定,因为它是一个驱动程序,即使它是一个用户模式驱动程序。
我很高兴听到有关我的问题的任何建议。提前致谢。
c# - 如何使用 XPS 打印机重新打印假脱机文件?
我正在构建一个程序来捕获打印文档,然后将这些文档转换为 xps\image。
目前我正在使用FileSystemWatcher监视目录“C:\Windows\System32\spool\PRINTERS\”并复制 spl 文件,确保其不重复然后尝试通过使用Win32 Spooler API打印 spl 文件将其转换为 xps 文件和Microsoft XPS Document Writer预定义的打印机,但是当我指定如下所示的输出文件时,返回错误代码 1804,如果我将其留空,则成功但我没有得到输出文件。
所以,我做错了什么,以及如何将假脱机文件打印\转换为 XPS 文档,如果可能的话,转换为图像文件和文本文件。
编辑:添加附加信息
这是 DOCINFOA 的实现
这是完整的调用链:
该应用程序运行以下代码
在RawPrinterHelper中
以及API函数
printing - 对于 Windows 7 上的 hp 打印机,job_info_2 的 PagesPrinted 字段不可靠,值取决于打印处理器
对于 Windows 7 上的 hp 打印机,job_info_2 的 PagesPrinted 字段不可靠,值取决于打印处理器
我正在开发打印监视器,对于 hp 打印机,PagesPrinted 不可靠且值错误
winapi - 获取带有 jobID 的 SPL 文件
我正在用 C++ 开发一个打印监视器。但我无法获取文件 SPL。经过大量研究后,我发现我必须在 spoolerDirectory 键中插入存储 .spl 文件的文件夹的路径。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Print\Printers\'printername'\SpoolDirectory = c:\windows\system32\spool\printers
此更改仅在重新启动 spool 服务后生效的问题。
当我正在监视作业打印时,当我重新启动假脱机程序时,我将丢失所有对象。
还有另一种方法可以解决我的问题吗?坦克!