首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将数据发送到现代打印机?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

复制
相关文章
Java中时间戳的使用
当前时间 import java.sql.Timestamp; //导包 Timestamp nowTime = new Timestamp(System.currentTimeMillis()); System.out.println(nowTime); 输出: 2022-06-08 11:15:51.014 Long型时间戳 Long timeLong = System.currentTimeMillis(); System.out.println("timeString:" + timeLon
代码的路
2022/11/29
1.8K0
如何在python中构造时间戳参数
前面有一篇随笔大致描述了如何在jmeter中生成时间戳,这次继续介绍下在用python做接口测试时,如何构造想要的时间戳参数
冰霜
2022/03/19
2.6K0
如何在python中构造时间戳参数
Golang获取过去或将来某周某月的开始时间戳和结束时间戳
Golang获取过去或将来某周某月的开始时间戳和结束时间戳 开发过程中我们经常需要拿到相对于当前时间过去或将来的某周某月的开始和结束时间戳,下面为大家准备了对应的方法。 1.获取某周的开始和结束时间戳 // 获取某周的开始和结束时间,week为0本周,-1上周,1下周以此类推 func WeekIntervalTime(week int) (startTime, endTime string) { now := time.Now() offset := int(time.Monday - no
用户6786882
2021/11/19
3.3K0
php中的时间戳与javascript中的时间戳的比较
php中的时间戳与javascript中的时间戳的比较,本质上看,它们是一样的东西,但如果二者要进行相等比较的时候,还是有点不同的,稍不注意,就会误入歧途,所以,这里列出容易忽略的两点不同,供大家参考:
风柏杨4711
2021/03/15
3.4K0
api接口的安全设计:使用token+sign+时间戳
服务端以api的方式将数据响应给客户端是目前的趋势,可以用在前后端分离的架构中,前后端分离之后,前后端人员能够更加专注于自己板块的东西,也可以用在服务端与服务端相互调用中。
炒香菇的书呆子
2023/10/03
2.5K0
ffmpeg中的时间戳与时间基
在开发多媒体播放器或直播系统时,音视频的同步是非常关键且复杂的点。要想把音视频同步搞明白,我们必须要了解一些基本的知识。只有了解了这些基本知识,才能为你打下理解音视频同步的基础。 本文将从下面几个主题介绍这些知识点:
音视频_李超
2020/04/02
3K0
ffmpeg中的时间戳与时间基
python中时间、日期、时间戳的转换
1.简介 在编写代码时,往往涉及时间、日期、时间戳的相互转换。 2.示例 # 引入模块 import time, datetime 2.1 str类型的日期转换为时间戳 1 # 字符类型的时间 2 tss1 = '2013-10-10 23:40:00' 3 # 转为时间数组 4 timeArray = time.strptime(tss1, "%Y-%m-%d %H:%M:%S") 5 print timeArray 6 # timeArray可以调用tm_year等 7 prin
kirin
2020/05/16
3.8K0
Java中获取时间戳
** 最近项目开发过程中发现了项目中获取时间戳的业务。而获取时间戳有以下三种方式,首先先声明推荐使用System类来获取时间戳,下面一起看一看三种方式。
全栈程序员站长
2022/08/18
2.6K0
时间,时间戳
将如上的时间2016-05-05 20:28:54转换成时间戳,具体的操作过程为:
zhengzongwei
2019/07/31
5.1K0
时间戳 时间
背景 由于团队业务做的是国际项目,就无法避免一个问题--时区问题,很多业务都是跟时间有关。一些时间的对比,时间的展示,都会涉及到时区和时间戳,所以花点时间来简单总结一下 概念 时间戳 时间戳是一个自增的整数,它表示从1970年1月1日零时整的GMT时区开始的那一刻,到现在的毫秒数。假设浏览器所在电脑的时间是准确的,那么世界上无论哪个时区的电脑,它们此刻产生的时间戳数字都是一样的,所以,时间戳可以精确地表示一个时刻,并且与时区无关。 时区 时区(Time Zone)是地球上的区域使用同一个时间定义。188
千往
2018/01/24
5.8K0
[HTML5] Canvas绘制简单形状
使用canvas来进行绘画,它像很多其他dom对象一样,有很多属性和方法,操作这些方法,实现绘画
唯一Chat
2019/09/10
1.1K0
[HTML5] Canvas绘制简单形状
Python获取当前时间戳_时间转换时间戳
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
9.6K0
小技巧 | 如何用python把时间戳如(1511544070)转换成常规时间格式?
由于工作关系,常常遇到时间戳转化的问题。 转换方法用到python的datetime库里的fromtimestamp方法。 第一步:导入datetime库 import datetime 第二步:使用fromtimestamp方法进行转换 x = 1511544070 result = datetime.datetime.fromtimestamp(x) # 输出result为:datetime.datetime(2017, 11, 25, 1, 21, 10) 第三步:再把结果转换成字符串 dateti
朱卫军 AI Python
2022/04/02
1.7K0
sql中时间戳转日期
需求: 我将博客和 typecho 后台结合起来,打算做一个在线说说的功能,在 typecho 中输入内容,然后调用接口,实现在我的博客查看说说功能的功能。是不是有点绕?我也这么觉得,但是折腾一下也挺好的。
子舒
2022/06/09
4.3K0
sql中时间戳转日期
java当前时间的时间戳_java获取当前时间(时间戳)的方法
Calendar.getInstance().getTimeInMillis();
全栈程序员站长
2022/06/28
9K0
java当前时间的时间戳_java获取时间戳和当前时间
Calendar.getInstance().getTimeInMillis();
全栈程序员站长
2022/08/18
8.6K0
Unix 时间戳;时间戳获取和生成
Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。
西湖醋鱼
2020/12/30
9.2K0
Linux时间戳转换_时间戳转换软件
在大多数 UNIX 系统中,当前时间存储为自特定时刻以来经过的时间以简化,将时间保持为长整数。所有 UNIX 系统普遍接受的时刻是 1970 年 1 月 1 日凌晨 12:00:00。 这称为 UNIX 时间戳,并被所有现代 UNIX/Linux 系统识别。
全栈程序员站长
2022/11/09
15.7K0
Linux时间戳转换_时间戳转换软件
Python获取时间戳_python爬虫时间戳
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/189145.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
5.9K0
点击加载更多

相似问题

获取将来的时间戳

60

是否可以使用Tradingview api绘制模式(XABCD)?

167

如何在tradingview上的自定义变量系列上绘制形状

119

如何在matplotlib中绘制时间戳(毫秒)

18

如何在Matlab中绘制奇怪的时间戳

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