Linux cups印刷概要メモ

18641 ワード

最近Androidからc++サービス開発に移行し、centos 6.5でpdf、テキストファイル、ピクチャなどをtiffフォーマット(ファクシミリに必要なフォーマット)に変換する任務を受けたため、linuxでのcups印刷原理とシステムを研究したが、現在は基本的に把握しており、任意のpdfとピクチャをtiffに変換することができ、linuxでのutf 8のテキストドキュメントに中国語があれば、中国語は重なって、windowsの下でgbkの中国語は印刷することができなくて、知っている兄弟が私に教えてくれます.
プロセス:
pdf、画像、テキスト-------------------------------->PostScript----------------------------->tiff
以上のフローは、標準linux印刷の基本フローを利用しています.
プロファイル:
/etc/cups/cupsd.conf:cupsサービスプロファイル
MaxLogSize 0
#
# "$Id: cupsd.conf.in 8805 2009-08-31 16:34:06Z mike $"
#
# Sample configuration file for the CUPS scheduler.  See "man cupsd.conf" for a
# complete description of this file.
#

# Log general information in error_log - change "warn" to "debug"
# for troubleshooting...
LogLevel warn

# Administrator user group...
SystemGroup sys root

# Only listen for connections from the local machine.
Listen localhost:631
Listen /var/run/cups/cups.sock

# Show shared printers on the local network.
Browsing On
BrowseOrder allow,deny
BrowseAllow all
BrowseLocalProtocols CUPS dnssd

# Default authentication type, when authentication is required...
DefaultAuthType Basic

# Restrict access to the server...

  Order allow,deny


# Restrict access to the admin pages...

  Order allow,deny


# Restrict access to configuration files...

  AuthType Default
  Require user @SYSTEM
  Order allow,deny


# Set the default printer/job policies...

  # Job-related operations must be done by the owner or an administrator...
  
    Require user @OWNER @SYSTEM
    Order deny,allow
  

  # All administration operations require an administrator to authenticate...
  
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  

  # All printer operations require a printer operator to authenticate...
  
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  

  # Only the owner or an administrator can cancel or authenticate a job...
  
    Require user @OWNER @SYSTEM
    Order deny,allow
  

  
    Order deny,allow
  


# Set the authenticated printer/job policies...

  # Job-related operations must be done by the owner or an administrator...
  
    AuthType Default
    Order deny,allow
  

  
    AuthType Default
    Require user @OWNER @SYSTEM
    Order deny,allow
  

  # All administration operations require an administrator to authenticate...
  
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  

  # All printer operations require a printer operator to authenticate...
  
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  

  # Only the owner or an administrator can cancel or authenticate a job...
  
    AuthType Default
    Require user @OWNER @SYSTEM
    Order deny,allow
  

  
    Order deny,allow
  


#
# End of "$Id: cupsd.conf.in 8805 2009-08-31 16:34:06Z mike $".
#

/etc/cups/printers.conf:具体的なプリンタのプロファイルです.MDSFaxServerは自分で作成した仮想プリンタです.太いところに注意してください.
Filterは、対応するMIME typeに対して、どのfilterが変換するかを示すために使用されます.(filterはcupsの重要なコンポーネントであり、各種フォーマットの変換を完了する)
DeviceURIは、/usr/lib/cups/backendの次の処理のプログラムを示すために使用されます.ここでは、次の/usr/lib/cups/backend/mdsfaxserverスクリプトを指します.

Info MDS Fax Server
MakeModel Generic PostScript Printer Foomatic/Postscript (recommended)
DeviceURI mdsfaxserver:/
State Idle
StateTime 1418957192
Type 8433692
Filter application/vnd.cups-raw 0 -
Filter application/vnd.cups-postscript 100 foomatic-rip
Filter application/vnd.cups-pdf 0 foomatic-rip
Accepting Yes
Shared No
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy retry-job

/etc/cups/ppd/MDSFaxServer.ppd
ppdファイルの役割はプリンタドライバに相当し、印刷時の具体的なパラメータ、例えばページパラメータ、どのfilterで変換するかを指定します.
プリンタのppdファイルまたは具体的な駆動はhttp://www.linuxfoundation.org/ダウンロード
*PPD-Adobe: "4.3"
*%
*% For information on using this, and to obtain the required backend
*% script, consult http://www.openprinting.org/
*%
*% This file is published under the GNU General Public License
*%
*% PPD-O-MATIC (4.0.0 or newer) generated this PPD file. It is for use with 
*% all programs and environments which use PPD files for dealing with
*% printer capability information. The printer must be configured with the
*% "foomatic-rip" backend filter script of Foomatic 4.0.0 or newer. This 
*% file and "foomatic-rip" work together to support PPD-controlled printer
*% driver option access with all supported printer drivers and printing
*% spoolers.
*%
*% To save this file on your disk, wait until the download has completed
*% (the animation of the browser logo must stop) and then use the
*% "Save as..." command in the "File" menu of your browser or in the 
*% pop-up manu when you click on this document with the right mouse button.
*% DO NOT cut and paste this file into an editor with your mouse. This can
*% introduce additional line breaks which lead to unexpected results.
*%
*% You may save this file as 'Generic-PostScript_Printer-Postscript.ppd'
*%
*%
*FormatVersion:	"4.3"
*FileVersion:	"1.1"
*LanguageEncoding: English
*LanguageVersion: ISOLatin1 
*PCFileName:	"POSTSCRI.PPD"
*Manufacturer:	"Generic"
*Product:	"(PostScript Printer)"
*cupsVersion:	1.0
*cupsManualCopies: True
*cupsModelNumber:  2
*cupsFilter:	"application/vnd.cups-postscript 100 foomatic-rip"
*cupsFilter:	"application/vnd.cups-pdf 0 foomatic-rip"
*%pprRIP:        foomatic-rip other
*ModelName:     "Generic PostScript Printer"
*ShortNickName: "Generic P.S. Printer Postscript"
*NickName:      "Generic PostScript Printer Foomatic/Postscript (recommended)"
*PSVersion:	"(3010.000) 550"
*PSVersion:	"(3010.000) 651"
*PSVersion:	"(3010.000) 652"
*PSVersion:	"(3010.000) 653"
*PSVersion:	"(3010.000) 704"
*PSVersion:	"(3010.000) 705"
*PSVersion:	"(3010.000) 800"
*PSVersion:	"(3010.000) 815"
*PSVersion:	"(3010.000) 850"
*PSVersion:	"(3010.000) 860"
*PSVersion:	"(3010.000) 861"
*PSVersion:	"(3010.000) 862"
*PSVersion:	"(3010.000) 863"
*PSVersion:	"(3010.000) 864"
*PSVersion:	"(3010.000) 870"
*LanguageLevel:	"3"
*ColorDevice:	True
*DefaultColorSpace: RGB
*FileSystem:	False
*Throughput:	"1"
*LandscapeOrientation: Plus90
*TTRasterizer:	Type42
*1284DeviceID: "DRV:DPostscript,R1,M0,F1,P0,TP;"

*driverName Postscript: ""
*driverType P/PostScript: ""
*driverUrl: "http://partners.adobe.com/public/developer/ps/index_specs.html"
*driverObsolete: False
*driverManufacturerSupplied: False
*driverFreeSoftware: True




*HWMargins: 18 36 18 36
*VariablePaperSize: True
*MaxMediaWidth: 100000
*MaxMediaHeight: 100000
*NonUIOrderDependency: 100 AnySetup *CustomPageSize
*CustomPageSize True: "pop pop pop
<>setpagedevice"
*End
*ParamCustomPageSize Width: 1 points 36 100000
*ParamCustomPageSize Height: 2 points 36 100000
*ParamCustomPageSize Orientation: 3 int 0 0
*ParamCustomPageSize WidthOffset: 4 points 0 0
*ParamCustomPageSize HeightOffset: 5 points 0 0

*FoomaticIDs: Generic-PostScript_Printer Postscript
*FoomaticRIPCommandLine: "cat%A%B%Z"
*FoomaticRIPNoPageAccounting: True

*OpenGroup: General/General

*OpenUI *PageSize/Page Size: PickOne
*OrderDependency: 100 AnySetup *PageSize
*DefaultPageSize: Letter
*PageSize Letter/US Letter: "<>setpagedevice"
*PageSize A4/A4: "<>setpagedevice"
*PageSize 11x17/11x17: "<>setpagedevice"
*PageSize A3/A3: "<>setpagedevice"
*PageSize A5/A5: "<>setpagedevice"
*PageSize B5/B5 (JIS): "<>setpagedevice"
*PageSize Env10/Envelope #10: "<>setpagedevice"
*PageSize EnvC5/Envelope C5: "<>setpagedevice"
*PageSize EnvDL/Envelope DL: "<>setpagedevice"
*PageSize EnvISOB5/Envelope B5: "<>setpagedevice"
*PageSize EnvMonarch/Envelope Monarch: "<>setpagedevice"
*PageSize Executive/Executive: "<>setpagedevice"
*PageSize Legal/US Legal: "<>setpagedevice"
*CloseUI: *PageSize

*OpenUI *PageRegion: PickOne
*OrderDependency: 100 AnySetup *PageRegion
*DefaultPageRegion: Letter
*PageRegion Letter/US Letter: "<>setpagedevice"
*PageRegion A4/A4: "<>setpagedevice"
*PageRegion 11x17/11x17: "<>setpagedevice"
*PageRegion A3/A3: "<>setpagedevice"
*PageRegion A5/A5: "<>setpagedevice"
*PageRegion B5/B5 (JIS): "<>setpagedevice"
*PageRegion Env10/Envelope #10: "<>setpagedevice"
*PageRegion EnvC5/Envelope C5: "<>setpagedevice"
*PageRegion EnvDL/Envelope DL: "<>setpagedevice"
*PageRegion EnvISOB5/Envelope B5: "<>setpagedevice"
*PageRegion EnvMonarch/Envelope Monarch: "<>setpagedevice"
*PageRegion Executive/Executive: "<>setpagedevice"
*PageRegion Legal/US Legal: "<>setpagedevice"
*CloseUI: *PageRegion

*DefaultImageableArea: Letter
*ImageableArea Letter/US Letter: "18 36 594 756"
*ImageableArea A4/A4: "18 36 577 806"
*ImageableArea 11x17/11x17: "18 36 774 1188"
*ImageableArea A3/A3: "18 36 824 1155"
*ImageableArea A5/A5: "18 36 403 559"
*ImageableArea B5/B5 (JIS): "18 36 498 693"
*ImageableArea Env10/Envelope #10: "18 36 279 648"
*ImageableArea EnvC5/Envelope C5: "18 36 441 613"
*ImageableArea EnvDL/Envelope DL: "18 36 294 588"
*ImageableArea EnvISOB5/Envelope B5: "18 36 481 673"
*ImageableArea EnvMonarch/Envelope Monarch: "18 36 261 504"
*ImageableArea Executive/Executive: "18 36 504 720"
*ImageableArea Legal/US Legal: "18 36 594 972"

*DefaultPaperDimension: Letter
*PaperDimension Letter/US Letter: "612 792"
*PaperDimension A4/A4: "595 842"
*PaperDimension 11x17/11x17: "792 1224"
*PaperDimension A3/A3: "842 1191"
*PaperDimension A5/A5: "421 595"
*PaperDimension B5/B5 (JIS): "516 729"
*PaperDimension Env10/Envelope #10: "297 684"
*PaperDimension EnvC5/Envelope C5: "459 649"
*PaperDimension EnvDL/Envelope DL: "312 624"
*PaperDimension EnvISOB5/Envelope B5: "499 709"
*PaperDimension EnvMonarch/Envelope Monarch: "279 540"
*PaperDimension Executive/Executive: "522 756"
*PaperDimension Legal/US Legal: "612 1008"

*OpenUI *InputSlot/Media Source: PickOne
*OrderDependency: 120 AnySetup *InputSlot
*DefaultInputSlot: Default
*InputSlot Default/Default: "<>setpagedevice"
*InputSlot Upper/Upper Tray: "<>setpagedevice"
*InputSlot Lower/Lower Tray: "<>setpagedevice"
*InputSlot Multipurpose/Multipurpose Tray: "<>setpagedevice"
*InputSlot Manual/Manual Feeder: "<>setpagedevice"
*CloseUI: *InputSlot

*OpenUI *Duplex/Double-Sided Printing: PickOne
*OrderDependency: 130 AnySetup *Duplex
*DefaultDuplex: None
*Duplex DuplexNoTumble/Long Edge (Standard): "<>setpagedevice"
*Duplex DuplexTumble/Short Edge (Flip): "<>setpagedevice"
*Duplex None/Off: "<>setpagedevice"
*CloseUI: *Duplex

*OpenUI *Resolution/Resolution: PickOne
*OrderDependency: 90 AnySetup *Resolution
*DefaultResolution: 600x600dpi
*Resolution 150x150dpi/150x150 DPI: "<>setpagedevice"
*Resolution 300x300dpi/300x300 DPI: "<>setpagedevice"
*Resolution 600x600dpi/600x600 DPI: "<>setpagedevice"
*Resolution 1200x600dpi/1200x600 DPI: "<>setpagedevice"
*Resolution 1200x1200dpi/1200x1200 DPI: "<>setpagedevice"
*Resolution 2400x600dpi/2400x600 DPI: "<>setpagedevice"
*Resolution 2400x1200dpi/2400x1200 DPI: "<>setpagedevice"
*Resolution 2400x2400dpi/2400 DPI: "<>setpagedevice"
*CloseUI: *Resolution

*CloseGroup: General


*% Generic boilerplate PPD stuff as standard PostScript fonts and so on

*DefaultFont: Courier
*Font AvantGarde-Book: Standard "(001.006S)" Standard ROM
*Font AvantGarde-BookOblique: Standard "(001.006S)" Standard ROM
*Font AvantGarde-Demi: Standard "(001.007S)" Standard ROM
*Font AvantGarde-DemiOblique: Standard "(001.007S)" Standard ROM
*Font Bookman-Demi: Standard "(001.004S)" Standard ROM
*Font Bookman-DemiItalic: Standard "(001.004S)" Standard ROM
*Font Bookman-Light: Standard "(001.004S)" Standard ROM
*Font Bookman-LightItalic: Standard "(001.004S)" Standard ROM
*Font Courier: Standard "(002.004S)" Standard ROM
*Font Courier-Bold: Standard "(002.004S)" Standard ROM
*Font Courier-BoldOblique: Standard "(002.004S)" Standard ROM
*Font Courier-Oblique: Standard "(002.004S)" Standard ROM
*Font Helvetica: Standard "(001.006S)" Standard ROM
*Font Helvetica-Bold: Standard "(001.007S)" Standard ROM
*Font Helvetica-BoldOblique: Standard "(001.007S)" Standard ROM
*Font Helvetica-Narrow: Standard "(001.006S)" Standard ROM
*Font Helvetica-Narrow-Bold: Standard "(001.007S)" Standard ROM
*Font Helvetica-Narrow-BoldOblique: Standard "(001.007S)" Standard ROM
*Font Helvetica-Narrow-Oblique: Standard "(001.006S)" Standard ROM
*Font Helvetica-Oblique: Standard "(001.006S)" Standard ROM
*Font NewCenturySchlbk-Bold: Standard "(001.009S)" Standard ROM
*Font NewCenturySchlbk-BoldItalic: Standard "(001.007S)" Standard ROM
*Font NewCenturySchlbk-Italic: Standard "(001.006S)" Standard ROM
*Font NewCenturySchlbk-Roman: Standard "(001.007S)" Standard ROM
*Font Palatino-Bold: Standard "(001.005S)" Standard ROM
*Font Palatino-BoldItalic: Standard "(001.005S)" Standard ROM
*Font Palatino-Italic: Standard "(001.005S)" Standard ROM
*Font Palatino-Roman: Standard "(001.005S)" Standard ROM
*Font Symbol: Special "(001.007S)" Special ROM
*Font Times-Bold: Standard "(001.007S)" Standard ROM
*Font Times-BoldItalic: Standard "(001.009S)" Standard ROM
*Font Times-Italic: Standard "(001.007S)" Standard ROM
*Font Times-Roman: Standard "(001.007S)" Standard ROM
*Font ZapfChancery-MediumItalic: Standard "(001.007S)" Standard ROM
*Font ZapfDingbats: Special "(001.004S)" Standard ROM

/usr/lib/cups/backend/mdsfaxserver
このスクリプトは、変換されたpostscriptストリームを受信し、gs(GhostScript)を使用してtiffに変換するために実行できます.
#!/bin/bash

# argv[1]	The job ID
# argv[2]	The user printing the job
# argv[3]	The job name/title
# argv[4]	The number of copies to print
# argv[5]	The options that were provided when the job was submitted
# argv[6]	The file to print (first program only)

DIRPATH=/usr/local/faxserver
FILESPATH=/tmp
TARGETFILE=$FILESPATH/$3
LOGFILE=/tmp/faxserver_print.log

exec 1>>$LOGFILE
exec 2>>$LOGFILE

echo "======================================================================"
echo "$1"
echo "$2"
echo "$3"
echo "$4"
echo "$5"

cat $6 > $TARGETFILE.ps
RET_STATUS=$?
if [ $RET_STATUS -ne 0 ]
then
	echo "[ERR] cat ps file get error!"
	exit 5  #Job failed, cancel job
fi

gs -q -r204x196 -g1728x2156 -dNOPAUSE -dBATCH -dSAFER -sDEVICE=tiffg3 -sOutputFile=$TARGETFILE.tiff $TARGETFILE.ps
RET_STATUS=$?
if [ $RET_STATUS -ne 0 ]
then
	echo "[ERR] trans ps file to tiff get error!"
	exit 5  #Job failed, cancel job
fi

chmod a+r $TARGETFILE.tiff

RET_STATUS=$?
if [ $RET_STATUS -ne 0 ]
then
	echo "[ERR] change tiff file to all read get error!"
	exit 5  #Job failed, cancel job
fi

#OPTS="$5"
#PUSH_CMD=${OPTS##*PUSH_CMD=}
#PUSH_CMD=${PUSH_CMD%% *}
#PUSH_CMD=${PUSH_CMD//#/ }
#`$PUSH_CMD`
#RET_STATUS=$?
#if [ $RET_STATUS -ne 0 ]
#then
#	echo "[ERR] push tiff file get error!"
#	exit 5  #Job failed, cancel job
#fi

exit 0

Cups印刷関連ディレクトリ:
/etc/cups:cupsサービスprinter構成ディレクトリ
/etc/cups/ppd:関連pinter ppdファイルディレクトリ
/etc/foomatic/foomatic.conf:フィルタfoomaticのプロファイル
/usr/share/cups/model:cupsフィルタテンプレートprinterを作成するときにこの下のppdを使用すると、/etc/cups/ppdの下でppdを生成できます.
/usr/lib/cups/backend:さらに処理可能な実行可能ファイルディレクトリに印刷
いくつかの重要な資料:
中国語cups印刷原理:http://www.linuxidc.com/Linux/2010-12/30698.htm
Cups原理フィルタ権威サイト:https://wiki.archlinux.org/index.php/Cups
書籍:Unix linux system administrator hand book第4版