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