Portál AbcLinuxu, 30. dubna 2025 12:52
Už po druhé v životě řeším problém jak tisknout za využití příkazové řádky nějaké záznamy které načítám řekněme z databáze. Loni mi stačil jednoduchý textový výstup a tak jsem si vystačil s postupem - php script spuštěn wgetem, wget uloží výstup do txt souboru a předá řízení programu lp který soubor vytiskne. Teď bohužel potřebuji řešení které bude tisknout jednoduché formuláře - řekněme třeba něco na způsob faktury.
Zatím mám jeden postup který zdá se, je možná slepá ulička. Pomocí php vygeneruji HTML - používám základní elementy jako H1-H7, TABLE, BR, B, U, I, je to přesně dostačující pro moji potřebu a nevyžaduje to "moc práce navíc". Dále tento dokument pomocí html2ps převedu na postscript. Bohužel narazím na znakovou stránku kdež html2ps údajně nepodporuje české znakové stránky (preferuji UTF8). Dále pomocí gs -dSAFER -dNOPAUSE -sDEVICE=deskjet -sOutputFile=\|lpr thesis.ps vytisknu.
Bohužel, html2ps ale neumí české znaky a tak se ptám: Nemáte někdo lepší nápad jak z databáze tisknout jednoduché formuláře? (Potřebuji práci s velikostí písma, a pak tabulky nebo něco co je efektivně nahradí).
dík, Johny
Tiskni
Sdílej:
No nevím, ale asi bych volil šablonu v LaTeXu a do ní nasypal data z databáze. Vygenerování PS a vytištění už je obdobné.
htmldoc
ale ja bych sel rovnou do postsriptu, protoze pokud se to ma presne pozicovat na strance pak je html hrube nevhodny i za nejlepsich podminek.
"Reseni" s php skriptem nakopavanym z lokalu wgetem jsou s prominutim kryplovina. Podle slozitosti zadani muze byt resenim neco ve stylu mysql | awk | pdf | lp
nebo na narocnejsi veci nejaky ten perl ci python...
co třeba když tiskovej server jede na druhé straně města? za natem? nevím nikdy kd ybude online? Potřebuji prostě systém kdy si "tiskárna" sama bere podklady. Proč to komplikovat když výstup do HTML mám už fungující? Databáze není mysql, a navíc potřebuji trochu grafické uspořádání :D
co třeba když tiskovej server jede na druhé straně města? za natem? nevím nikdy kd ybude online?
lpr klient → lpr server → nespolehlivá síť → lpr server → tiskárna
pořád mi ale uniká výhoda oproti využití toho co už na serveru je. Report v PHP mám, nevím proč by toho mělo být jakkoliv výhodnější?
J.
Doporučuji http://www.reportlab.org/
Tohle je velmi obtížný problém. Co budete dělat, když vstupní údaje budou natolik dlouhé, že se na vyhrazené místo ve formuláři nevejdou? Budeme zmenšovat písmo? A jak se to vůbec naše aplikace dozví, že text vytekl z ohraničení?
Já jsem zkoušel udělat automatizovaný tisk obálek LaTeXem a byl to porod. Nakonec jsem přetékání vůbec neřešil. Ostatně požadavky České pošty na adresu (minimální velikost písma) a některé obálky s vyrohovanou oblastí představují snad neřešitelný problém.
Největší problém vidím, že neexistuje nástroj, který by uměl sazbu do pevně vymezeného bloku a který by si uměl přizpůsobit písmo (změnit velikost, srazit šířku nebo naproti tomu zachovat výšku řádku).
TeX se na tohle nehodí, protože ten natahuje akorát mezery, a když nevymyslí nic kloudného, tak prostě zlomí stránku.
HTML + CSS je na tom ještě hůře.
SVG neřeší přetečení.
FO je něco mezi TeXem a CSS.
% ... definice ...
\newbox\x\newdimen\sc\newcount\tmp
%
\def\zmensi#1#2{%
\font\f=csr12\setbox\x=\hbox{\f #1}% změřím si text výchozím písmem
\ifdim\wd\x>#2% pokud je moc velký ...
\sc=#2\tmp=\wd\x\divide\tmp by 1000\divide\sc by \tmp
% ... napočítám si potřebné zmenšení (tohle je poněkud fuj, neb TeX neumí
% neceločíselné dělení ...
\font\f=csr12 scaled \sc% a adekvátně zmenším font
\fi
\hbox to #2{\f #1\hss}}% no a nakonec ten text opravdu vysázím
%
% ... a použití ...
\noindent\zmensi{Kratky text}{5cm}\vrule
\noindent\zmensi{Vyrazne delsi dlouhy text, ktery se bude zmensovat}{5cm}\vrule
\bye
Podobný příklad jde najít třeba v Olšákově TeXbooku naruby (mimochodem výborná knížka, doporučuji).
Ohledně UTFka nevím, já jsme zatím spokojený s 8bit, ale každopádně analogický postup tomu výše půjde i v LaTeXu, jen ho bude třeba LaTeX-friendly obalit. :)
Tady (www.abclinuxu.cz/blog/Elliot/2008/6/php-plneni-sablony-a-jeji-tisk) jsem resil podobny problem. Nakonec jsem zvolil sablonu v ODT/ODS a plnil ji v PHP skriptu pomoci Smarty. Musim rict, ze elegance sama a pro muj ucel naprosto dokonale. Navic jde vypleny ODT rovnou prevest do PDF.
takže hotovo, super, dík za nápady
#!/bin/sh FILE=`date +%Y-%m-%d-%s` wget --user=XXXX --password=XXXX -q http://server.cz/soubor.php -O /home/tisk/$FILE.html && { htmldoc -t ps --no-toc --no-title --charset utf-8 /home/tisk/$FILE.html > /home/tisk/$FILE.html.ps lp -d PSC2570 /home/tisk/$FILE.html.ps }|| rm /home/tisk/$FILE.html
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.