2

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

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

当我尝试通过 postscript 文件(使用PS 模块从 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');
4

2 回答 2

4

好吧,我对 PHP 一无所知,但你肯定不想使用ps_show_x_y. 这无疑映射到 postscriptshow操作员,他们的工作是在打印页面上显示文本。

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

当然,这样做会使 ps 文件不可移植。gs,蒸馏器,其他打印机,他们都不会愿意接受这个作为附言文件。

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

于 2013-01-17T08:05:45.227 回答
2

我看不出这有什么办法。当您的打印机不解释 PostScript 时,它可能能够处理随机转义字符,但一旦您进入 PostScript 解释器,它肯定不能这样做。

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

所以你需要在 PostScript 解释器启动之前将转义码发送到打印机,或者在它完成之后,你不能在中间发送它。

于 2013-01-17T08:00:48.723 回答