Mar
22
这几天在项目中,软件开放商提出需要在应用系统中,对打印发票的功能提供帮助,也就是需要根据发票的大小,定义打印机打印页的尺寸。但该功能系统中默认是没有的,经过cjacker的协助,可以通过修改打印机驱动文件.ppd实现。
一、平台
目前的Linux发行版本,基本都是使用cups服务作为默认的打印服务,而使用ppd作为打印驱动。但不同的操作系统平台,版本差异比较大。我试验的平台是:
操作系统:红旗 DeskTop 5 NE
应用版本:
测试打印机: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包有好几个,分别是:
而它们存放的路径都有点不同,但根路径是/usr/share/,可以通过这样来寻找:
可以知道,我要找的驱动就是:
三、修改驱动
1、解压
2、编辑
可通过寻找与A4相关的地方,然后参考后做修改。
a、在约55行:
下面增加:
其中,A7是我自定义页面大小的名称。
b、定义纸张大小,在约68行:
下面增加:
其中,400 566就是自定义的页面宽和高。
c、定义页面范围,在约86行:
下面增加:
d、定义内容可用范围,在约102行:
下面增加:
上述四个值是边距大小,可根据实际情况输入。我是除下面隔开36外,其他的隔开18:
如果对于打印发票的应用,应该输入类似:0 0 382 548这样。
e、定义纸张尺度,在约117行:
下面增加:
3、其他
为方便使用,还有一些地方可以修改的。
a、驱动名称
修改开始部分的:
为:
这样,以后我们选择驱动的时候,就可以方便的看到“HP LaserJet 1320 Series (ESP)”。
b、修改默认页面
可以把下面几个值后面的Letter都改为自定义的A7即可:
这里也看到一个问题,如果我们不修改驱动,则原来打印的范围并不是A4大小的,而是Letter大小。
4、保存
改一下名称,方便区别:
拷贝到适当的地方:
放在/usr/share/cups目录或子目录下都可以,安装程序会自动寻找的。
四、安装
选择驱动时,可以看到我定义的驱动名称:
在设置中:
可以看到自定义的A7页面:
驱动修改成功。
※注意,很多打印机驱动并不是放在/usr/share/cups下,而是由foomatic提供,放在:
寻找驱动的时候,需要留心。
一、平台
目前的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
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
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/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
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"
*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"
*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
*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
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/
寻找驱动的时候,需要留心。