PCL 和 PDF 是完全不同的语言,您不能将一种语言插入另一种语言。如果我有所有的细节,我可能会推荐一些不同的东西;但是,根据您所描述的,我建议使用Ghostscript将 PDF 文档转换为 PCL (使用它包含的 ljet4 或其他 PCL 输出“设备”),然后您可以附加/预先添加控制托盘所需的任何 PCL 命令数据等请记住,您可能无法简单地在顶部插入托盘选择,您需要移动到 PCL 流中的适当位置并执行此操作,例如在 E.
这样做的一个主要缺点是Ghostscript创建的 PCL 基本上是每页一个大图形,因此它根本没有效率,并且不提供您在 PCL 中搜索文本等的能力。
您未提供可能有助于推荐更具体的内容的详细信息包括:
- 最终目标是什么,在 XYZ 设备上进行 PDF 打印,进入特定的托盘并输出?
- 您是否需要将其“爆裂”成多个文档?
- 托盘选择是否在整个文档中发生变化?
- 文件是混合尺寸还是相同尺寸的纸张?
- 该设备还支持哪些其他“语言”?如PS/PCL/PCL-XL/PDF/TIFF/HTML/JPG...
- 您想使用 PCL 是因为您必须这样做还是因为您对它感到满意?
您可以使用的其他选项包括:
- 将 PDF 转换为 PCL 或 Postscript 并在作业开始时插入适用于该打印机的 PJL 命令。
- 在 PDF 文档的开头插入 PJL(假设打印机可以本地打印 PDF)并将其发送到设备
编辑:根据与innocentDev 的讨论添加更多细节
抱歉,更新的回复晚了,看来你已经把它整理好了。
如果最终结果是获取 PDF 文件并转换为打印打印机可以理解的内容,同时在已知位置插入托盘选择命令,那么我认为有两种解决方案。您可以将其转换为 PCL 或 Postscript。后记可能更容易,因为 PCL 使用 FF(换页)控制代码来中断每个页面,并且 FF 字符可能会在字体声明和/或图形图像期间出现在整个页面中。
如果您确实通过将页面从单独的页面中拆分出来或做一些额外的工作来确定 FF 实际上是分页符而不是字符的其他实例之一,或者甚至找到其他一些元素来管理 FF 上的文档中断你可以继续(Ghostscript可能在每个页面的开头有一些其他代码是一致的,我不是 100% 确定)。另一种方法是使用Ghostscript甚至pdftk将文档分成页面,将每个页面转换为 PCL,插入命令并将页面连接在一起;但是,根据我之前关于从 PDF 转换为 PCL 的评论,您最终可能会得到一个非常大的输出文件。这不应该影响设备的打印性能,但可能会减慢数据传输等。
如果您采用 PCL 路线,一旦您将其转换,您只需在每一页的开头将用于托盘选择的适当 PCL 命令添加到文档中的每一页。
<esc>&lxH where x is the tray number.
对此有一些标准;但是,具有 3 个以上托盘的设备通常不遵循这些标准,并且随着时间的推移,当 HP 决定将多功能托盘从多功能进纸器重新映射到托盘 1 时,它们会发生一些变化。检查您的设备文档或安装他们的 PCL 打印驱动程序和打印文件到您希望它输出到的托盘,您可以看到他们使用的编号。
如果您使用 Postscript,您也可以这样做,但打破页面可能会更容易,因为您可以拆分文档(或至少查找)命令,例如:
%%Page: x x
%%BeginPageSetup
这些总是出现在Ghostscript的 Postscript 输出中。找到它们后,您可以在页面设置期间插入 Postscript MediaSource 命令并完成相同的操作。您甚至可以对媒体类型或媒体颜色使用 Postscript 命令。为此有一些通用命令,但您可能需要使用特定于您要输出到的设备的命令。您可以随时查看设备文档、他们的 PPD 文件,或者,我经常做的是打印以从他们的驱动程序中归档一些内容,并查看他们如何实现编码。