首页 > 解决方案 > 在 Windows 上从 Apache CGI 运行 gswin64c

问题描述

我正在尝试gswin64c.exe从 Apache for Windows 上的 CGI 运行。我的程序调用gswin64c.exe(我可以在任务管理器中看到它)但它永远挂在那里。

我的 Lazarus (FreePascal) 程序这样称呼它:

lProcess.Executable:='C:\Program Files\gs\gs9.27\bin\gswin64c.exe';
lProcess.Options := [poWaitOnExit];
lProcess.Parameters.Add('-dINITDEBUG');
lProcess.Parameters.Add('-dNOSAFER');
lProcess.Parameters.Add('-dNOGC');
lProcess.Parameters.Add('-dNOPAUSE');
lProcess.Parameters.Add('-dBATCH');
lProcess.Parameters.Add('-dDisplayResolution=600');
lProcess.Parameters.Add(lPaperSize);
lProcess.Parameters.Add('-sDEVICE=mswinpr2');
lProcess.Parameters.Add('-sOutputFile="%printer%' + APrinter + '"');
lProcess.Parameters.Add('-sstdout=salida.out');
lProcess.Parameters.Add('-sstderr=salida.err');
lProcess.Parameters.Add(lFile);

如您所见,我添加了-dINITDEBUG,-sstdout-sstderr参数以将一些信息输出到外部文件。该文件salida.out是使用以下内容生成的:

START 0 1471928 174522 1310688 29492 true 565 3 <0>
GPL Ghostscript 9.27 (2019-04-04)
Copyright (C) 2018 Artifex Software, Inc.  All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
END PROCS 1 1520776 223987 1330888 35436 true 671 3 <0>
END FONTDIR/ENCS 2 1549424 257612 1330888 37932 true 681 3 <0>
END DEVS 2 1589024 292939 1330888 37932 true 685 3 <0>
END STATD 3 1609224 310667 1330888 40828 true 690 3 <0>
END GS_FONTS 5 1678272 386498 1330888 40828 true 719 3 <0>
END BASIC COLOR 5 1698472 396103 1330888 40828 true 735 3 <0>
END IMAGE 6 1698472 404147 1330888 40828 true 740 3 <0>
BEGIN RESOURCES 15 2541832 1191647 1436040 146700 true 761 4 <0>
END CATEGORY 15 2541832 1195766 1436040 146996 true 762 5 <0>
END GENERIC 16 2572068 1220038 1436040 146996 true 764 4 <0>
END FIXED 17 2592268 1237641 1436040 146996 true 764 4 <0>
END MISC 17 2592268 1249425 1436040 146996 true 764 4 <0>
END ENCODING 18 2652868 1306819 1436040 150634 true 764 4 <0>
END INITFILES 41 4054488 2645409 1436040 153496 true 982 4 <0>
C:\Program Files\gs\gs9.27\bin/Fontmap 42 4054488 2650897 1456240 158774 true 983 4 <1>
C:\Program Files\gs\gs9.27\lib/Fontmap 43 4115088 2687451 1456240 158774 true 983 4 <1>
C:\Program Files\gs\gs9.27\fonts/Fontmap 43 4115088 2698191 1456240 158774 true 983 4 <1>
%rom%Resource/Init/Fontmap 44 4135288 2712349 1456240 158774 true 983 4 <1>
%rom%lib/Fontmap 45 4155488 2730865 1456240 158774 true 983 4 <1>
c:/gs/gs9.27/Resource/Init/Fontmap 46 4175688 2745031 1456240 158774 true 983 4 <1>
c:/gs/gs9.27/lib/Fontmap 46 4175688 2755755 1456240 158774 true 983 4 <1>
c:/gs/gs9.27/Resource/Font/Fontmap 47 4195888 2769921 1456240 158774 true 983 4 <1>
c:/gs/fonts/Fontmap 47 4216088 2784072 1456240 158774 true 983 4 <1>
END FONTS 48 4216088 2794885 1456240 158774 true 982 4 <0>

但没有别的。

顺便说一句,我使用完全相同的参数创建了一个命令行程序,它按预期工作。

gswin64c有没有人在 Windows 上使用 Apache2 CGI遇到过类似的问题?

注意:在这里提问之前我在 Lazarus 论坛上创建了一个长线程,请参阅:https ://forum.lazarus.freepascal.org/index.php/topic,51727.0.html

标签: windowsapacheghostscript

解决方案


我目前面临同样的问题。我正在尝试使用 gswin64c 从 Apache 服务器上的 PHP 将 PDF 发送到打印机。只要我使用自己的用户帐户运行 Apache,它就可以正常工作,但是如果 Apache 作为服务运行(在 Windows 中,使用 SYSTEM 帐户),它就不再起作用。永远挂着。

如果您通过“psexec -sid”运行 gswin64c,如此处所示(https://www.winhelponline.com/blog/run-program-as-system-localsystem-account-windows/),您将看到以未选择打印机的 SYSTEM 帐户。在我的系统上,至少 SYSTEM 帐户可以看到打印机。我还不知道为什么它拒绝选择它。

我最终通过完全删除 gswin64c.exe 并编写了一个小型 C#/.NET Core 程序来解决这个问题,该程序可以使用此处详述的示例将 PDF 文件从命令行参数发送到打印机:https:/ /www.dynamicpdf.com/examples/print-pdf-.net-core?filter=print&gclid=Cj0KCQjwuL_8BRCXARIsAGiC51D8XVS2WxFWgoLir5Mg4W3A22NIEQtFlUSkJqTsCDnfsGfUpQy_7mwaAoTyEALw_wcB


推荐阅读