Vanha otsikko: ”PHP - tulostin komennot”
Onko php:llä mitään komentoa, joka antaa viestin tulostimelle milloin vaihtaa paperin. Vai tuleeko tulostusalueen koko huomioida itse, ja määrittää loppualue vaikka tyhjäksi.
Mitä olet tekemässä?
Eli jos olet tekemässä ihan nettisivua, niin php ei pääse käyttäjän tulostimeen käsiksi, mutta sen sijaan css:llä voit tehdä joitain print-määrityksiä, jotka toimivat tai ei toimi riippuen käyttäjän käyttämästä selaimesta.
http://davidwalsh.name/css-page-breaks
Jos taas on jokin "sisäinen php-skripti", jolla hallitset kotisi laitteita, niin tämmöiselle varmaan on tehtävissä erilaisia tulostinkikkareita.
Laskutussovellusta, ja haluaisin saada laskut katkeamaan halutusta kohtaa. Näin useamman laskun saisi samalle näkyvyydelle ja tulostus onnistuisi erillisille paperille.
Tuo näyttäysi lupaavalta, joten kokeilen sitä.
Jos laskut on pääsääntöisesti tarkoitus tulostaa paperille, niin yksi vaihtoehto voisi olla muodostaa PDF:ää, joka sitten tulostetaan. Silloin tarkkaan asemointiin paperilla on paremmat mahdollisuudet kuin HTML:ssä. HTML:ssä vaikuttaa myös esim. selaimen marginaaliasetukset (korjatkaa jos olen väärässä).
Lisäksi PDF:iä voi lähettää suoraan esimerkiksi postituspalveluille.
Olen itse paininut vastaavien ongelmien parissa ja todennut että PDF on vain osa ratkaisua. Ensinnäkin PDF:n tulostamisen tuottamaan lopulliseen paperilla olevaan ulkoasuun vaikuttaa moni asia joihin PDF:n tuottaja ei välttämättä voi vaikuttaa (esim. minkälaista tulostinta käytetään, kuinka lähelle paperin reunoja tulostin pystyy tulostamaan, minkälaiset zoomausasetukset on päällä siinä ohjelmassa jota käytetään PDF:n tulostamiseen, paperin koko, paperinkokoasetukset jne jne).
Toinen isompi asia on se miten se PDF tuotetaan PHP-koodissa. Tähänkin on useita oleellisesti toisistaan poikkeavia menetelmiä. Jos esim käytetään kirjastoja tai ohjelmia, jotka selaimen tapaan rendaavat html- ja css-määrittelyt PDF-dokumentiksi, alkuperäinen ongelma ei oikeastaan poistu mihinkään vaan silloinkin törmätään html:n ja css:n ominaisuuksiin ja rajoituksiin sivun ulkoasun kuvauksessa. Perinteisestihän noilla kielillä on kuvattu ulkoasua, joissa tilaa on vertikaalisuunnassa äärettömästi ja käsite useammasta sivusta on vieras tai huonosti tuettu.
On myös kirjastoja, kuten vaikka fpdf, joilla voi yrittää tuottaa pikselintarkasti suoraan PDF:ää. Näissä on paremmin ominaisuuksia sivutuksen hallintaan, mutta ongelmaksi muodostuu usein vaihtuvankokoiset sisällöt, kun ulkoasua ei olekaan määritely enää suhteellisesti.
Sitten on vielä XSL-FO joka on nimenomaan sivunkuvauskieli, mutta jonka logiikka on lähempänä CSS:ällä tehtävää suhteellista toittoa kuin pikselitaittoa. XSL-FO:ssa on monipuoliset ominaisuudet sivukäsitteen ja sivutuksen hallintaan. Itse en ole käyttänyt FO:ta moneen vuoteen joten en tiedä miten hyvin se on tuettu eri ohjelmistojen puolesta nykyään. Aikoinaan oli Apachen FOP ja RenderX:in XEP -kirjastot joilla Fo-dokumentit pystyi muuntamaan PDF:ksi palvelinpuolella.
Itse käytän toistaiseksi ensimmäistä menetelmää eli teen dokumenttien ulkoasun HTML:llä ja CSS:llä ja käytän wkhtmltopdf:ää niiden muuttamiseen PDF:ksi palvelimella. Olen kuitenkin harkinnut tuon XSL-FO:n nykytilanteen tarkistamista ja siihen siirtymistä kun vaatimukset sivutuksen hallintaan mutkistuvat.
Css:hän on tavallisesti nimenomaan pikselitaittoa. Tyylittelyä voinee helpottaa käyttämällä milli- tai senttimetrejä mittayksiköinä, jolloin voi katsoa halutun paperikoon mitat ja laatia tyylit niiden mukaan.
The Alchemist kirjoitti:
Css:hän on tavallisesti nimenomaan pikselitaittoa.
Mielestäni harvemmin, varsinkin jos puhutaan elementtien sijainnista suhteessa sivuun/ikkunaan (eng. viewport) ja erityisesti vertikaalisesta sijainnista. Itse ainkain pyrin tavallisesti välttämään tätä.
The Alchemist kirjoitti:
Tyylittelyä voinee helpottaa käyttämällä milli- tai senttimetrejä mittayksiköinä, jolloin voi katsoa halutun paperikoon mitat ja laatia tyylit niiden mukaan.
Saattaa auttaa mikäli dokumentissa on ainoastaa yksi sivu. Useampisivuisten dokumenttien tapauksessa CSS:stä loppuu aika pian ominaisuudet tai ominaisuuksilta tuki.
Eräs mahdollisuus on tuottaa PHP:n avulla LaTeX-koodia, joka käännetään pdflatex-ohjelman avulla pdf-tiedostoksi. Tätä menetelmää on käytetty onnistuneesti ainakin Datatähden loppukilpailussa diplomien tulostamiseen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.