문제

I set up a little machine running Ubuntu Server 12.04 with an Epson TM-T88V plugged into it directly. At first I was able to print fine (using lp) but the auto-cutter wasn't working. I realized it just wasn't using the correct PPD file that was included with the driver, so once I set the printer to use that cutting started working fine.

However, once I got it using the right PPD file the text is printing so light it's almost hard to read. When I tried to pass ESC/POS commands directly to it it was essentially like I'd gone back to the original situation (dark text, no cut).

This is really my first foray into thermal printers, so my apologies if I'm missing something simple. Am I going about this the completely wrong way? Any advice would be greatly appreciated.

I originally posted this on SuperUser, but I suppose since the printer is physically working correctly this is obviously a mistake I'm making on the programming side.

This is the command I'm using to print (it's Node.js). I don't know if it's worth noting that when I wrote this application and had it working from my MBP I was using the lpr not lp. For whatever reason, lpr doesn't do anything on the server.

var toPrint = "echo '" +
            "Order for: " + req.body.name + "\n" +
            "Email: " + req.body.email + "\n\n" +
            "Food Items Ordered: \n" + foodItems +
            "\n\nThank you for using WhyWait!' | lp";
// Print the order!
var printCmd = exec(toPrint, function (error, stdout, stderr) {
  if (error !== null) {
   console.log('exec error: ' + error);
  }
  console.log('Order printed!\n');
});

This is the PPD file.

*PPD-Adobe: "4.3"
*% Copyright (C) Seiko Epson Corporation 2010. All rights reserved.
*%
*% Driver for Epson Thermal Printers Series.

*FormatVersion: "4.3"
*FileVersion: "1.0"
*LanguageVersion: English
*LanguageEncoding: ISOLatin1
*PCFileName: "TM-T88V.PPD"
*Manufacturer: "EPSON"
*Product: "(ThermalPrinter)"
*ModelName:"EPSON TM-T88V"
*ShortNickName:"TM-T88V"
*NickName: "EPSON TM-T88V (rastertotmt)"
*PSVersion: "(3010.000) 0"
*LanguageLevel: "3"
*ColorDevice: False
*DefaultColorSpace: Gray
*FileSystem: False
*Throughput: "1"
*LandscapeOrientation: Plus90
*VariablePaperSize: True
*TTRasterizer: Type42
*cupsVersion: 1.2
*cupsManualCopies: True
*cupsModelNumber: 1
*cupsFilter: "application/vnd.cups-raster 0 rastertotmt"

*OpenGroup: General/General

*%Page size settings.
*OpenUI *PageSize/Media Size: PickOne
*OrderDependency: 11 AnySetup *PageSize
*DefaultPageSize:RP80x297
*PageSize RP80x297/Roll Paper 80 x 297 mm: "<</PageSize[204 841.8]/ImagingBBox null>>setpagedevice"
*PageSize RP58x297/Roll Paper 58 x 297 mm: "<</PageSize[141.7 841.8]/ImagingBBox null>>setpagedevice"
*CloseUI: *PageSize

*OpenUI *PageRegion: PickOne
*OrderDependency: 11 AnySetup *PageRegion
*DefaultPageRegion:RP80x297
*PageRegion RP80x297/Roll Paper 80 x 297 mm: "<</PageSize[204 841.8]/ImagingBBox null>>setpagedevice"
*PageRegion RP58x297/Roll Paper 58 x 297 mm: "<</PageSize[141.7 841.8]/ImagingBBox null>>setpagedevice"
*CloseUI: *PageRegion

*DefaultImageableArea: RP80x297
*ImageableArea RP80x297/Roll Paper 80 x 297 mm: "0 0 204 841.8"
*ImageableArea RP58x297/Roll Paper 58 x 297 mm: "0 0 141.7 841.8"

*DefaultPaperDimension: RP80x297
*PaperDimension RP80x297/Roll Paper 80 x 297 mm: "204 841.8"
*PaperDimension RP58x297/Roll Paper 58 x 297 mm: "141.7 841.8"

*%Custom page size settings.
*MaxMediaWidth: "204"
*MaxMediaHeight: "5669.2"
*NonUIOrderDependency: 100 AnySetup *CustomPageSize
*CustomPageSize True: "pop pop pop <</PageSize [ 5 -2 roll ]/ImagingBBox null>>setpagedevice"
*ParamCustomPageSize Width: 1 points 72 204
*ParamCustomPageSize Height: 2 points 72 5669.2
*ParamCustomPageSize WidthOffset:  3 points 0 0
*ParamCustomPageSize HeightOffset: 4 points 0 0
*ParamCustomPageSize Orientation:  5 int 0 0

*%Resolution settings.
*OpenUI *Resolution/Resolution: PickOne
*OrderDependency: 10 AnySetup *Resolution
*DefaultResolution: 180x180dpi
*Resolution 180x180dpi/180 x 180 dpi: "<</HWResolution[180 180]/cupsRowCount 24>>setpagedevice"
*CloseUI: *Resolution

*%Head speed settings.
*TmtSpeedValue 1: "13"
*TmtSpeedValue 2: "9"
*TmtSpeedValue 3: "5"
*TmtSpeedValue 4: "1"

*OpenUI *TmtSpeed/Printing Speed: PickOne
*OrderDependency: 10 AnySetup *TmtSpeed
*DefaultTmtSpeed: Auto
*TmtSpeed Auto/Use the printer settings : ""
*TmtSpeed 1/1st (Fast): ""
*TmtSpeed 2/2nd: ""
*TmtSpeed 3/3rd: ""
*TmtSpeed 4/4th (Slow): ""
*CloseUI: *TmtSpeed

*%Exit feed direction settings.
*TmtReverseFeedDirection: False

*%Paper reduction settings.
*OpenUI *TmtPaperReduction/Paper Reduction: PickOne
*OrderDependency: 11 AnySetup *TmtPaperReduction
*DefaultTmtPaperReduction: Bottom
*TmtPaperReduction Off/None: ""
*TmtPaperReduction Top/Top margin: ""
*TmtPaperReduction Bottom/Bottom margin: ""
*TmtPaperReduction Both/Top & Bottom margins: ""
*CloseUI: *TmtPaperReduction

*%Paper source settings.
*OpenUI *TmtPaperSource/Paper Source: PickOne
*OrderDependency: 11 AnySetup *TmtPaperSource
*DefaultTmtPaperSource: DocFeedCut
*TmtPaperSource DocFeedCut/Document [Feed, Cut]: ""
*TmtPaperSource DocFeedNoCut/Document [Feed, NoCut]: ""
*TmtPaperSource DocNoFeedCut/Document [NoFeed, Cut]: ""
*TmtPaperSource DocNoFeedNoCut/Document [NoFeed, NoCut]: ""
*TmtPaperSource PageFeedCut/Page [Feed, Cut]: ""
*TmtPaperSource PageFeedNoCut/Page [Feed, NoCut]: ""
*TmtPaperSource PageNoFeedCut/Page [NoFeed, Cut]: ""
*CloseUI: *TmtPaperSource

*CloseGroup: General

*OpenGroup: Buzzer Control/Buzzer Control

*%Buzzer settings.
*OpenUI *TmtBuzzerControl/Buzzer: PickOne
*OrderDependency: 11 AnySetup *TmtBuzzerControl
*DefaultTmtBuzzerControl: Off
*TmtBuzzerControl Off/Not used: ""
*TmtBuzzerControl Before/Sounds before printing: ""
*TmtBuzzerControl After/Sounds after printing: ""
*CloseUI: *TmtBuzzerControl

*%Sound pattern settings.
*OpenUI *TmtSoundPattern/Sound Pattern: PickOne
*OrderDependency: 11 AnySetup *TmtSoundPattern
*DefaultTmtSoundPattern: Internal
*TmtSoundPattern Internal/Internal buzzer: ""
*TmtSoundPattern A/Option buzzer (Pattern A): ""
*TmtSoundPattern B/Option buzzer (Pattern B): ""
*TmtSoundPattern C/Option buzzer (Pattern C): ""
*TmtSoundPattern D/Option buzzer (Pattern D): ""
*TmtSoundPattern E/Option buzzer (Pattern E): ""
*CloseUI: *TmtSoundPattern

*%Buzzer repeat settings.
*OpenUI *TmtBuzzerRepeat/Buzzer Repeat: PickOne
*OrderDependency: 11 AnySetup *TmtBuzzerRepeat
*DefaultTmtBuzzerRepeat: 1
*TmtBuzzerRepeat 1/1: ""
*TmtBuzzerRepeat 2/2: ""
*TmtBuzzerRepeat 3/3: ""
*TmtBuzzerRepeat 5/5: ""
*CloseUI: *TmtBuzzerRepeat

*CloseGroup: Buzzer Control

*OpenGroup: Cash Drawer Control/Cash Drawer Control

*%Drawer settings.
*OpenUI *TmtDrawer1/Cash Drawer #1: PickOne
*OrderDependency: 11 AnySetup *TmtDrawer1
*DefaultTmtDrawer1: Off
*TmtDrawer1 Off/Does not open: ""
*TmtDrawer1 Before/Open before printing: ""
*TmtDrawer1 After/Open after printing: ""
*CloseUI: *TmtDrawer1

*OpenUI *TmtDrawer2/Cash Drawer #2: PickOne
*OrderDependency: 11 AnySetup *TmtDrawer2
*DefaultTmtDrawer2: Off
*TmtDrawer2 Off/Does not open: ""
*TmtDrawer2 Before/Open before printing: ""
*TmtDrawer2 After/Open after printing: ""
*CloseUI: *TmtDrawer2

*CloseGroup: Cash Drawer Control

*%Drawer pulse settings.
*TmtDrawer1Pulse On: 10
*TmtDrawer1Pulse Off: 100
*TmtDrawer2Pulse On: 10
*TmtDrawer2Pulse Off: 100

*%Pitch of feed settings.
*TmtFeedPitch: 360

*%Used command set version.
*TmtCommandSetVersion OutputRaster: 2

*%Line number of band.
*TmtBandLines: 256

*%Message defines.
*TmtMessage ParameterError: "Invalid parameter."

*% End
도움이 되었습니까?

해결책

There are two methods of printing to most thermal printers:

  1. Normal (2D) - Such as printing from Libre Office
  2. Raw (Generic Text/Raw PCL Commands) - Such as printing a raw file directly from the console.

The printer you mention, the TM88 is popular thermal printer used for printing receipts; it can do both; it's raw capable but with the right software can print from other applications. The raw language the TM88 uses is ESCP2 or more commonly ESC/POS. All TM-series printers from Epson are ESC/POS capable.

The trouble you are running into is you're trying to send raw commands to a driver that expects some 2D content. There are a few ways to achieve this.

  1. Map two printers (one to the 2D driver, one to a Generic/Text driver -- This is called "Raw, Generic" in CUPS) print to one, then the other.
  2. Learn the raw commands for the action you're preforming. In this case, it's generally: Hex: 0x1B 0x69 (cut paper)
  3. Keep the driver installed, but force raw anyway by issuing the command directly to cups in raw mode using lpr -o raw with a flat file from the file system.

Bonus: Need to kick out a cash drawer? 0x10 0x14 0x01 0x00 0x05 (pulse/cash drawer). Warning, please cross reference all raw commands against your ESCP programming guide.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top