我正在开发一个虚拟 PDF 打印机(使用 redmon 和 Ghostscript),它有两个职责:
- 创建 PDF(使用 pdfwrite)
- 将创建的 PDF 重定向到指定的打印机(使用 mswinpr2)
除了一种特殊情况外,一切正常:当用户在 Windows 10 上注销和登录时。在这种情况下,重定向到指定打印机的 Ghostscript 调用会挂起并卡住。除非系统重新启动,否则它不会出现。我进行了更多挖掘,发现每当打印发生时,我的程序都会以系统用户开始(在用户注销和登录的情况下)。这就是重定向没有发生的原因。但是这种情况还有一个问题是读取 redmon 输出以传递给 Ghostscript 大约需要 4 到 5 秒。(通常仅以毫秒为单位)。
我正在使用 Ghostcript 9.54(最新)并使用以下 GitHub 存储库中提到的 API: https ://github.com/mephraim/ghostscriptsharp
对于 PDF 写入:
String[] ghostScriptArguments = { "-dBATCH", "-dNOPAUSE", "-dSAFER", "-sDEVICE=pdfwrite", "-dAutoRotatePages=/None", String.Format("-sOutputFile={0}", outputFilename ), standardInputFilename, "-c "<</Orientation 0>> setpagedevice"" ,@"[/Creator(ZBPrinter 2.1.5 (PSCRIPT5)) /DOCINFO pdfmark", "-f"}; GhostScript.CallAPI(ghostScriptArguments);
对于 PDF 重定向到打印机:
String[] ghostScriptArguments = {“-empty”、“-dPrinted”、“-dBATCH”、“-dNOPAUSE”、“-dNOSAFER”、“-dNOINTERPOLATE”、“-dNOCIE”、“-dNumCopies=1”、“- sDEVICE=mswinpr2", String.Format("-sOutputFile=%printer%{0}", 打印机名),"-f", pdfFilename}; GhostScript.CallAPI(ghostScriptArguments);
关于 Windows 10 上的用户注销/登录的更多观察:
- 在用户注销并登录时,如果打印到我的虚拟打印机,我已经获取了 Redmon 端口日志并发现了以下差异: a) REDMON_SESSIONID值将是 1 或递增值,而在系统重新启动时会话 id 值是0(即管理员访问) b) APPDATA目录指向 C:\Windows\system32\config\systemprofile\AppData\Roaming,而在系统重新启动时它是 C:\Users<Username>\AppData\Roaming。c) USERPROFILE值指向 C:\Windows\system32\config\systemprofile。
请帮助我找出为什么 PDF 重定向到特定打印机在 Windows 10 上的用户注销/登录时不起作用。
谢谢,普拉迪普·古普塔