lp

在类Unix系统上(一般为Linux跟Mac平台),使用lp命令来打印文件。

lp命令在Linux跟Mac平台,使用的是cups服务(没有其它的),来支持打印。

CUPS

可以参考这篇文章

lp通常支持两种文件格式的打印

  • PS
  • PDF

PS

PostScript是一种编程语言,最适用于列印图像和文字(无论是在纸、胶片或非物质的CRT都可)。用现今的行话讲,它是页面描述语言。它既可以像程序代码一样具有可读性,又能表示出可任意放大和缩小的矢量图。

PDF

PDF(Portable Document Format的简称,意为“可携带文档格式”),是由Adobe Systems用于与应用程序、操作系统、硬件无关的方式进行文件交换所发展出的文件格式。PDF文件以PostScript语言图象模型为基础,无论在哪种打印机上都可保证精确的颜色和准确的打印效果,即PDF会忠实地再现原稿的每一个字符、颜色以及图象。

Qt对打印的支持

Qt在Linux上对PS跟PDF格式都是支持的,QPrinter提供了对应的接口。

(PS格式相关的接口在Qt5中已经被废弃)

相关的具体API支持可以参考自己使用的Qt版本

void QPrinter::setOutputFormat(QPrinter::OutputFormat format)

命令详解

在Linux上,你可以使用WPS,打开,点击ctrl+p调出打印对话框,然后点击属性,就可以看到当前打印机支持的属性了。

这些属性,基本上都可以通过lp命令来使用。

lp -i request-ID [-c] [-m] [-p] [-s] [-w] [-d destination] [-f form-name] [-H special-handling] [-n number] [-o options] [-p pagenumbers] [-q priority-level] [-S character-set | print-wheel] [-t title] [-T content-Type [-r]] [-y mode-list]

属性

属性 介绍
标记选项的结束;用它来打印一个以破折号(-)开头的文件。 (-).
-E 连接到服务器时强制加密。
-U username 指定连接到服务器时要使用的用户名。
-c 在支持该功能的系统上,此选项将强制在打印之前将打印文件复制到假脱机目录。在CUPS中,打印文件始终通过IPP发送到调度程序,这具有相同的效果。.
-d destination 将文件打印到目标打印机。
-h hostname[:port] 选择备用服务器。
-i job-id 指定要修改的现有作业。
-m 作业完成后发送电子邮件。
-n copies 将打印份数设置为1至100。
-o "name=value [name=value …]" 看下面的表格
-q priority 将作业优先级从1(最低)设置为100(最高)。默认优先级为50。
-s 不要报告结果作业ID(静默模式)。
-t "name" 设置作业名称。
-H 指定何时打印作业。.
-P page-list 指定要在文档中打印的页面。

-O 属性

属性 介绍
-o media=size 将页面大小设置为size。大多数打印机至少支持尺寸名称 “a4”, “letter”, “legal”.
-o landscape -o orientation-requested=4 以横向(旋转90度)打印作业。.
-o sides=one-sided -o sides=two-sided-long-edge -o sides=two-sided-short-edge 在纸张的一面或两面打印。当打印纵向(未旋转)页面时,通常使用值“双面长边”,而对于横向页面则使用“双面短边”。
-o fit-to-page 缩放打印文件以适合页面。
-o number-up=2 -o number-up=4 -o number-up=6 -o number-up=9 -o number-up=16 在每个输出页面上打印多个文档页面。
-o cpi=N 设置每英寸打印文本文件时使用的字符数。默认值为10。
-o lpi=N 设置打印文本文件时使用的每英寸的行数。默认值是6。
-o page-bottom=N -o page-left=N -o page-right=N -o page-top=N 打印文本文件时,设置页边距。默认每英寸72像素

小结

  • WPS在Linux上打印实际上也是先生成一个pdf,然后把pdf文件扔给cups。cups再去调用驱动来处理对应的pdf文件,然后扔给打印机(硬件)

  • 如果觉得WPS另存为生成的pdf文件过大的话,可以尝试使用WPS的打印到文件这个功能。也是同样的生成一个PDF。

  • 如果你不连打印机,只有打印机驱动的话,可以直接用wps打印,然后进入root用户

  • 进入目录/var/spool/cups下,会发现生成一个中间缓存文件,这个实际上就是一个pdf文件。这个文件跟WPS打印到文件实际上是一样的。

  • 安装Linux打印驱动的时候,不只是有ppd驱动文件,还会有对应的厂商的二进制文件来处理对应的pdf文件,扔给打印机的,一般厂商都会放到/usr/lib/cups/filter文件夹下

  • 目前国内打印机在Linux平台上,支持的最好的就是奔图了。他们的研发水平我还是比较认可的。

cups的一个bug

目前有社区用户反馈说,如果文件目录过深的话,wps是打印不出来文件的。吓得我赶紧看了看发现并不是wps的问题,然后跟了跟cups的源码,发现cups对pdf中title的处理只有256个字节。

超过256个字节居然就不给打印了。。。

也不做个兼容啥的,我也是服了。

而且这还是Apple维护的。。。。

代码在这里

https://github.com/apple/cups/blob/82e3ee0e3230287b76a76fb8f16b92ca6e50b444/backend/lpd.c

int                    /* O - Exit status */
main(int  argc,                /* I - Number of command-line arguments (6 or 7) */char *argv[])            /* I - Command-line arguments */
{const char    *device_uri;        /* Device URI */char        scheme[255],        /* Scheme in URI */hostname[1024],        /* Hostname */username[255],        /* Username info */resource[1024],        /* Resource info (printer name) */*options,        /* Pointer to options */*name,            /* Name of option */*value,            /* Value of option */sep,            /* Separator character */*filename,        /* File to print */title[256];        /* Title string */

这是关键代码

title[256];/* Title string */

我本以为,CUPS是为了节省空间。所以就给了256个字节,还想说,嗯,节省空间。

直到我看到了

char    mailtoCc[1024];            /* Cc email address */
char    mailtoFrom[1024];        /* From email address */
char    mailtoReplyTo[1024];        /* Reply-To email address */

这就是完全扯淡了

这篇文章,算是我对上一篇Qt中的CUPS源码解析的一个补充吧。

Linux打印命令lp详解相关推荐

  1. linux nc命令使用详解

    linux nc命令使用详解 功能说明:功能强大的网络工具 语 法:nc [-hlnruz][-g<网关->][-G<指向器数目>][-i<延迟秒数>][-o< ...

  2. linux dd命令使用详解

    linux dd命令使用详解 dd 的主要选项: 指定数字的地方若以下列字符结尾乘以相应的数字: b=512, c=1, k=1024, w=2, xm=number m if=file 输入文件名, ...

  3. linux ps命令使用详解

    PS是LINUX下最常用的也是非常强大的进程查看命令 1. ps简介 前面介绍的两个命令都是用于查看当前系统用户的情况,下面就来看看进程的情况,这也是本章的主题. 要对进程进行监测和控制,首先必须要了 ...

  4. linux :Tar 命令参数详解

    linux Tar 命令参数详解 tar命令 1. 作用 tar命令是Unix/Linux系统中备份文件的可靠方法,几乎可以工作于任何环境中,它的使用权限是所有用户. 2. 格式 tar [主选项+辅 ...

  5. linux dig命令使用详解

    linux dig命令使用详解 Linux下解析域名除了使用nslookup之外,开可以使用dig命令来解析域名,dig命令可以得到更多的域名信息.dig 命令主要用来从 DNS 域名服务器查询主机地 ...

  6. linux的nc命令退出,linux nc命令使用详解

    linux nc命令使用详解 功能说明:功能强大的网络工具 语法:nc [-hlnruz][-g][-G][-i][-o][-p][-s][-v...][-w][主机名称][通信端口...] 参数: ...

  7. linux中用less命令,Linux less 命令用法详解

    原标题:Linux less 命令用法详解 less 是一个Linux命令行实用程序,用于显示文件或命令输出的内容,它一次只显示一个页面.它类似于 more ,但具有更高级的功能,允许您在文件中向前和 ...

  8. Linux top命令参数详解

    Linux top命令参数详解 生产环境系统运行慢,出现无法响应通常原因主要还在于分析CPU.内存.磁盘使用率情况,并结合命令查找出具体进程,并在进程中进一步分析主要因子情况,渗透到对于其中包含线程占 ...

  9. Linux top命令使用详解

    Linux top命令使用详解 已使用linux系统很长时间,查看整体性能时,经常使用top命令,现将日常运维过程中top命令常见用法汇总整理,以便学习和参考. 本文汇总整理网络资料和自我总结.只用于 ...

最新文章

  1. android脚步---设置layout隐藏属性
  2. UTF-8,UTF-16和UTF-32
  3. Chisel 学习笔记(四)
  4. Oracle11g不能导出空表问题
  5. LeetCode 573. 松鼠模拟(数学)*
  6. JDBC连接 Mysql数据库
  7. 微信小程序 Unexpected end of JSON input
  8. java 圆心_JAVA程序帮忙看下把
  9. 读书笔记_量化交易如何建立自己的算法交易03
  10. 在Winform中实现半透明遮罩层
  11. 【GIMP】免费开源图像处理软件
  12. 苹果手机回收价格怎么查询
  13. 上月用得好好的支付宝获取月账单的Java接口,月初突然返回“入参不合法”的解决方法
  14. LMS、kalman、RLS的Matlab仿真
  15. 服务器性能指标图英文翻译,技术性能指标,technic performance guildline,在线英语词典,英文翻译,专业英语...
  16. MindManager思维导图软件中如何下载使用行业分析模板教程分享
  17. OpenCL入门实践
  18. 赵桐正 php,php面向对象-封装性
  19. AlphaFold2源码解析(9)--模型之损失
  20. 交互媒体技术—2D迷宫冒险游戏

热门文章

  1. 合并多个 .ts 文件为单个 .mp4 解决方案
  2. Vi文本编辑器的使用方法
  3. Python,pandas中DataFrame的选取总结
  4. 硕士生预答辩中存在的共性问题
  5. githubDesktop的使用说明(附下载链接)
  6. vlookup多项匹配_VLOOKUP函数一对多查找,就是这么简单!
  7. 鸿蒙系统新平板,华为官宣新款MatePad Pro,首款鸿蒙系统平板
  8. 音视频 — 视频编码原理
  9. python学习——主要的代码结构,模块和包
  10. 用swoole实现简单IM聊天室demo