Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将数据发送到现代打印机?PDF,PostScript,HPGL等

如何将数据发送到现代打印机?PDF,PostScript,HPGL等
EN

Stack Overflow用户
提问于 2015-01-15 14:07:55
回答 4查看 7K关注 0票数 12

我正在尝试理解我的选项,以编程方式与打印机进行通信,以便从应用软件中打印一些内容。换句话说,当用户告诉我的应用程序他们想打印什么时会发生什么。我理解它在“旧时代”中的运作方式,并试图理解更为复杂的现代世界。

在过去,有两种主要类型的打印机:能够理解HPGL的HP打印机和Postscript打印机。因此,您可以用这两种语言之一发送打印输出,打印机将将您的代码转换为页面上的点。还可以将位图嵌入为二进制数据。例如,在HPGL (或PCL)中,您可以给出一个命令,命令主要是“请打印这个位图,下面是光栅数据”,后面跟着一个巨大的二进制数据。显然,如果您这样做,发送到打印机的数据量将更多,可能会阻塞打印机。后记也有同样的能力。如果打印文本,可以告诉打印机以字体TimesNewRoman (或其他什么)打印文本"xyz“,打印机将为您计算所有的点(这意味着打印机必须知道字体,或者您必须提前将字体下载到打印机)。

现在,正如我所理解的PDF格式一样,它类似于Postscript,但它不是Postscript这样的语言,只能包含“对象”。因此,例如,在Postscript中,您可以做一个循环,并说“打印这个圆圈50,000次”,移动它的确切位置。在PDF中,我的理解是你不能这样做,你必须把每一个圆圈指定为一个单独的“对象”。

那么,现代打印机是如何工作的呢?我还能把HPGL/PCL发送到打印机吗?现在所有打印机都在Postscript上标准化了吗?如果是这样的话,这是否意味着我最好的选择是生成Postscript,然后将它发送到打印机?如果我发送Postscript,我是否必须以某种方式告诉打印机它是Postscript?

在Windows中,我知道打印的“标准”方法,即查询设备功能并请求设备上下文,然后您可以在该上下文上使用Windows调用绘制线条、形状和文本。但是,与Postscript (或HPGL/PCL)相比,这显然是非常原始的。是否有一种方法可以直接与打印机驱动程序通信,或者告诉Windows:“这是我的Postscript代码,请将它传递给打印机打印”?

EN

回答 4

Stack Overflow用户

发布于 2015-01-15 16:28:45

例如,在Postscript中,你可以做一个循环,说“打印这个圆圈50,000次”,移动它的确切位置。在PDF中,我的理解是,你不能这样做,你必须把每个圆圈指定为一个单独的“对象”。

事实上,在你所描述的两个极端之间,真相更倾向于中间地带。

  1. 这是真的:与PostScript不同,PDF不是一种编程语言(更不用说图灵完整的编程语言),也不能定义“循环”。
  2. 但是,您可以做而不是,您必须分别指定每个圆(或嵌入图像或其他图形对象)。您可以很好地定义如何绘制一个圆圈(或图像,或任何东西)一次,然后在页面或PDF文档的其他地方重复使用该定义。这被称为“引用对象”。当您重用一个对象时,您可以通过更改一些当前的“环境”定义(例如包含CTM的图形状态、当前的转换矩阵)来不同地设置它的属性(颜色、缩放、旋转)。

关于你的其他几点:

  • 没有,从来没有只有两种类型的打印机,HPGL和PostScript。
  • 即使在过去,也有十几种不同的“打印机语言”。PCL甚至比HPGL更受欢迎。不要忘记所有不同打印机语言的专利发明。听说过法新社,高级功能打印吗?这种语言打印了--现在还在打印!--比PostScript做的更多的纸张。它不再是专有的,但它是由IBM发明的,用于主机打印可变数据的laaaarge运行,主要用于计费.听说过ESC/P吗?KPDL?XPS?
  • 是的,你仍然可以发送HPGL到打印机--但不是每台打印机。打印机必须始终为您能够生成和发送的至少一种语言授权。
  • 是的,现在有几种打印机可以直接消耗PDF。但它们仍然不是主要的类型。他们中的一些人“作弊”,仍然有一个PostScript引擎作为他们的主要内置解释器:这些引擎首先将PDF转换成PostScript。其他人可以处理PDF,而不需要回过头来处理PostScript。

在Windows中,我知道打印的“标准”方法,即查询设备功能并请求设备上下文,然后您可以使用Windows对该控件的调用绘制线条、形状和文本。

不要假设“设备上下文”一词确实意味着Windows与打印机硬件直接对话,以便查询功能并请求设备上下文。有时是,有时不是。它总是依赖一些称为“打印机驱动程序”的软件(它还控制要打印数据的打印机语言应该转换成哪种打印机语言)。打印机驱动程序可以查询设备并询问“您有双工器单元吗?您有订书机吗?”然后为作业生成所需的设备上下文本身。

只有一种非常现代的方法,由“IPP无处不在”开发出来的https://www.pwg.org/index.html,才能摆脱老型号打印机驱动程序所必须做的大部分事情,并且在“无人驾驶”完成传递给物理设备的准确打印数据之前,它将开始主要依靠对设备的直接询问。

但是IPP在任何地方都没有得到广泛的欢迎,无论是供应商还是管理员,还是用户。但是,一旦个人电脑被遗忘,95%的计算设备将是超级移动的.

票数 16
EN

Stack Overflow用户

发布于 2016-01-20 19:14:25

我认为pdf是编译后的脚本,基本上是相同的东西,如果不是同样的东西,只有一个被编译成二进制blobs,另一个是ascii。

不,并不是所有的打印机都会说postscript,谢天谢地,当你可以让它在你的电脑上免费运行,并且使用更少的资源和打印速度更快的时候,他们往往会收取额外的费用。(或者用廉价的假脱机机)

PCL在非HP打印机和惠普打印机上都很常见。但没有一个普遍的答案。您仍然必须逐台打印机,看看哪个打印机支持和/或购买了什么作为添加它,然后从该列表中,管理员已经启用了它。当然,所有语言的版本都会说。

这就是杯子的意义所在。一种抽象化和隐藏细节的方法。

票数 1
EN

Stack Overflow用户

发布于 2015-01-15 14:14:25

在Windows环境中,常见的格式是WMF。Windows Meta文件。WMF是向量和位映射的结合。

WMF格式由MS制作,用于与Windows一起恢复映像。WMF文件包含重建图像所需的所有内容,因此它们可以转换为任何其他图形格式。

打印机制造商通常创建自己的打印机命令集。他们可以选择采用事实上的标准,并与专利/版权持有人达成协议。

如果您制造Postscript打印机,您的潜水员将WMF转换为Postscript。

Windows应用程序通过Windows GDI API创建元数据( WMF ),由打印机制造商编写的Windows驱动程序将WMF转换为自己的打印机命令。

一年前(2014年5月15日),微软将WMF规范发布到了公共领域:Windows元文件格式PDF

当您有“原始”(如Postscript,HPGL)数据,将正确解释打印机,您必须绕过制造商驱动程序。

要绕过打印机的驱动程序,只使用泛型/文本驱动程序。

这消除了驱动程序从图片,然后你可以发送“原始数据”。

然后,您必须发送由驱动程序生成的所有代码,这些代码的目的是使您的工作更容易。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27973897

复制
相关文章
MySQL日期类型选择
MySQL提供的常用日期类型有DATE,TIME,DATETIME,TIMESTAMP,
秋白
2019/02/21
3.1K0
MySQL索引选择规划
通过explain的执行结果我们可以看出,上面的SQL语句并没有走我们的索引a,而是直接使用了全表扫描。
shysh95
2022/02/16
1K0
MySQL索引选择规划
Mysql分支选择:Percona Or MariaDB
本文将对MySQL官方版本以及最流行的两个分支:MariaDB 和 Percona Server进行对比介绍。笔者曾经遇到过一些同学,在可能在一个公司待了可能几年了,问他公司用的数据库是什么,他只能回答出,使用的是Mysql。当问到只是用的官方版本,或是哪一个分支时,他就一无所知了。本文将介绍这些分支产生的原因,以及在实际生产中,应该如何进行选择。并不会进行过多细节介绍,算是一个小科普。
田守枝
2019/05/21
9.8K0
Mysql分支选择:Percona Or MariaDB
MySQL时间函数的选择
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
bisal
2019/10/22
2.3K0
MySQL 选择数据库
在你连接到 MySQL 数据库后,可能有多个可以操作的数据库,所以你需要选择你要操作的数据库。 ---- 从命令提示窗口中选择MySQL数据库 在 mysql> 提示窗口中可以很简单的选择特定的数据库。你可以使用SQL命令来选择指定的数据库。 实例 以下实例选取了数据库 test: [root@host]# mysql -u root -p Enter password:****** mysql> use test; Database changed mysql> 执行以上命令后,你就已经成功选择了 tes
福贵
2018/04/12
2.1K0
MySQL 选择数据库
如何为 MySQL 选择 CPU?
MySQL 服务器性能受制于整个系统最薄弱的环节,承载它的操作系统和硬件往往是限制因素。磁盘大小、可用内存和 CPU 资源、网络,以及所有连接它们的组件,都会限制系统的最终容量。
博文视点Broadview
2020/11/30
1.2K0
如何为 MySQL 选择 CPU?
mysql存储过程---选择结构
关键字DECLARE,下列语句声明变量名为num的int类型的变量长度为10,[ default 0 代表默认值为0,可以不写]。
用户5899361
2020/12/07
9200
MySQL 选择数据库
在你连接到 MySQL 数据库后,可能有多个可以操作的数据库,所以你需要选择你要操作的数据库。
用户1685462
2021/07/16
1.6K0
MySQL 选择数据库
在你连接到 MySQL 数据库后,可能有多个可以操作的数据库,所以你需要选择你要操作的数据库。
用户6884826
2021/07/07
1.6K0
基础 | 前端图片选择问题
作者|observernote 原文|http://www.cnblogs.com/observernotes/p/4806218.html 图片问题的一些总结 前言: 之前个人对于图片的问题,一直还是显得不是很重视。但其实对于互联网来说,可能图片的内容已经占据了整个互联网的大半部分,因此我们很大一部分流量的消耗,都是用在了图片上面,因此,对于图片有一些认识肯定是现在所必须的。所以趁今天这个不太忙的机会,打算对于图片的问题做一个简单地总结,也算是对之前没掌握到的东西的一个学习与备忘过程。 常见的图片格式
用户1097444
2022/06/29
6120
基础 | 前端图片选择问题
mySql问题
SELECT DATA_LIST.* ,CAST((@rowNum:=@rowNum+1) AS CHAR) AS ROWNO FROM (
斯文的程序
2019/11/07
8030
mySql问题
mysql问题
在使用 MySQL 8.0 时重启应用后提示 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key Retrieval is not allowed
用户10325771
2023/03/01
4290
mysql数据类型的选择
如果不需要小数部分,就是用整数来保存数据;如果需要小数部分,就是用浮点数。对于浮点数据列,存入的数值会对该列定义的小数位进行四舍五入。 浮点类型包裹FLOAT和DOUBLE类型,精度要求较高时,使用DOUBLE类型。
别团等shy哥发育
2023/02/25
1K0
MySQL如何选择合适的索引
小强前几篇文章介绍了mysql的索引原理以及sql优化的一些小技巧。mysql底层的算法选择哪种索引,有时候会和我们想象的不一样,大家可以继续往下看。
程序员小强
2019/09/06
4.1K0
MySQL如何选择合适的索引
关于Uber选择MySQL的思考
在数据库圈子,大家都知道2016年 Uber 干出来一件大事件,把 PostgreSQL 切换到了 MySQL,当时社区里一阵喧哗。这里想带着大家思考一下选择的背后。
wubx
2019/02/27
7640
关于Uber选择MySQL的思考
MongoDB 与 MySQL,你选择谁?
过去几年,使用NoSQL数据库的网站和应用数量激增。 MongoDB无处不在。 现代网络如何偏离传统的基于SQL的数据库确实令人着迷。 MongoDB和其他NoSQL数据库在存储和检索数据方面有一种新方法。 那么让我们来看看MongoDB与MySQL不同的一些关键因素。
星哥玩云
2022/08/17
2.2K0
MongoDB 与 MySQL,你选择谁?
【MySQL高级】Mysql锁问题
在数据库中,除传统的计算资源(如 CPU、RAM、I/O 等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。
陶然同学
2023/02/24
1.6K0
【MySQL高级】Mysql锁问题
mysql—如何为innodb选择主键
因为在innodb表中,每一个非主键索引的叶子节点上都会存储主键列的信息, 所以如果主键索引太大,会导致其他非主键索引页变大, 降低索引的查询效率
全栈程序员站长
2021/04/07
4.3K0
mysql 事务隔离级别如何选择
数据丢失,两个事务同时进行,一个成功一个失败,造成数据回滚,或者两个都成功造成数据覆盖
海涛
2020/01/15
1.5K0
MYSQL死锁问题
如果insert或update用到了同样的索引也会造成死锁。 比如 update table_a set name = ‘test1’ where id = 300; //用到了table_a的id主键索引 insert into table_b (a_id,`name`) (select id,name from table_a where id >=200) ON DUPLICATE KEY UPDATE a_id = values(a_id)//同样用到了table_a的id主键 所以会导致
苦咖啡
2018/04/28
1.6K0

相似问题

关于更改多端口VLAN分配的问题

10

路由器端口分配如何不耗尽

20

基于交换机端口分配IP地址

30

为不同的VLAN分配一个开关端口

20

如何将多个VLANS分配给一个端口?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文