[ boky84 @ 23.10.2013. 14:37 ] @
Postovani,

imam PHP web aplikaciju pomocu koje skladistim podatke koji se koriste za stampanje na odredjenim obrascima. Podatke cuvam u MySQL bazi podataka i model baze je modelovan tako da jednim slozenijim upitom mogu da dobavim sve ono sto treba da stampam na jednom obrascu.

Ono sto mi pravi problem jeste stroga struktura obrasca jer to su vec gotovi dokumenti na kojima ja samo treba da ispisem odredjene podatke, tj. na tacno odredjenim pozicijama dokumenta treba da se nadje tacno odredjen podatak.

Npr. kao kada bih programski hteo da stampam sadrzaj opste uplatnice. Na uplatnici se zna tacno koliko je koje polje veliko i samo u njega treba da se upise npr. broj ziro racuna.

Ono sto otezava posao jeste cinjenica da su obrasci takvog tipa da mi je cesto neophodna preciznost na nivou milimetra.

Ono sto sam ja pokusao da implementiram jeste da izgenerisem word dokument i da njega stampam. Medjutim, problem nastaje sa marginama i cesto imam situaciju da stringovi nisu na svom mestu i budu pomereni gore/dole ili levo/desno. Ne mogu nikako da implementiram resenje koje ce generisati .doc ili .docx ciji sadrzaj ce biti na tacno odredjenim pozicijama. Bitno mi je da bude bas .doc ili .docx, a ne neki drugi format (PDF i sl.).

Pokusao sam da koristim neke gotove biblioteke (PHPWord itd.) ali nisam uspeo sa njima da ostvarim zeljeni efekat. Takodje, pokusao sam da dinamicki generisem html kod, pa da njega export-ujem u .docx i onda njega da stampam. Medjutim, ni to nije imalo efekta jer neka podesavanja koja sam postavio u html-u (paddings, margine, div-ovi) se ne zadrze uvek u .docx-u.

Da li neko ima ideju kako bih mogao da resim problem? Znaci, ne treba mi gotovo resenje nego samo smernica koju tehniku da iskoristim za resavanje problema ovog tipa.

Unapred hvala.
[ ivan.a @ 23.10.2013. 18:02 ] @
Možeš li da obrazac koristiš kao pozadinu (možda kao pozadinsku sliku), a dodavanje vrednosti i teksta uz pomoć html, css, javascript.
Na primer:
https://github.com/jonathantneal/html5-invoice
Test:
http://www.jonathantneal.com/examples/invoice/

Ovo je možda bitno za print. U css-u se koristi:
-webkit-print-color-adjust
@page - normalizovanje margina

Code:
@page { margin: 0; }
[ dusans @ 23.10.2013. 18:36 ] @
Zašto ne bi probao obrnutim pristupom, umesto da generišeš ceo Docx iz koda/html-a,
napraviš u Word-u valjan obrazac i postaviš sve u milimetar - tabele za layout ili
šta god treba da bi dobio valjan rezultat, tj. dokument koji se ne raspada.
U samom dokumentu, umesto podataka staviš npr. [*BrojRacuna*], [*Adresa*], itd...

Onda uzmeš takav Docx i otpakuješ ga - videćeš da se sastoji od hrpe xml-ova. Document.xml fajl sadrži tvoj dokument.
U kodu, učitaš ovaj fajl i uradiš replace [*BrojRacuna*] sa stvarnim podatkom (xml ecoded!), [*Adresa*] sa stvarnom adresom (xml ecoded!), itd...
U kodu, zip-uješ novi Document.xml zajedno sa ostalim fajlovima u neki novi Docx i to je to.

Ovo pije vode za jednostave stvari, gde je uglavnom sve fiksirano i nema puno dinamike.
Pogledaj da li ti odgovara i Word-ov xml format umesto docx-a, tu je onda još prostije, nema zip-ovanja, sve je u jednom fajlu.

Pozdrav!
[ djordjevic_i @ 23.10.2013. 20:38 ] @
Mislim da ti je najbezbolnije da koristis neku gotovu biblioteku, tipa:
http://phpword.codeplex.com/
[ agvozden @ 24.10.2013. 09:12 ] @
ja bih to radio sa pdf-om.

postoje klase koje mogu da uvuku postojeci pdf(templejt) da u njega ubacis potrebne podatke i eksportujes drugi pdf.
[ valjan @ 24.10.2013. 09:40 ] @
Ako je neko stara škola web dizajna, onda je Excel mnogo prikladniji za "prelom", a razlog su tabele - jeste da su razvojem CSS-a postale omražene, ali je nekad samo uz pomoć tabela mogao da se pravilno odradi raspored elemenata na stranici. A koji softver je bolji za igrarije sa tabelama od Excela - mogu se vrlo precizno postaviti dimenzije ćelija i njihov položaj na papiru, a kao što reče @dusans, savremene verzije Office aplikacija generišu XML dokumente, tako da se sve to na kraju može nafilovati podacima iz PHP-a...
[ dsivic @ 24.10.2013. 16:53 ] @
najbolje je TCPDF, sa Multicell() možeš sve da pozicioniraš gdje želiš, ja sam printao samoljepljive deklaracije raznih dimenzija, sve u milimetar...
[ peromalosutra @ 24.10.2013. 18:44 ] @
Jos jedan glas za PDF. Sa TCPDF bibliotekom mozes da odaberes milimetre za jedinicu i onda sve radis sa milimetarskom preciznoscu, bas kako ti i treba.
[ boky84 @ 25.10.2013. 09:21 ] @
Analizirao sam svaki od izlozenih resenja i opredelio sam se za TCPDF jer ima dobre mogucnosti za veoam suptilna podesavanja. Jeste da mi vise odgovra .doc ili .docx zato sto bi u tom slucaju korisnik rucno mogao nesto da ispravim u dokumentu ukoliko nije dobar neki podatak. Ali s druge strane, posto je .pdf u pitanju, onemugucavam korisnika da bilo sta menja u dokumentu, sto i nije tako lose.

Hvala svima na odgovorima i predlozima, veoma mnogo ste pomogli. :)
[ dsivic @ 25.10.2013. 10:04 ] @
mora se napomenuti da i sam printer igra veliku ulogu, neki "jako" povlače papir i napravi problem.

[Ovu poruku je menjao dsivic dana 25.10.2013. u 17:13 GMT+1]
[ boky84 @ 25.10.2013. 10:24 ] @
Generalno, to je problem vec do stapmanja, a ne do same tehnike kako se generise dokument. Sva sreca, pa ovaj stampaca na kome ce biti stampani dokumenti normalno uvlaci papir, ne "usisava" ga, da tako kazem. :D
[ agvozden @ 26.10.2013. 11:27 ] @
ima jos jedan nacin, mozda i najbolji.

podrazumeva da stampac bude prikaljucen na unix/linux, a moze i na dow/win uz odredjene modifikacije.

a to je da se text salje direktno na port stampaca. u ux sistemima se moze lako napisati drajver da podrzi ovakve stvari, a tekst se moze prihvatiti kroz skoro svaki interfejs (samba. ftp). Nisam nikada radio kroz http, ali pretpostavljam da se i to moze lako napisati.

prednost je sto dobijes generisani txt fajl i to sibnes na stampac. tako smo ranije stampali uplatnice, resenja, dostavnice na linijskim stampacima.
[ boky84 @ 28.10.2013. 08:05 ] @
Zvuci kao dobar predlog, vredelo bi se time pozabaviti, makar iz entuzijazma. :) Ja sam sada ogranicen vremenom, pa ne mogu sada da isprobavam, ali mozda nekome bude od koristi ideja.
[ valjan @ 28.10.2013. 09:22 ] @
Ovo sa raw/txt modom će teško funckionisati na savremenim printerima i Win sistemima. Na tržištu je danas previše Win only štampača koji nemaju ni pravu podršku za PCL ili PS, a druga stvar je da savremeni Windows sistemi ne podržavaju RAW format fajlova za štampu, tako da ovo uglavnom može da se primeni samo na Linux/Unix sistemima ili prastarim Windowsima. A sećam se i ja vremena kad smo iz Clippera štampali personalizovane uplatnice baš na taj način...