Utilisation de XSL-FO, CSS3 au lieu de CSS2 pour créer des documents paginés comme PDF?

il y a beaucoup de vieux textes, comme ce livre de 2002 , indiquant que nous devons utiliser" CSS for Web "et"XSL-FO for print". Je pense que dans today's (2012) nous pouvons, enfin, utiliser CSS avec des moteurs de rendu qui comprennent des supports de pagination de CSS2 et quelque chose de CSS3 ... Mais où sont les "nouveaux textes", le consensus des programmateurs, et l'investissement de soft houses?

XSL-FO ou "xsl Formatting Objects" (a W3C standard) était la technologie la plus souvent utilisée pour générer des documents PDF, du contenu XML ou XHTML. Version 1.1 de XSL-FO a été publié en 2006, 1.0 en 2001 .

CSS2.1 est de 2011, mais CSS2.0 est une norme de 1998, révisée en 2008... Je pense que les âges standards ne sont pas un problème. CSS avec HTML, XHTML ou XML ont "la puissance d'impression" : voir des outils comme PrinceXML , module d'impression WebKit (ou wkhtmltopdf ), ABCpdf et autres.

choisir entre CSS et XSL-FO : avec CSS2 vous pouvez ajuster le texte exactement à la page papier, etc. Ce n'est pas une question de pagination, de disposition de plusieurs colonnes, de notes de bas de page, d'en-têtes courants ou de marges d'une page... Les deux, CSS (paged media) et XSL-FO, sont de bonnes normes pour ce faire.

PS: il y a quelques questions/réponses connexes pour ce contexte, à propos de WebKit transform , conversion avec PHP et environ génération PDF de HTML . Personne avec une bonne réponse pour cette question présentée.

31
demandé sur Community 2012-05-17 22:43:35

5 réponses

Merci à tous les commentaires et les réponses!

maintenant, 2014, passé plus de 1,5 ans de mon post (17 mai 12), est le moment de consolider: aucune réponse était, pour moi, une "réponse complète", mais toutes les réponses (voir Nenotlep's et Alex's) contribué à former une grande image. Ma principale motivation maintenant, pour consolider, est le nouvelles de @mzjn (ici) du 2013-11.

XSL-FO est officiellement en train de mourir

Sur Sat, 2013-11-02, Liam R. E. Quin wrote : "Nous avons fermé le Groupe de Travail parce que pas assez de personnes y ont participé" , W3C XML de l'Activité a conduit, sur l'échec de XSL-FO 2.0 de la continuité. (voir un meilleure copie ici ).

la dernière mise à jour pour le projet de travail était en janvier 2012, et maintenant confirmé: W3C arrêter de développer XSL-2 .

pourquoi? Il sera remplacé par CSS3-page , voir ci-dessous.

PS: pour discuter de la "déclaration officielle", utilisez https://stackoverflow.com/a/21345449/287948

CSS3 est officiellement plus en plus

La norme CSS3-page est un projet, mais de nombreuses applications, comme PrinceXML v9 et AntennaHouse Formateur v6 démontre qu'il est prêt (!); et, le lancement prévu de HTML5 pour 2014 est conforme à la version prévue CSS3.

donc, je comprends que pour W3C, CSS3-page faire tout ce que nous avons besoin pour exprimer bonnes impressions et bonnes PDF .

autres motivations

un jour, dans un avenir lointain... PDF sera mort - il est complexe et ne fait pas partie de la XML de la famille ou du W3C investissements, et beaucoup prétendent que EPUB le remplacera. C'est une autre bonne motivation: les lecteurs de tablettes et les navigateurs PC imprimeront (HTML, XHTML et EPUB) ainsi que PDF. Donc PDF ne sera pas nécessaire... Et, pour ce jour, le seul besoin standard Pour, par exemple. Webkit printing project , sera le CSS3-page standard.

CSS3 est le point clé dans deux affaires stratégiques: 1) générer une bonne PDF contenu XML ou HTML; 2) remplacer le format PDF.


NOTE: les mises à jour de 2014 pour les liens de la question: wkHtmlToPDF est maintenant ici . À propos des" nouveaux textes", maintenant nous en avons beaucoup, voir l'exemple. Bâtiment Livres avec CSS3 .



une réponse mise à jour pour les programmeurs, pour la question de cette page, Pourquoi utiliser XSL-FO au lieu de CSS2, pour transformer HTML en bon PDF?

si vous allez plus loin et implémentez un nouveau système pour XML-Publishing , il n'y a aucune bonne raison d'utiliser XSL-FO . Résumé:

  • XSL-FO est morte de la technologie d'aujourd'hui, utilisé uniquement par des entreprises spécialisées, pour donner de la maintenance de systèmes hérités en grande publication des entreprises comme Elsevier... La plupart des auteurs/lecteurs de Stackoverflow sont de petites et moyennes entreprises. Des sociétés comme O'Reilly Media, Inc. utilisez déjà CSS3 pour imprimer .

  • CSS3 remplacera CSS2, couvrant toutes les lacunes (et les peurs comme @AlexS) de CSS2 .

  • aujourd'hui (2014), que vous pouvez consulter par Google ou mes liens (voir PrinceXML v9 et AntennaHouse Formatter v6), nous avons quelques bons logiciels pour rendre le contenu avec CSS2 ou CSS3 .

  • comme @bytebuster le dit," CSS is much easily to develop " (et plus facile à apprendre!).

  • comme je l'ai dit plus haut, CSS3 n'est pas isolé, c'est un morceau de la famille "XML/HTML/SVG".

  • est beaucoup moins cher à développer " HTML+CSS templates "(coût horaire d'un concepteur Web standard faisant une tâche simple), que" XSL-FO templates " (coût horaire d'un professionnel rare dans une tâche complexe).

  • ....



de Nouvelles...

Jan ' 2016, la norme CSS3 définitive arrive!

sur les standards W3C: l'ancienne "css-page" a été remplacé par "css-break", , et "paginé" médias à la "fragmentation" ... Maintenant c'est une recommandation Candidate, voir https://www.w3.org/TR/css-break-3

30
répondu Peter Krauss 2017-05-23 12:17:21

mise à jour le 01.10.2015

j'ai utilisé pour faire CSS à PDF (wkhtmltopdf) et XSL-FO à PDF et je préfère CSS, mais il ya beaucoup de problèmes avec elle. IMO le meilleur render CSS / HTML à PDF est wkhtmltopdf, mais il a des tonnes de problèmes comme les problèmes de qualité d'impression, les problèmes de rupture de page, la coloration CMYK, le positionnement exact et le rendu fullscreen.

exigences comme " déplacer cette boîte de 1,8 mm vers la droite et vers le haut pour qu'il touche le haut du papier" et "nous avons besoin de la dernière page pour être un tableau sans marge 100% large" sont à la fois tout à fait faisable en XSL-FO, mais dans CSS, Il est trop effrayant de même considérer. Dans certains cas, CSS ne coupe tout simplement pas comme bon logiciel pour le rendre n'existe pas, même si les étiquettes le font. Même wkhtmltopdf (0.11, pas sûr plus tard) utilise XSLT lors du rendu du TOC et ne supporte pas vraiment @page .

Je ne peux pas parler pour PrinceXML comme bien qu'il semble grand je sais à l'avance que l'étiquette de prix serait impossible donc ce n'est pas une option - je soupçonne que cela est vrai pour beaucoup de développeurs et d'entreprises.

S'il y avait un meilleur logiciel pour faire le rendu et plus d'utilisateur, je pense vraiment que CSS serait une meilleure option d'habitude car il est tellement plus agréable d'écrire (CSS et la source (x)html) et il ya des tonnes d'éditeurs là-bas. C'est un peu comme le vieux débat Linux vs Windows - IMO Linux est plus agréable à utiliser, mais manque de logiciel, d'expertise existante et de soutien qui est souvent nécessaire.

et pour faire écho aux commentaires, le matériel source est toujours un problème avec CSS. CSS for XML est un territoire un peu inexploré et à peu près TOUT PARTOUT est XML. Malheureusement. J'ai une aversion sévère pour le XML même s'il est pratiquement beaucoup plus utilisable que le (X)HTML.

9
répondu Nenotlep 2015-10-01 12:18:39

L'une des raisons possibles de miser sur CSS plutôt que sur XSL-FO à l'avenir est que le XML Print and Page Layout Working Group du W3C n'est plus actif. Il n'y avait pas assez d'intérêt pour soutenir ce groupe de travail. Le groupe a publié un XSL 2.0 working draft au début de 2012, mais il semble à présent assez peu probable qu'une recommandation mise à jour du W3C ne soit jamais apparue.

il y a un fil très récent sur la liste XSL liste de diffusion sur les raisons de la fermeture du groupe de travail et sur l'avenir de XSL-FO vs CSS. Voir http://markmail.org/thread/65j2ah2kulcp35fm .

et d'ailleurs, même si c'est un sujet intéressant, Je ne suis pas sûr si la question est un bon ajustement pour le débordement de la pile. IMHO, il s'agit plus d'une invitation ouverte à discuter de quelque chose plutôt qu'une question sur un problème spécifique, pratique, répondable .

4
répondu mzjn 2017-05-23 11:54:00

je suis d'accord avec certains de ce qui a été posté par @Nenotlep. Mais je ne suis pas sûr que le balisage CSS soit aussi étendu pour les documents paginés que XSL-FO. Mais je ne sais pas qui.

j'ai aussi ajouté cette partie à sa réponse parce que je n'ai pas pu" commenter " la réponse.

il y a de l'histoire dans toute cette affaire.

en outre, la richesse de XSL-FO et ses apprentissages & la courbe de gravure au cours des 10+ dernières années sur le FO rendering a eu tout un mandat pour régler "plus" de choses.

j'étais responsable de la validation de principe et du prototypage d'un système de contenu XML à l'échelle de l'entreprise pour un Fortune 20 en 2003.

L'une des pièces de ce système devait rendre PDF, Word, x/HTML des documents à la volée à mesure que les gens changeaient, ajoutaient et modifiaient le contenu XML.

même XSL-FO > PDF et à Word-ML avait un tas de problèmes de dentition à temps.

ceux-ci étaient inhérents en raison de la raison suivante:

  • d'Origine et de nouveaux objectifs et des capacités de l'annotation Et le Style des langues
  • Capacité Et Limites du Rendu Final Composant pour représenter avec précision le balisage (c'est à dire XSL-FO pour PDF Composant ou X/HTML pour Écran via un Navigateur Web)

cela fait 10 ans que je n'ai pas été souvent sur le terrain avec XSL-FO / HTML/ CSS mais les questions ci-dessus étaient intéressantes à discuter avec les dieux du monde XML / XSL à l'époque (Dave Pawson, Michael Kay, Wendell Piez etc.)

il est tout à fait possible que tout le markup représentatif que XSL-FO avait sur CSS pour la production paginée, est maintenant (2013) peut-être répliqué dans CSS3 et est rendu de manière appropriée.

j'espère que cela aidera.

2017 Edit:

apparemment CSS joue toujours rattrapage à certains égards et je me souviens avoir la plupart de ce en 2003 - qui est de 14 ans et dans web tech qui est une eon trop lent :) .

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

enter image description here

3
répondu Alex S 2017-10-08 17:17:29

autant que je sache, vous ne pouvez pas générer de cartes ou de codes à barres SVG avec CSS.

-3
répondu Anon 2012-07-13 12:18:27