Utskrift fra Billig

Billigs utskriftsarkitektur baserer seg i stor grad på PDF, ettersom dette er et åpent format det er relativt enkelt å finne generatorer for. Med «utskrift» menes her to ting:

Maler

Systemet er i prinsippet relativt fleksibel når det gjelder billettutseende; det støttes et arbitrært antall maler, og det er planlagt at forskjellige arrangementer kan bruke forskjellige maler. Inntil videre er det dog hardkodet hvilke males som bruker hvor.

Alle maler starter som en basis-PDF med riktig papirstørrelse; denne er fortrinnsvis definert av LIM e.l.. Deretter hentes posisjonsinformasjon ut av databasen (type «arrangementsnavnet skal stå på denne posisjonen på papiret»), og egnet tekst legges på for hver billett ved hjelp av Perl-modulen PDF::Reuse. Dette gjøres et sett funksjoner i Billig::Print som brukes av både billettskriverutskriften og hjemmebillettgenereringen.

Billettskrivere

For billettskriverne har vi valgt å legge så mye som mulig av logikken på serveren; dette sikrer oss mot rare problemer lokal konfigurasjon på skrivere o.l., samt gir oss (i hvert fall i teorien) mer fleksibilitet mht. valg av skrivere i framtiden. Med andre ord, alt av rasterisering og skriverbehandling ligger på cirkus, som konverterer PDFene til PPM og deretter videre til et rådataformat skriverne våre spiser.

Databasen har en minimal modell av skriverkøer, en for hver skriver (som også er definert i en tabell). Når en billettselger selger en billett eller på annen måte initierer en utskrift (se Billig web), genereres rådata som kan dyttes rett til skriveren, og dette legges i den aktuelle skriverkøen, hvor jobben venter på at noen plukker den opp.

På klientmaskinen (dvs. den maskinen som faktisk har skriveren tilkoblet, via USB) kjører det en spesiell utskriftsnisse ved navn winprint.exe (det finnes ingen native Linux-versjon foreløpig, med unntak av et Perl-script ved navn printd.pl som opprinnelig ble skrevet for testing). Denne er skrevet i C++ (kompilert vha. MinGW, dvs. gcc for Windows), og kobler rett til databasen (med libpqxx++) (Billig utskrift nisse). Her leter den etter nye jobber for den aktuelle utskriftskøen (alt etter hvilken skriver brukeren oppgir; skriverne har dessverre ikke noe unikt seriellnummer); når det kommer en ny, åpner den USB-printerporten og dumper rådataene direkte til skriveren, før den sletter jobben fra skriverkøen. (Dette gjør det helt unødvendig å installere noen form for utskriftsdriver på klienten – en USB-skriver uten driver i Windows «fanges» opp av usbprint.sys, som man kan koble til og skrive ut til med omtrentlig hundre linjer svart magi. I Linux er det tilsvarende bare å åpne /dev/usb/lp0, som krever ca. fem linjer...)

Utskriftsklienten poller ikke etter nye utskriftsjobber; den sjekker når den kobler til (eller bytter skriver), samt at den får et signal (via PostgreSQLs LISTEN/NOTIFY-system) hver gang det legges til en ny jobb i en av utskriftskøene.

Lenker: Start, billig, billig database, billig dave, billig generelt, billig kode

Epost: itk@samfundet.no | Telefon: 992 15 925 | Sist endret: 2010-02-27 15:43 | Revisjon: 5 (historie, blame) | Totalt: 1905 kB | Rediger