3

所以,我一直在阅读很多关于印刷的问题,经过几天的研究和阅读,这一切都开始变得有意义了。假设我有这段代码:(我正在使用 php 和 php_printer 扩展)

$boldon = chr(27)."E".chr(1);
$boldoff = chr(27)."E".chr(0);
$pcenter = chr(27)."a".chr(1);
$pleft = chr(27)."a".chr(0);
$handle = printer_open("Generic / Text Only File");
printer_set_option($handle, PRINTER_MODE, "RAW");
printer_write($handle, $boldon.$pcenter."Some text");
printer_write($handle, "\n");
printer_write($handle, "Some more text");
printer_write($handle, "\n");
printer_close($handle);

在本地主机上运行时效果很好,我使用的是热敏打印机,它打印得很好。当我在我的服务器上尝试这个时,我已经知道(现在它完全有意义),这不起作用,我认为这是因为实际的服务器试图在本地打印它并且找不到打印机,我想如果打印机安装在服务器中,服务器的打印机会打印它,但这不是我想要的。

以 html 或任何类型显示信息并使用 window.print() 没有用,因为浏览器不只发送文本(或者那是我读过很多次的内容)并且只发送通用文本,只打印文本(我猜) .

所以解决方案是制作一个包含 ESC/P 文本的文件,然后用 javascript 打印它(我不需要跳过其他线程中提到的打印对话框),我无法更改驱动程序,它只能是通用文本。因此,如果我用我想要的信息制作一个 .txt 文件,它将打印,但 ESC/P 被忽略,所以我无论如何都无法格式化我的文本,它将使用默认打印机选项打印,以纯文本形式发送文本(具有讽刺意味)忽略新行和每一段 ESC/P。

所以,这里的问题是,是否有创建一个文件(任何类型的文件)来发送我想要的文本而不忽略 ESC/P?

4

1 回答 1

1

有一种方法可以创建二进制文件。简而言之,您创建字符串,将其像二进制文件一样发送,下载然后打印您喜欢的内容。

$output= chr(27)."a".chr(1)."Some text"; // what you like to print

// headers to send file
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: application/octet-stream"); // send it like binary file
header("Content-Disposition: attachment; filename=\"print\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".strlen($output));
echo $output;
exit();

但我不认为你可以用浏览器打印二进制数据。

另一种解决方案是使用本地软件(服务器),如打印机代理:

  • 远程服务器将数据发送到本地服务器,本地服务器将其发送到打印机驱动程序

或者

  • 本地服务器从远程服务器请求数据然后打印
于 2014-03-20T15:33:55.210 回答