XHTML2, CSS3 och PDF
fredag, december 21st, 2007Tidigare frågade jag runt vilket som var det bästa sättet att skapa PDF från nån typ av strukturerad XML-data. De svar jag fick från olika håll pekade på att köra det gen om en CSS3-kapabel layoutmotor vore lämpligt. Så jag har ägnat lite tid åt att trimma in ett stylesheet anpassat för lagtext uttryckt XHTML2 tillsammans med metadata från ESFR-vokabulären.
Som testobjekt använde jag den lagtext som utgör kursfordran för förvaltningsrätt, dvs den kurs jag läser för närvarande. Tidigare har ett förlag tryckt upp en särskild författningssamling för detta ämne, men på introduktionsföreläsningen nämndes att detta inte skulle göras i år, då kostnaden för att ta fram uppdaterade tryckorginal för varje kursstart var för stor (kursen går två gånger om året).
Nu har jag ett automatiserat publiceringsflöde, som utgående från en huvudfil, uttryckt i XHTML2, och en samling lagtexter, också uttryckt i XHTML2, genererar en sammmanslagen fil. Denna innehåller alla författningar (eller delar därav) som huvudfilen hänvisar till genom XInclude/XPointer. Från den sammanslagna filen och ett CSS3-stylesheet skapas sen en PDF. Första steget görs med xmllint –xinclude, andra med Prince. Kostnad för att ta fram uppdaterade tryckoriginal: i princip noll.
Resultat: enkelspaltig (css), dubbelspaltig (css).
Några saker att lägga märke till:
- Innehållsförteckningen har korrekta sidnummerhänvisningar
- Sidhuvudet visar var och i vilken lag man befinner sig på (och växlar utseende beroende på om det är en kapitelindelad lag eller inte)
- Huvudfilen anger vilka förkortningar som ska användas för aktuell lag i sidhuvudet
- Höger- och vänstersidor ser olika ut (precis som i riktiga böcker!)
- Avstavning sker automatiskt efter svenska regler
- PDF-bokmärkena ger en hierarkisk översikt över hela filen
- Det går att inkludera bara enstaka kapitel (eller andra avsnitt) från en lag
Det finns förstås mycket kvar att fixa (kolla exv SekrL 16 kap - inte många rätt i formatteringen där), och även mer att skriva om hur man kan använda CSS3 och Prince XML, men det får bli efter julen.