You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CUPS打印收据时如何固定打印方向?

问题描述

搭建简易POS系统,使用Seiko Instruments RP-D10收据打印机,系统生成的PDF文件正确,但CUPS打印时存在以下问题:

  • 始终以纵向模式打印,当收据高度小于宽度时,CUPS自动将内容横向发送至打印机,导致打印效果异常
  • 收据左侧约60mm内容被裁切
  • 手动设置打印方向及默认选项无效,无法通过固定文档尺寸解决可变长度收据的问题

配置文件信息

printers.conf

# Written by cupsd
# DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING
NextPrinterId 2
<Printer RP-D10>
PrinterId 1
UUID urn:uuid:ec55ffd0-01c2-36cf-545c-84174ebae871
Info RP-D10
MakeModel SII RP-D10 (80mm)
DeviceURI usb://SII/RP-D10
State Idle
StateTime 1636338040
ConfigTime 1636338040
Type 53252
Accepting Yes
Shared Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy stop-printer
</Printer>

RP-D10.ppd

*FormatVersion:         "4.3"
*FileVersion:           "1.0"
*LanguageVersion:       English
*LanguageEncoding:      ISOLatin1
*PCFileName:            "sii_rpd10_80.ppd"
*Manufacturer:          "SII"
*Product:               "(RP-D10 (80mm))"
*1284DeviceID:          "MFG:SII;CMD:SII;MDL:RP-D10;CLS:PRINTER;"
*cupsVersion:           1.2
*cupsManualCopies:      True
*cupsModelNumber:       4
*cupsFilter:            "application/vnd.cups-raster 0 rastertosii"
*ModelName:             "RP-D10 (80mm)"
*ShortNickName:         "RP-D10 (80mm)"
*NickName:              "SII RP-D10 (80mm)"
*PSVersion:             "(3010.000) 550"
*LanguageLevel:         "3"
*ColorDevice:           False
*DefaultColorSpace:     Gray
*FileSystem:            False
*Throughput:            "1"
*LandscapeOrientation:  Plus90
*VariablePaperSize:     True
*TTRasterizer:          Type42


*% Print Quality
*OpenUI *PrintQuality/Print Quality: PickOne
*OrderDependency: 5 AnySetup *PrintQuality
*DefaultPrintQuality: Normal
*PrintQuality Normal/Normal mode: "<<</cupsBitsPerColor 8/HWResolution [203 203]>>setpagedevice"
*PrintQuality Draft/Draft mode: "<<</cupsBitsPerColor 8/HWResolution [101 101]>>setpagedevice"
*CloseUI: *PrintQuality


*OpenUI *PageSize/Media Size: PickOne
*OrderDependency: 10 AnySetup *PageSize
*DefaultPageSize: X72MMY200MM
*PageSize X72MMY200MM/72mm * 200mm: "
      <<</PageSize[204 567]/ImagingBBox null>>
      setpagedevice"
*PageSize X72MMY1000MM/72mm * 1000mm:   "
      <<</PageSize[204 2835]/ImagingBBox null>>
      setpagedevice"
*PageSize A4/A4 reduced to 72mm:    "
      <<</HWResolution [69 69]/PageSize[595 842]/ImagingBBox null>>
      setpagedevice"
*PageSize Letter/Letter reduced to 72mm:    "
      <<</HWResolution [67 67]/PageSize[612 792]/ImagingBBox null>>
      setpagedevice"
*PageSize SELECTPAPERXXMM/Custom Paper Size(72mm * 297mm):  "
      <<</PageSize[204 842]/ImagingBBox null>>
      setpagedevice"
*CloseUI: *PageSize


*OpenUI *PageRegion: PickOne
*OrderDependency: 10 AnySetup *PageRegion
*DefaultPageRegion: X72MMY200MM
*PageRegion X72MMY200MM/72mm * 200mm:   "
      <<</PageSize[204 567]/ImagingBBox null>>
      setpagedevice"
*PageRegion X72MMY1000MM/72mm * 1000mm: "
      <<</PageSize[204 2835]/ImagingBBox null>>
      setpagedevice"
*PageRegion A4/A4 reduced to 72mm:  "
      <<</HWResolution [69 69]/PageSize[595 842]/ImagingBBox null>>
      setpagedevice"
*PageRegion Letter/Letter reduced to 72mm:  "
      <<</HWResolution [67 67]/PageSize[612 792]/ImagingBBox null>>
      setpagedevice"
*PageRegion SELECTPAPERXXMM/Custom Paper Size(72m * 297mm): "
      <<</PageSize[204 842]/ImagingBBox null>>
      setpagedevice"
*CloseUI: *PageRegion



*DefaultImageableArea:  X72MMY200MM
*ImageableArea X72MMY200MM:         "0.0 0.0 204.0 567.0"
*ImageableArea X72MMY1000MM:        "0.0 0.0 204.0 2835.0"
*ImageableArea A4:                  "0.0 0.0 595.0 842.0"
*ImageableArea Letter:              "0.0 0.0 612.0 792.0"
*ImageableArea SELECTPAPERXXMM: "0.0 0.0 204.0 842.0"


*DefaultPaperDimension: X72MMY200MM
*PaperDimension X72MMY200MM:        "204 567"
*PaperDimension X72MMY1000MM:       "204 2835"
*PaperDimension A4:                 "595 842"
*PaperDimension Letter:             "612 792"
*PaperDimension SELECTPAPERXXMM:    "204 842"


*MaxMediaWidth:  "204"
*MaxMediaHeight: "23219"
*HWMargins:  0 0 0 0
*CustomPageSize True: "pop pop pop <<</PageSize[5 -2 roll]/ImagingBBox null>>setpagedevice"
*ParamCustomPageSize Width:        1 points 72 204
*ParamCustomPageSize Height:       2 points 72 23219
*ParamCustomPageSize WidthOffset:  3 points 0 0
*ParamCustomPageSize HeightOffset: 4 points 0 0
*ParamCustomPageSize Orientation:  5 int 0 0

*% Cut Mode
*OpenUI *PageCutMode/Cut Mode: PickOne
*DefaultPageCutMode: FullCutPage
*PageCutMode FullCutPage/Full Cut: ""
*PageCutMode PartialCutPage/Partial Cut: ""
*PageCutMode NoCutPage/No Cut: ""
*CloseUI: *PageCutMode

*% Print Density: PickOne
*OpenUI *PrintDensity/Print Density: PickOne
*DefaultPrintDensity: 100Percent
*PrintDensity 70Percent/70%: ""
*PrintDensity 80Percent/80%: ""
*PrintDensity 90Percent/90%: ""
*PrintDensity 100Percent/100%: ""
*PrintDensity 110Percent/110%: ""
*PrintDensity 120Percent/120%: ""
*PrintDensity 130Percent/130%: ""
*CloseUI: *PrintDensity

*% Cut Timing
*OpenUI *CutTiming/Cut Timing: PickOne
*DefaultCutTiming: Page
*CutTiming Page/Each Page: ""
*CutTiming Document/Each Document: ""
*CloseUI: *CutTiming

*% Blank Image
*OpenUI *BlankImage/Blank Image: PickOne
*OrderDependency: 10 AnySetup *BlankImage
*DefaultBlankImage: feed
*BlankImage feed/Feed: ""
*BlankImage nonfeed/Non feed: ""
*CloseUI: *BlankImage

*% Dither
*OpenUI *Dither/Dither Type: PickOne
*OrderDependency: 10 AnySetup *Dither
*DefaultDither: ditherScreen
*Dither ditherNone/None: ""
*Dither ditherScreen/Screen: ""
*Dither ditherErrDiff/Error Diffusion: ""
*CloseUI: *Dither

*% End
解决方案

1. 修改PPD文件,强制默认纵向并修正旋转逻辑

编辑RP-D10.ppd文件,添加方向控制配置并调整旋转参数:

  • 添加方向选择项,强制默认纵向:
*OpenUI *Orientation/Orientation: PickOne
*OrderDependency: 15 AnySetup *Orientation
*DefaultOrientation: Portrait
*Orientation Portrait/Portrait: "<<</Orientation 0>>setpagedevice"
*Orientation Landscape/Landscape: "<<</Orientation 1>>setpagedevice"
*CloseUI: *Orientation
  • 将*LandscapeOrientation: Plus90修改为*LandscapeOrientation: Minus90,避免旋转后内容偏移导致裁切

修改后重启CUPS服务:

sudo systemctl restart cups

2. 强制打印机使用固定宽幅长页面

通过命令行设置打印机默认选项,指定使用72mm宽、1000mm长的页面(适配可变长度收据),并锁定纵向:

lpadmin -p RP-D10 -o PageSize=X72MMY1000MM -o Orientation=Portrait

也可以先停止CUPS服务,直接编辑printers.conf,在<Printer RP-D10>块内添加:

Option PageSize X72MMY1000MM
Option Orientation Portrait

3. 替换CUPS过滤器(可选)

当前使用的rastertosii过滤器可能存在方向处理缺陷,可尝试替换为通用ESC/POS过滤器:

  1. 安装rastertoescpos(Debian/Ubuntu系统示例):
sudo apt install printer-driver-escpos
  1. 修改PPD文件中的过滤器配置:
*cupsFilter:            "application/vnd.cups-raster 0 rastertoescpos"
  1. 重启CUPS服务后测试打印

4. 打印PDF时强制指定参数

打印生成的PDF时,明确指定页面尺寸和方向,避免CUPS自动判断:

lp -d RP-D10 -o PageSize=X72MMY1000MM -o Orientation=Portrait receipt.pdf

如果是应用程序内调用打印,确保传递这些参数给CUPS打印命令。

内容的提问来源于stack exchange,提问作者Sarazil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:31:33