Portál AbcLinuxu, 25. dubna 2024 10:50

Bezobslužný tisk dat z databáze

13.1.2009 12:59 | Přečteno: 1154× | Linux - readonly debian pro routery

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

       

Hodnocení: 75 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

13.1.2009 13:14 myšák | skóre: 26 | blog: EmentuX | Ostrava
Rozbalit Rozbalit vše Re: Bezobslužný tisk dat z databáze
Odpovědět | Sbalit | Link | Blokovat | Admin

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é.

Je nesmírně těžké být idiotem, konkurence je obrovská...
frEon avatar 13.1.2009 19:30 frEon | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: Bezobslužný tisk dat z databáze
Taky bych to rval rovnou do LaTeXove sablony. Jednoduche a rychle...
Talking about music is like dancing to architecture.
13.1.2009 13:16 Zdenek
Rozbalit Rozbalit vše Re: Bezobslužný tisk dat z databáze
Odpovědět | Sbalit | Link | Blokovat | Admin
Pomoci php generujte rovnou ps nebo pdf :-)
13.1.2009 13:50 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Bezobslužný tisk dat z databáze
Odpovědět | Sbalit | Link | Blokovat | Admin
LaTeX nebo XML-FO (např. Apache FOP). Nebo PS nebo PDF můžete generovat rovnou :-)
rADOn avatar 13.1.2009 14:38 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Bezobslužný tisk dat z databáze
Odpovědět | Sbalit | Link | Blokovat | Admin
XSL-FO je skvela vec ale na spoustu veci je to kanon na vrabce. Prinejmensim proto ze jedina me znama implementace je v Jave coz je kanon na praci s jakymkoliv textem.

Udelat z html tisknutelny PDFko jde treba pomoci filtru 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...
"2^24 comments ought to be enough for anyone" -- CmdrTaco
13.1.2009 15:22 michal00 | skóre: 14 | blog: OpenStreetMap
Rozbalit Rozbalit vše Re: Bezobslužný tisk dat z databáze
oproti xsl-fo sa dá použiť ešte jade/openjade, starší ale hodne rýchlejší, 10 stránkové dokumenty mi robí na serveri vcelku svižne.
Johny z Podoli avatar 13.1.2009 22:18 Johny z Podoli | skóre: 26 | blog: rocfdebian
Rozbalit Rozbalit vše Re: Bezobslužný tisk dat z databáze

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

Můj web o táborech: Letní dětské tábory, Hudební tábor , Můj nový blog na Nul.cz
14.1.2009 12:59 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Bezobslužný tisk dat z databáze
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

Johny z Podoli avatar 14.1.2009 13:02 Johny z Podoli | skóre: 26 | blog: rocfdebian
Rozbalit Rozbalit vše Re: Bezobslužný tisk dat z databáze

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.

Můj web o táborech: Letní dětské tábory, Hudební tábor , Můj nový blog na Nul.cz
14.1.2009 13:16 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Bezobslužný tisk dat z databáze
Reagoval jsem na nedostupnost tiskového serveru.
Jiří P. avatar 13.1.2009 15:08 Jiří P. | skóre: 24 | blog: programování
Rozbalit Rozbalit vše Re: Bezobslužný tisk dat z databáze
Odpovědět | Sbalit | Link | Blokovat | Admin

Doporučuji http://www.reportlab.org/

In a world without fences and walls, who needs Gates and Windows?
13.1.2009 16:17 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Bezobslužný tisk dat z databáze
Dobrý. Umí to ohlásit chybu nebo srazit text, když se nevejde do rámce, umí to UTF-8, neumí to samo o sobě dělení slov (ale existují k tomu dodatečné knihovny) a neumí to z TTF fontů používat slitky.
13.1.2009 15:09 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Bezobslužný tisk dat z databáze
Odpovědět | Sbalit | Link | Blokovat | Admin

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.

13.1.2009 21:25 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: Bezobslužný tisk dat z databáze
Je to sice na jednu stranu šílenost, ale TeX JE programovací jazyk (být informatik, asi bych řekl něco jako turingovsky úplný, ale mě tyhle nadávky nikdo neučil :). Tudíž se v něm dá (například) změřit přirozená délka či výška bloku ještě před jeho skutečným vysázením a na základě výsledku pak třeba měnit velikost písma. Netvrdím, že je to na složitější konstrukce ideální, ale pokud by mi šlo o pěkně vypadající stránku a řešil bych třeba jen jednostupňové zmenšení písma v případě potřeby, tak to jde pomocí TeXu stále velmi dobře.
13.1.2009 21:53 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Bezobslužný tisk dat z databáze
Taky jsem to slyšel, ale ještě jsem nezjistil, jak na to. Respektive umím udělat box dlouhý jako nějaký text nebo udělat jej bez posunu „kurzoru" (ale pak nefunguje zalamování), ale tím to končí. Nehledě na to, že pro čistý TeX jsem nenašel knihovny pro přeprogramování kategorií tak, aby to žralo UTF-8 (pravda, moc jsem po tom nepátral).
13.1.2009 22:26 Marble | skóre: 27 | blog: marble
Rozbalit Rozbalit vše Re: Bezobslužný tisk dat z databáze
No v LaTeXu by mělo jít v principu totéž, co v plainu, nicméně LaTeX nepoužívám, takže ukázka bude "plainová". Tady je jednoduchý příklad makra, co zmenší písmo, pokud se nevejde do dané šířky:
% ... 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. :)
13.1.2009 17:26 vlanav | skóre: 24 | blog: Dlouhý den
Rozbalit Rozbalit vše Re: Bezobslužný tisk dat z databáze
Odpovědět | Sbalit | Link | Blokovat | Admin
já používám HTMLDOC hlavně kvůli bezproblémové češtině a hezkým tabulkám. Umí generovat i .ps, ale já používám .pdf
13.1.2009 17:53 ZAH | skóre: 43 | blog: ZAH
Rozbalit Rozbalit vše Re: Bezobslužný tisk dat z databáze
Odpovědět | Sbalit | Link | Blokovat | Admin
Řešil jsem to jednou pomocí JasperReport a jeho návrháře iReport. Někomu může vadit Java, ale jinak na složité sestavy ideální. Možno tisk , uložení do několika formátů včetně pdf.
13.1.2009 19:35 pasmen | skóre: 45 | blog: glob | Praha
Rozbalit Rozbalit vše Re: Bezobslužný tisk dat z databáze
Odpovědět | Sbalit | Link | Blokovat | Admin

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.

Johny z Podoli avatar 13.1.2009 22:21 Johny z Podoli | skóre: 26 | blog: rocfdebian
Rozbalit Rozbalit vše Re: Bezobslužný tisk dat z databáze
Odpovědět | Sbalit | Link | Blokovat | Admin

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
Můj web o táborech: Letní dětské tábory, Hudební tábor , Můj nový blog na Nul.cz

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.