Я добавил пользовательский формат в /etc/cups/ppd/GK420.ppd, чтобы он соответствовал моим этикеткам размером 70x50 мм.
*OpenUI *PageSize/Media Size: PickOne
*OrderDependency: 10 AnySetup *PageSize
*DefaultPageSize: w198h141
*PageSize w198h141/70x50mm: "<</PageSize[198 141]/ImagingBBox null>>setpagedevice"
*PageSize w90h18/1.25x0.25": "<</PageSize[90 18]/ImagingBBox null>>setpagedevice"
*CloseUI: *PageSize
*OpenUI *PageRegion/Media Size: PickOne
*OrderDependency: 10 AnySetup *PageRegion
*DefaultPageRegion: w198h141
*PageRegion w198h141/70x50mm: "<</PageSize[198 141]/ImagingBBox null>>setpagedevice"
*PageRegion w90h18/1.25x0.25": "<</PageSize[90 18]/ImagingBBox null>>setpagedevice"
*CloseUI: *PageRegion
*DefaultImageableArea: w198h141
*ImageableArea w198h141/70x50mm: "0 0 198 141"
*ImageableArea w90h18/1.25x0.25": "0 0 90 18"
*DefaultPaperDimension: w198h141
*PaperDimension w198h141/70x50": "198 141"
*PaperDimension w90h18/1.25x0.25": "90 18"
*MaxMediaWidth: "576"
*MaxMediaHeight: "3600"
*HWMargins: 0 0 0 0
*CustomPageSize True: "pop pop pop <</PageSize[5 -2 roll]/ImagingBBox null>>setpagedevice"
*ParamCustomPageSize Width: 1 points 36 576
*ParamCustomPageSize Height: 2 points 36 3600
*ParamCustomPageSize WidthOffset: 3 points 0 0
*ParamCustomPageSize HeightOffset: 4 points 0 0
*ParamCustomPageSize Orientation: 5 int 0 0
При печати из gEdit или LibreOffice мой текст не выровнен должным образом: печать начинается задолго до левой границы этикетки.
Если я печатаю с использованием Windows XP и драйвера Seagull, тот же файл .odt (я использую виртуальную машину на хосте Linux, где установлен CUPS) распечатывается правильно.
Когда я возвращаюсь в Linux и снова печатаю, выравнивание правильное.
Я предполагаю, что драйвер Windows отправляет на принтер команду конфигурации, которая остается эффективной при печати из Linux. Если я выключу и снова включу принтер, проблема снова появится при печати из Linux.
Мне кажется странным, что я не смог найти никакой информации, связанной с этой проблемой, хотя принтеры Zebra довольно популярны ... Я единственный, кто использует Linux для печати этикеток ;-)
К сожалению, CUPS не центрирует содержимое страницы за вас и не поддерживает настройку горизонтального смещения.
В старых принтерах Zebra этикетки располагались напротив левого края, но в более новых (например, gk420 или zd420) этикетки располагались по центру. CUPS предлагает настройку вертикального смещения (т.е. zeLabelTop
), но не для горизонтального смещения.
Однако горизонтальное смещение жестяная банка настраивается с помощью команды ZPL ^LS
. Это регулирует смещение по горизонтали для всех инструкций по печати, и настройка сохраняется до выключения принтера.
Это также причина, по которой он работает после печати в Windows. Вероятно, он устанавливает смещение, и вы не перезагружали принтер перед печатью в Linux.
До тех пор, пока CUPS не поддерживает настройку горизонтального смещения, печать сначала в Windows, а не перезапуск принтера является вашим единственным (возможным) вариантом.
Больше информации здесь: https://www.zebra.com/content/dam/zebra/manuals/printers/common/programming/zpl-zbi2-pm-en.pdf
Команда ^ LS обеспечивает совместимость с форматами принтеров Z-130, для которых задана меньшая, чем полная ширина этикетки. Он используется для смещения всех позиций полей влево, поэтому те же команды, что и на принтере Z-130 или Z-220, можно использовать на других принтерах Zebra.
...
Для обеспечения совместимости с существующими принтерами Zebra эта команда должна предшествовать первой команде ^ FS (разделитель полей). После того, как вы ввели команду ^ LS, настройка сохраняется до тех пор, пока вы не выключите принтер или не отправите на принтер новую команду ^ LS.
Я считаю, что это код CUPS, который конвертирует ваш документ в ZPL: https://github.com/apple/cups/blob/master/filter/rastertolabel.c