Utilizzo di XSL-FO, CSS3 anziché CSS2 per creare documenti impaginati come PDF?

Ci sono molti vecchi testi, come questo libro del 2002 , in cui si afferma che dobbiamo usare “CSS per Web” e “XSL-FO per stampa”. Penso che al giorno d’oggi (2012) possiamo, finalmente, usare i CSS con i motori di rendering che capiscono i media pagati dei CSS2 e qualcosa dei CSS3 … Ma dove i “nuovi testi”, il consenso dei programmatori e l’investimento dei softhouse?

XSL-FO o “XSL Formatting Objects” (uno standard W3C) era la tecnologia più utilizzata per generare documenti PDF, da contenuti XML o XHTML. La versione 1.1 di XSL-FO è stata pubblicata nel 2006, 1.0 nel 2001 .

CSS2.1 è del 2011, ma CSS2.0 è uno standard del 1998, rivisto nel 2008 … Penso che le età standard non siano un problema. I CSS con HTML, XHTML o XML hanno “il potere della stampa” : vedi strumenti come PrinceXML , modulo di stampa WebKit (o wkhtmltopdf ), ABCpdf e altri.

Scegliere tra CSS e XSL-FO : con CSS2 puoi adattare il testo esattamente alla pagina di carta, ecc. Non si tratta di impaginazione, layout di colonne multiple, note a piè di pagina, intestazioni in esecuzione o margini di una pagina … Entrambi, CSS (media paginato) e XSL-FO, sono buoni standard per farlo.

PS: ci sono alcune domande / risposte relative a questo contesto, sulla trasformazione del webkit , sulla conversione con PHP e sul PDF di generazione da HTML . Nessuno con una buona risposta per questa domanda presentata.

    Aggiornato al 01.10.2015

    Ho usato CSS in PDF (wkhtmltopdf) e XSL-FO in PDF e preferisco i CSS, ma ci sono molti problemi con esso. IMO il miglior renderer CSS / HTML in PDF è wkhtmltopdf, ma ha un sacco di problemi come problemi di materiale di qualità di stampa, problemi di pagina, colorazione CMYK, posizionamento esatto e rendering a schermo intero.

    Requisiti come “sposta quella casella di 1,8 mm a destra e in alto in modo che tocchi la parte superiore del foglio” e “abbiamo bisogno che l’ultima pagina sia un tavolo senza margini al 100%” sono entrambi abbastanza fattibili in XSL-FO ma in CSS è troppo spaventoso persino da considerare. In alcuni casi, il CSS semplicemente non lo taglia come software abbastanza buono da renderlo inesistente anche se i tag lo fanno. Anche wkhtmltopdf (0.11, non sono sicuro di più avanti) usa XSLT quando esegue il rendering del sumrio e in realtà non supporta @page .

    Non posso parlare per PrinceXML come se fosse bello sapere in anticipo che il prezzo sarebbe imansible, quindi non è un’opzione – sospetto che questo sia vero per molti sviluppatori e aziende.

    Se ci fosse un software migliore per il rendering e più utenti, penso davvero che il CSS sarebbe di solito un’opzione migliore dato che è molto più bello scrivere (sia css che source (x) html) e ci sono un sacco di editor là fuori. È un po ‘come il vecchio dibattito tra Linux e Windows – IMO Linux è più bello da usare ma manca del software, dell’esperienza e del supporto esistenti che è spesso richiesto.

    E per echeggiare i commenti, il materiale sorgente è sempre un problema con i CSS. Il CSS per XML è un territorio un po ‘inesplorato e praticamente tutto è ovunque XML. Purtroppo. Ho una grave avversione per XML anche se è praticamente molto più utilizzabile di (X) HTML.

    Una ansible ragione per fare affidamento su CSS piuttosto che su XSL-FO in futuro è che il gruppo di lavoro XML Print e Page Layout al W3C non sia più attivo. Non c’era abbastanza interesse per sostenere questo gruppo di lavoro. Il gruppo ha pubblicato una bozza di lavoro XSL 2.0 all’inizio del 2012, ma ora sembra abbastanza improbabile che una raccomandazione aggiornata del W3C possa mai emergere.

    C’è una discussione molto recente sulla mailing list XSL-List sui motivi per la chiusura del gruppo di lavoro e sul futuro di XSL-FO contro CSS. Vedi http://markmail.org/thread/65j2ah2kulcp35fm .

    E a proposito, anche se questo è un argomento interessante, non sono sicuro che la domanda sia adatta per Stack Overflow. IMHO, si tratta più di un invito a tempo indeterminato per discutere di qualcosa piuttosto che di una domanda su un problema specifico, pratico e risolvibile .

    Sono d’accordo con alcuni di ciò che è stato pubblicato da @Nenotlep. Ma non sono sicuro che la marcatura CSS sia ancora estesa per i documenti impaginati come XSL-FO. Ma non lo saprei.

    Ho anche aggiunto questa parte alla sua risposta perché non ero in grado di “commentare” la risposta.

    C’è un po ‘di storia per l’intera questione.

    Inoltre, la ricchezza di XSL-FO e le sue conoscenze e la curva di burn-in negli ultimi 10 anni sul rendering di FO hanno avuto un certo grado di ottenere “più” cose appianate.

    Ero responsabile della dimostrazione del concetto e della prototipazione di un sistema correlato al contenuto XML aziendale per una Fortune 20 nel 2003.

    Uno dei pezzi di quel sistema doveva rendere al volo le versioni PDF, Word, X / HTML dei documenti mentre le persone cambiavano, aggiungevano e modificavano il contenuto XML.

    Persino XSL-FO> PDF e Word-ML hanno avuto un sacco di problemi iniziali all’epoca.

    Questi erano inerenti al motivo seguente:

    • Obiettivi e funzionalità originali e nuovi dei linguaggi Markup & Styling
    • Capacità e limiti del componente di rendering finale per rappresentare con precisione il dato markup (cioè XSL-FO in PDF o X / HTML in schermo tramite browser Web)

    Sono passati 10 anni da quando mi occupavo spesso di XSL-FO / HTML / CSS, ma i problemi di cui sopra erano interessanti da discutere con il mondo Gods of XML / XSL (Dave Pawson, Michael Kay, Wendell Piez ecc. )

    È del tutto ansible che tutti i markup rappresentativi di XSL-FO rispetto a CSS per l’output impaginato, siano ora (2013) probabilmente replicati nei CSS3 e resi in modo appropriato.

    Spero che aiuti.

    2017 Modifica:

    A quanto pare, i CSS stanno ancora recuperando terreno in qualche modo e mi ricordo di aver avuto la maggior parte di questo nel 2003 – Sono 14 anni e nel web tech è un eone troppo lento :).

    https://twitter.com/t_machine_org/status/917025348646199297

    inserisci la descrizione dell'immagine qui

    Per quanto ne so non puoi generare grafici SVG o codici a barre SVG con CSS.