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

时间:2013-01-17 05:02:41

标签: php pdf postscript

我正在处理一台打印机,它可以接受以普通文本打印的转义码(即打印机命令)。

例如,如果我创建一个纯文本文件并写“~TR%10 10 20 20?”然后将其打印出来,打印机将其识别为命令,并且不在纸张上打印那一段文字。

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

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

由于

更新:我也尝试使用PDF文件(使用PHP + TCPDF),但也没有运气。

更新2:添加示例代码

$ps = ps_new();

ps_open_file($ps, '/var/www/data/test.ps');

ps_set_info($ps, 'BoundingBox', '0 0 1011 638');
ps_set_info($ps, 'Orientation', 'Landscape');
ps_set_info($ps, "Creator", "PHP");
ps_set_info($ps, "Title", "Test");
ps_set_info($ps, "Keywords", "test");

ps_begin_page($ps, 1011, 638);
ps_set_parameter($ps, 'SearchPath', '/var/www/data/font');
$psfont = ps_findfont($ps, "ARIALN_0", "", 1); // Arial Narrow font
ps_setfont($ps, $psfont, 10.0);

ps_show_xy($ps, "ABC", 10, 10);
ps_show_xy($ps, "~TR%41 4 53 11?", 10, 50);

ps_end_page($ps);
ps_close($ps);
ps_delete($ps);

header('Content-type: application/postscript');
header('Content-Disposition: attachment; filename="test.ps"');

readfile('/var/www/data/test.ps');

2 个答案:

答案 0 :(得分:4)

我对PHP一无所知,但您当然不想使用ps_show_x_y。毫无疑问,这会映射到postscript show运算符,该运算符的作用是在打印页面上显示文本。

从文档中看起来ps_include_file就是你想要的方法。只需将其直接写入文件,绕过所有ps_module的东西。正如Ken所说,如果您希望打印机识别它,它应该在任何其他postscript代码之前。特别是,它需要在幻数'%!之前。打印机用来检测postscript程序并进入适当的模式。

当然,这样做会使ps文件不可移植。 gs,酒糟,其他打印机,他们都不想接受这个作为后记文件。

正如乔治在评论中提到的那样,无论这个控制代码可能做什么(你还没有透露),也可以通过后记方面提供。要做的是找到打印机的PPD文件(Postscript打印机定义)。此文件包含用于执行特定于打印机的任务的postscript代码段。它配备了大量的DSC注释和看似奇怪的格式,使其能够被程序解析,但所有这些都可以让您轻松找到所需的代码片段,假设它实际上是可用的。

答案 1 :(得分:2)

我认为这不会有任何影响。当您的打印机不解释PostScript时,您的打印机可以处理随机转义字符,但是一旦您进入PostScript解释器,它肯定无法这样做。

这是因为它很可能在PostScript程序的主体中具有二进制数据(与转义字符相匹配)。如果打印机输入处理程序处理了该数据,那么PostScript将无法工作。

因此,您需要在启动PostScript解释程序之前将转义码发送给打印机,或者在完成之后,您无法在中间发送它。