1

我在我的项目中使用 Ghostscript.NET 跨网络打印 Pdf 文件。本地工作正常,使用从https://www.ghostscript.com/download/gsdnld.html下载的 Windows 10 版本 64 位和 Ghostscript 驱动程序到 32 位(Windows 32 位的 Ghostscript 9.22)。安装 32 位版本的动机是例外,

Ghostscript.NET.GhostscriptLibraryNotInstalledException:此托管库在 32 位进程下运行,需要在此机器上安装 32 位 Ghostscript 本机库!要下载适当的 Ghostscript 本机库,请访问:http ://www.ghostscript.com/download/gsdnld.html

,在使用 Ghostscript 64 位驱动程序时出现在我的应用程序日志中。

我发布应用程序的目标操作系统是 Windows Server 2012 R2。使用相同的 Ghostscript 驱动程序(适用于 Windows 32 位的 Ghostscript 9.22),打印命令无限循环,而不响应我的应用程序。

为此,我禁用了防火墙和防病毒软件,以消除它们成为循环原因的可能性。

我的应用程序从磁盘读取 pdf 文件并使用 Ghostscript 将其发送到网络打印机。为了模拟我使用 TeamViewer 远程连接到客户端计算机的过程。因此,我从这台机器调用 REST Web 服务,它将文件保存到磁盘并使用 Ghostscript 在网络打印机中打印文档。

try
                {
                    var task = Task.Run(() =>
                    {
                        using (GhostscriptProcessor processor = new GhostscriptProcessor(GhostscriptVersionInfo.GetLastInstalledVersion(), true))
                        {
                            List<string> switches = new List<string>();
                            switches.Add("-empty");
                            switches.Add("-dPrinted");
                            switches.Add("-dBATCH");
                            switches.Add("-dNOPAUSE");
                            switches.Add("-dNOSAFER");
                            switches.Add("-dPDFFitPage");
                            switches.Add("-dNumCopies=" + numCopias);
                            switches.Add("-sDEVICE=mswinpr2");
                            switches.Add("-sOutputFile=%printer%" + "\\\\" + printerIP + "\\" + printerNAME);
                            switches.Add("-f");
                            switches.Add(inputFile);

                            processor.StartProcessing(switches.ToArray(), null);
                        }
                    });

                    if (!task.Wait(TimeSpan.FromSeconds(Int32.Parse(ConfigurationManager.AppSettings["MAX_PRINTER_DELAY"]))))
                    {
                        Log.Info(String.Format("A impressão do arquivo ({0}) ({1}) foi encerrada porque ultrapassou MAX_PRINTER_DELAY = {2}!", inputFile, printerNAME, ConfigurationManager.AppSettings["MAX_PRINTER_DELAY"]));
                    }

                }
                catch (GhostscriptLibraryNotInstalledException e)
                {
                    Log.Info("O GhostScript não está instalado.");
                    Log.Error(e);
                }
                catch (GhostscriptException e)
                {
                    Log.Info("O GhostScript apresentou erro.");
                    Log.Error(e);
                }
                catch (Exception exception)
                {
                    Log.Error(exception);
                }

我正在使用 Ghostscript.NET 1.2.1.0 版。

有人能帮我吗?

4

1 回答 1

0

Microsoft Windows 安全体系结构似乎不允许 Asp Net API 直接访问 COM 设备作为打印机,而不使用模拟。通过使用第三方库和本地打印机连接到具有更高级别内网用户的计算机作为IIS用户,系统打印文件。最好的答案(在我看来,源代码实现清晰且可重用,无需在我需要的时候进行大量的“重构工作”)是通过开发一个 Windows 服务程序(安装为可以访问 COM 设备的管理员用户)获得的目录并使用另一个程序作为 Adob​​e Reader 将您的内容发送到打印机。我真实场景的目标打印机是 IP 打印机,而不是本地打印机。

于 2018-02-09T00:53:17.333 回答