【发布时间】:2016-07-19 15:45:16
【问题描述】:
php 7 是否有任何打印机扩展?或者有人可以提供如何打印表单 php 的工作解决方案吗?或者我应该为此使用套接字?我尝试了 5.6 的 dll,但它不起作用(
【问题讨论】:
-
如果使用 Unix 风格的操作系统,那么您可以在 PHP 服务器上安装 CUPS,安装打印机,然后发出
exec('lpr -P printer_name /path/to/filename.txt');
php 7 是否有任何打印机扩展?或者有人可以提供如何打印表单 php 的工作解决方案吗?或者我应该为此使用套接字?我尝试了 5.6 的 dll,但它不起作用(
【问题讨论】:
exec('lpr -P printer_name /path/to/filename.txt');
除了the common tasks 之外,要使其源代码可用于构建可用扩展,还有很多工作要做。有some replacements 可以完成,其他问题涉及找到如何处理不再使用的变量和当前无效的语法。这是一个非常过时但有用的扩展。我也尝试过自己做,但没有成功 (it builds but it doesn't work)。
我发现并仍在 POS(收据)打印机中使用的最简单的方法就是一个
system("(echo ".$TextToBePrinted.") >\\\\MachineNameOrPreferablyFixedIp\\PrinterNetworkName");
每次都需要换行。 Null 和 newLine 字符确实可以在包含整个自定义文本的单个命令中发送,但它非常挑剔。对于同类型的打印机,有esc-pos php library 可用。
注意:无论是本地打印机,都必须共享,使用“\\127.0.0.1\PrinterNetworkName”更好。 PrinterNetworkName 避免了与文件中相同的无效字符,因此“Generic / Text Only”必须作为“\\127.0.0.1\Generic Text Only”访问。
常用打印机的类似替代方法包括使用 dosprn 和 fwrite,或者再次,system("echo ...");ing 到 COMn/LPTn 伪造或真实端口,或者,如果您不在乎:创建、写入和 @987654328 @ 文件具有与您提供的文件名正确关联的扩展名。
对于hardcord-ers,您可以构建一个二进制文件(.exe)来监听自定义端口或直接使用system(...);调用二进制文件并打印。使用 boost 对 c++ 来说并不难。真正的核心决定是构建一个 dll 扩展(顺便说一句:C++ windows api 包含类似的打印功能,就像 php 在其用于管理纸张和字体大小、样式等的扩展中所做的那样)。
版本中前两个数字不同的 PHP 和 dll 将不起作用。所以不要再试图让它发生了。
【讨论】:
fastidious 真的吗?我想你只需要"echo ".escapeshellarg($text)