Php 使用PS(postscript)文件将转义码打印到打印机

Php 使用PS(postscript)文件将转义码打印到打印机,php,pdf,postscript,Php,Pdf,Postscript,我正在处理的打印机可以接受转义码(即打印机命令)作为普通文本打印 例如,如果我创建一个纯文本文件并写入“~TR%10 20?”然后打印此文件,打印机会将其识别为命令,而不会在纸上打印该文本 当我试图通过postscript文件(使用PHP创建)执行此操作时,我无法使打印机识别与命令相同的文本。相反,它被打印在纸上 是否有PS命令/格式可用于确保此位文本按原样发送到打印机 谢谢 更新:我也尝试了使用PDF文件(使用PHP+),但也没有成功 更新2:添加示例代码 $ps=ps_new(); ps_o

我正在处理的打印机可以接受转义码(即打印机命令)作为普通文本打印

例如,如果我创建一个纯文本文件并写入“~TR%10 20?”然后打印此文件,打印机会将其识别为命令,而不会在纸上打印该文本

当我试图通过postscript文件(使用PHP创建)执行此操作时,我无法使打印机识别与命令相同的文本。相反,它被打印在纸上

是否有PS命令/格式可用于确保此位文本按原样发送到打印机

谢谢

更新:我也尝试了使用PDF文件(使用PHP+),但也没有成功

更新2:添加示例代码

$ps=ps_new();
ps_open_文件($ps,'/var/www/data/test.ps');
ps_集_信息($ps,'BoundingBox','0 0 1011 638');
ps_设置_信息($ps,‘方向’、‘景观’);
ps_set_info($ps,“Creator”,“PHP”);
设置信息($ps,“标题”,“测试”);
设置信息($ps,“关键字”,“测试”);
ps_开始页面($ps,1011638);
ps_set_参数($ps,'SearchPath','/var/www/data/font');
$psfont=ps_findfont($ps,“ARIALN_0”,“1”);//Arial窄字体
ps_setfont($ps,$psfont,10.0);
ps_show_xy($ps,“ABC”,10,10);
ps_show_xy($ps,“~TR%4145311?”,10,50);
ps_结束页面($ps);
ps_close($ps);
ps_删除($ps);
标题('Content-type:application/postscript');
标题('Content-Disposition:attachment;filename=“test.ps”');
readfile('/var/www/data/test.ps');

我看不出这有什么用。在不解释PostScript时,打印机可能能够处理随机转义字符,但一旦进入PostScript解释器,打印机肯定无法处理随机转义字符

这是因为在PostScript程序体中完全可能有二进制数据(与转义字符匹配)。如果打印机输入处理程序处理该数据,则PostScript将无法工作


<> P>所以在PSPScript解释器启动之前或完成后,您需要将转义代码发送给打印机,不能在中间发送它。

< P>我对PHP不太了解,但您肯定不想使用<代码> PSO-Skyxxyy < /Cord>。这无疑映射到postscript
show
操作员,其任务是在打印页面上显示文本

从文档中可以看出,
ps\u include\u file
是您想要的方法。只需直接将其写入文件,绕过所有ps_模块内容。正如Ken所说,如果您想让打印机识别它,它应该在任何其他postscript代码之前。特别是,它必须在神奇数字“%”之前打印机用来检测postscript程序并进入适当模式的

当然,这样做会使ps文件不可移植。gs、distiller和其他打印机都不希望将其作为postscript文档接受


正如george在一篇评论中提到的,不管这个控制代码可能做什么(您还没有透露),也可能通过postscript端提供。要做的事情是找到打印机的PPD文件(Postscript打印机定义)。此文件包含用于执行打印机特定任务的postscript代码段。它配备了大量的DSC注释和看似奇怪的格式,可以让程序对其进行解析,但所有这些都可以让您轻松找到所需的代码段,假设它实际上是可用的。

你能给出一个你所做的PHP代码示例吗?@hek2mgl用示例PHP代码编辑你可以共享字体进行测试吗?这是什么打印机,转义码的作用是什么?如果您查看打印机文档,可能会有特定于实现的postscript命令来执行您试图执行的任何操作。@George您可以在注释中使用
*
标记强调
*
,但不能使用html:(回答不错!虽然您也假设打印机直接接受Postscript,但O.P.不会断言。因为文件可能通过O.S.打印机驱动程序堆栈转换为光栅序列到打印机。如果是这种情况,唯一的解决方法是在打印前将控制代码发送到打印机,绕过操作系统驱动程序堆栈(否则,它将在另一个打印作业中)由于各种原因,这可能不可行,但通常有一种方法可以绕过操作系统“直接”连接到打印机。以前,带有JetDirect的HP打印机都在端口9100 IIRC上监听。您可以
telnet printer 9100
。甚至
telnet printer 9100executive
。这是打印机的用户手册。在第192页,您可以看到转义代码的一些示例。如一些屏幕截图所示,这些转义代码只是在文档中编写的文本此外,第199页的提示和提示部分建议不要使用任何字符格式。这可能是PDF/PS的问题所在。有没有关于如何抑制所有格式并仅使用PDF或PS打印纯文本的想法?嗯,没有。据我所知,这甚至没有意义。一旦打印机处于PS/PDF模式,它就不会被扫描为自己的代码复制同一个流。你确定这个东西接受postscript吗?我看不到任何关于将这些转义码复制到ps文档的内容。你可以打印到文件以查看驱动程序输出是什么。我打赌它是某种PCL,但很可能不是ps。你需要将这些转义码复制到什么格式。