Mar 22

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

linuxing , 18:46 , 编程 » Bash , 评论(0) , 引用(0) , 阅读(30128) , Via 本站原创 | |
   这几天在项目中,软件开放商提出需要在应用系统中,对打印发票的功能提供帮助,也就是需要根据发票的大小,定义打印机打印页的尺寸。但该功能系统中默认是没有的,经过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,该驱动没用的)
点击在新窗口中浏览此图片
然后,需要从系统中找到对应的驱动ppd文件。
以红旗DT 5 NE为例,包括ppd文件的rpm包有好几个,分别是:
引用
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目录或子目录下都可以,安装程序会自动寻找的。
四、安装
选择驱动时,可以看到我定义的驱动名称:
点击在新窗口中浏览此图片
在设置中:
点击在新窗口中浏览此图片
可以看到自定义的A7页面:
点击在新窗口中浏览此图片
驱动修改成功。
※注意,很多打印机驱动并不是放在/usr/share/cups下,而是由foomatic提供,放在:
引用
/usr/share/foomatic/db/source/PPD/

寻找驱动的时候,需要留心。
Tags:
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]