[原]自定义CUPS中打印机的页面大小

   这几天在项目中,软件开放商提出需要在应用系统中,对打印发票的功能提供帮助,也就是需要根据发票的大小,定义打印机打印页的尺寸。但该功能系统中默认是没有的,经过cjacker的协助,可以通过修改打印机驱动文件.ppd实现。
一、平台
目前的Linux发行版本,基本都是使用cups服务作为默认的打印服务,而使用ppd作为打印驱动。但不同的操作系统平台,版本差异比较大。我试验的平台是:
操作系统:红旗 DeskTop 5 NE
应用版本:

引用
# rpm -qa|grep cups
cups-1.1.23-30.4
cups-libs-1.1.23-30.4
bluez-utils-cups-2.22-2.2.1
cups-ppd-4.1-18
gimp-print-cups-4.2.7-15.3
cups-lpd-1.1.23-30.4
cups-devel-1.1.23-30.4
cupsddk-1.0.1-1

测试打印机:HP LaserJet 1320
二、寻找驱动ppd文件
要成功的修改ppd文件,首先,必须该发行版可以支持对应的打印机。这次,我使用的HP打印机,可以在DT5 NE下正常使用,并且选择的驱动是:ESP - HP LaserJet Series PCL 6。
(注意:不要选择HP-LaserJet 1320或LaserJet 1320 Series,该驱动没用的)
点击在新窗口中浏览此图片

cups-1.1.23-30.4
cups-ppd-4.1-18
foomatic-3.0.2-33.3

而它们存放的路径都有点不同,但根路径是/usr/share/,可以通过这样来寻找:

引用
# find /usr/share -name ‘*ppd*’|grep -i esp
/usr/share/cups/model/ESP/stcolor.ppd.gz
/usr/share/cups/model/ESP/stcolor2.ppd.gz
/usr/share/cups/model/ESP/epson9.ppd.gz
/usr/share/cups/model/ESP/dymo.ppd.gz
/usr/share/cups/model/ESP/deskjet2.ppd.gz
/usr/share/cups/model/ESP/deskjet.ppd.gz
/usr/share/cups/model/ESP/stphoto.ppd.gz
/usr/share/cups/model/ESP/laserjet.ppd.gz
/usr/share/cups/model/ESP/stphoto2.ppd.gz
/usr/share/cups/model/ESP/okidat24.ppd.gz
/usr/share/cups/model/ESP/okidata9.ppd.gz
/usr/share/cups/model/ESP/epson24.ppd.gz

可以知道,我要找的驱动就是:

引用
/usr/share/cups/model/ESP/laserjet.ppd.gz

三、修改驱动
1、解压

gunzip laserjet.ppd.gz

2、编辑
可通过寻找与A4相关的地方,然后参考后做修改。
a、在约55行:

引用
*UIConstraints: *PageSize A4 *InputSlot Envelope

下面增加:

引用
*UIConstraints: *PageSize A7 *InputSlot Envelope

其中,A7是我自定义页面大小的名称。
b、定义纸张大小,在约68行:

引用
*PageSize A4/A4:                “<>setpagedevice”

下面增加:

引用
*PageSize A7/A7:                “<>setpagedevice”

其中,400 566就是自定义的页面宽和高。
c、定义页面范围,在约86行:

引用
*PageRegion A4/A4:              “<>setpagedevice”

下面增加:

引用
*PageRegion A7/A7:              “<>setpagedevice”

d、定义内容可用范围,在约102行:

引用
*ImageableArea A4/A4:                   “18 36 577 806”

下面增加:

引用
*ImageableArea A7/A7:                   “18 36 382 548”

上述四个值是边距大小,可根据实际情况输入。我是除下面隔开36外,其他的隔开18:

引用
400-18=382
566-18=548

如果对于打印发票的应用,应该输入类似:0 0 382 548这样。
e、定义纸张尺度,在约117行:

引用
*PaperDimension A4/A4:                  “595 842”

下面增加:

引用
*PaperDimension A7/A7:                  “400 566”

3、其他
为方便使用,还有一些地方可以修改的。
a、驱动名称
修改开始部分的:

引用
*ModelName:     “HP LaserJet Series (ESP)”
*ShortNickName: “HP LaserJet Series (ESP)”
*NickName:      “HP LaserJet Series CUPS v1.1”

为:

引用
*ModelName:     “HP LaserJet 1320 Series (ESP)”
*ShortNickName: “HP LaserJet 1320 Series (ESP)”
*NickName:      “HP LaserJet 1320 Series CUPS v1.1”

这样,以后我们选择驱动的时候,就可以方便的看到“HP LaserJet 1320 Series (ESP)”。
b、修改默认页面
可以把下面几个值后面的Letter都改为自定义的A7即可:

引用
*DefaultPageSize: Letter
*DefaultPageRegion: Letter
*DefaultImageableArea: Letter
*DefaultPaperDimension: Letter

这里也看到一个问题,如果我们不修改驱动,则原来打印的范围并不是A4大小的,而是Letter大小。
4、保存
改一下名称,方便区别:

mv laserjet.ppd HP_LaserJet_1320_Series_ESP.ppd
gzip HP_LaserJet_1320_Series_ESP.ppd
ll HP_LaserJet_1320_Series_ESP.ppd.gz

拷贝到适当的地方:

cp HP_LaserJet_1320_Series_ESP.ppd.gz /usr/share/cups/model/

放在/usr/share/cups目录或子目录下都可以,安装程序会自动寻找的。
四、安装
选择驱动时,可以看到我定义的驱动名称:
点击在新窗口中浏览此图片点击在新窗口中浏览此图片点击在新窗口中浏览此图片※注意,很多打印机驱动并不是放在/usr/share/cups下,而是由foomatic提供,放在:

引用
/usr/share/foomatic/db/source/PPD/

寻找驱动的时候,需要留心。

在Debian 7 下使用CUPS 1.5共享打印机
再次处理cups 1.2.4打印问题
cups的windows-ext client-error-bad-request 故障
修改驱动自定义页面大小的脚本

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/113029.html

(0)
上一篇 2021年8月27日
下一篇 2021年8月27日

相关推荐

发表回复

登录后才能评论