Portál AbcLinuxu, 7. listopadu 2025 09:13
)
Tady k těm potvorám je totiž dostupná dokumentace, která říká, jaké esc sekvence se mají poslat, aby to něco někde vytisklo. Tiskárna sama o sobě má několik fontů, umí sama vygenerovat různé typy barcode, umí tisknout obrázky (bitmapy). Většina tiskových ovladačů prostě vygeneruje bitmapu a tu tam pošle, dělají to i ty speciální programy zmíněné výše. Tisková úloha tak většinou sestává z hlavičky, která obsahuje všechna nastavení (velikost papíru, okraje, počet kopií, "darkness", typ senzoru, zpětný posun...) a pak jsou data - texty a obrázky.
První zádrhel je v tom, že dokumentace sice obsahuje vysvětlení všech možných příkazů, ale je toho tolik, že člověk neví, co do té hlavičky teda dát. Tady se mi nejvíc osvědčila metoda - nastav si tiskárnu ve Windows, nadesignuj si etiketu v nějakém tom superprogramu pro Windows, pošli ji vytisknout a přesměruj tiskovou úlohu do souboru. Hlavičku / patičku je pak možno "vykrást" z tohoto majstrštyku - bývá to cca 10 příkazů, zpětným studiem dokumentace se dá přijít i na to, co to dělá.
Pak následuje design samotného "těla" - je možno jít přes studium nastavení fontů a různých typů barcode, nebo varianta "total bitmap", kdy prostě přes celou etiketu plácnu jednu bitmapu (ghostscript je náš kamarád
). Jenom bych upozornil, že pokud se člověk vydá první cestou, tak už nikdy "ů" nevytiskne.
Jak teda vypadá taková tisková úloha pro Sato? Asi takto:
#!/usr/bin/perl
#
# Hlavicka
#
print "\e##1\x02\n";
print "\eA\eEX0\eAR\eA3H150V001\n";
print "\eCS3\e#E5\eA104801081\eZ\x03C\n";
print "\e##5\x02B\eA\n";
print "\ePS\e\%0\n";
#
# Levy sloupec
#
print "\eV50\eH00\eL0202\eWB1" . <>;
print "\eV120\eH00\eL0101\eWB1Product ID:\n";
my $text = <>; chomp $text;
print "\eV150\eH00\eB103100*$text*\n";
print "\eV255\eH125\eL0101\eWB1$text\n";
print "\eV290\eH00\eL0101\eWB1Production order no:\n";
$text = <>; chomp $text;
print "\eV320\eH00\eB103100*$text*\n";
print "\eV425\eH125\eL0101\eWB1$text\n";
#
# Pravy sloupec
#
print "\eV50\eH450\eL0101\eWB1" . <>;
print "\eV90\eH450\eL0101\eWB1Size: " . <>;
$text = <>; chomp $text;
print "\eV130\eH450\eL0101\eWB1Power: $text W\n";
$text = <>; chomp $text;
print "\eV170\eH450\eL0101\eWB1Weight: $text kg\n";
print "\eV220\eH450\eGM";
printf ("%05d,", -s "/u/abas/data/win/ovw/ce_logo.bmp");
open PIC, "/u/abas/data/win/ovw/ce_logo.bmp";
binmode PIC;
while (< PIC >) {print}
print "\eV220\eH620\eL0303\eWB1IP44";
print "\eV350\eH720\eGM";
printf ("%05d,", -s "/u/abas/data/win/ovw/company_logo.bmp");
open PIC, "/u/abas/data/win/ovw/company_logo.bmp";
binmode PIC;
while (< PIC >) {print}
#
# Paticka
#
print "\e~A1\eQ" . <> . "\eCL0\eZ\x03\n";
Tiskneme pak pomocí něčeho jako:
./label data | lpr -PqcZebra by vypadala podobně, jenom má jiné příkazy. Co se týká připojení tiskárny, tady ty potvory mají často paralelní nebo sériový port, zbytek je "optional". Důrazně doporučuji koupit k nim síťovou kartu, pokud není, veškeré problémy vyřeší printserver za 1000Kč. Nikdy to nepřipojujte k PC s Windows a nesdílejte přes Sambu! Ne že by to nefungovalo, ale... No to nebudu vysvětlovat, na to si každý přijde sám.
No a ještě tady mám jeden takový tiskařský oříšek.
Byl jsem postaven před problém, jak vytisknout na štítky výkresy výrobku. Nic složitého říkáte si, ale výkresy jsou většinou hodně veliké, když je člověk převede do bitmapy a zmenší, tenké čáry prostě zmizí. Copak asi udělá toto?
convert -resize 5000x5000 -blur 30 -black-threshold 99% -resize 500x500 -black-threshold 90%Závěrem bych popřál hodně zdaru a šťastně vytištěných štítků na všechny ty fantastické produkty, co se tady vyrábí!
Tiskni
Sdílej:
Díkes moc!
find . -name *.pdf -exec sh -c 'lpr -Plp$(( $RANDOM%5 )) {}' \;
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.