在 Windows 中控制打印机并不是一件大事,因为我们有许多可用的 win32api,或者可以创建入口点来动态打印。由于 PHP 是服务器端,JavaScript 是客户端脚本语言。
在我看来,未经许可/通知在客户端进行批量打印/打印是不可能的。因此,用户必须授权打印作业。
开发人员在 Linux 下打印的经验较少。即使我知道的不多,但我知道一种方法。我从未尝试过或做过。在 PHP 下没有任何内置的打印/控制功能。 PHP 下也没有类似的扩展可以这样做。但是在 Linux 下有一个命令称为 LPR(行式打印机守护协议),如果在 PHP 下授权 shell_exec 执行 shell 命令,则可以在 PHP 下使用该命令进行打印。命令如下:
shell_exec("lpr -P 'printer' -r 'filename.txt');
您必须通过RFC Protocol 进行 LPR。您必须为 Daemon 创建抽象层来控制和发送打印命令。 here 提供了一个创建守护进程的好例子。
经过这些事情,你就可以在Linux下通过PHP打印文档了。
其他问题
想通过网站/本地主机进行客户端打印
小答案
不,您不能在未经用户许可的情况下直接控制客户端打印机,这也取决于每个会话。所以,如果你想获得访问权是另一个会话,你必须再次获得用户的权限。
长答案
是的,它可以通过许多调整和在某些条件下进行控制。由于大多数用户使用窗口作为相应的答案。但是要了解它的工作原理,您必须了解打印对话框的内部结构。
打印对话框分为两部分。一个是 Windows API,另一个是打印机驱动程序。 Windows API 是由作为 Windows 操作系统的一部分的各种 DLL(动态链接库)保存的一组通用代码。 Windows API 提供了一个允许所有程序都可以使用的通用干扰,它允许所有程序访问同一组打印机驱动程序,而不是打印机制造商必须创建驱动程序软件。
打印机驱动程序以不同的语言创建,它们控制硬件的不同部分以将指令发送到打印机。控制流程的主要打印机驱动程序是PCL5和PostScript等,打印机驱动程序更改特定打印机理解的自定义标记语言。
所以,基本上我们需要直接访问 DLL,并且通过现代浏览器(Chrome、Firefox 等)这是不可能的,但一个浏览器可以提供访问,即 Internet Explorer,它是 Windows 操作系统本身的一部分。
因此,第一个条件是用户必须使用 Internet Explorer 并且我不知道通过其他方式访问。接下来要直接访问可以通过 ActiveX 控件完成的 API。原则上它不依赖于 Microsoft Windows,但实际上,大多数 ActiveX 控件都需要 Microsoft Windows 或 Windows 模拟器。大多数还要求客户端在 Intel x86 硬件上运行,因为它们包含已编译的代码。
因此,只能通过用户提示访问 ActiveX 控件。因此,用户必须手动更改控件,或者用户必须再次提供对网页的访问权限。如果更改设置,则对计算机有很大的危险,因为它提供对计算机硬件和其他组件的访问。计算机很容易被黑客入侵。因此,您必须非常谨慎地使用它。因此,第三个条件是直接访问 ActiveX 控件。
我用过ScriptX,免费版可以设置一些基本参数,见下例:
<!-- MeadCo ScriptX -->
<object id=factory style="display:none"
classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
codebase="http://[your path here]/smsx.cab#Version=7.0.0.8 ">
</object>
<script>
function printWindow() {
factory.printing.header = "This is MeadCo";
factory.printing.footer = "Printing by ScriptX";
factory.printing.portrait = false;
factory.printing.leftMargin = 1.0;
factory.printing.topMargin = 1.0;
factory.printing.rightMargin = 1.0;
factory.printing.bottomMargin = 1.0;
factory.printing.Print(false);
}
</script>
我已经提供了方法,你必须按照你的要求去做。我再一次告诉你,请不要更改 ActiveX 的设置以启用,这对用户造成了很大的威胁。机器很容易被黑客入侵,并对计算机中可用的信息构成极大威胁。