version abrégée :
Dans la situation la plus générale, pas de vous ne pouvez pas utiliser le FOP pour convertir tout html en conservant les styles originaux (et changer de formateur ne résoudrait pas le problème).
Cependant, vous pouvez utiliser FOP (ou tout autre formateur) pour essayer de traiter raisonnablement bien un grand sous-ensemble de documents html ; cela pourrait nécessiter quelques ajustements XSLT.
Pourquoi cela ne peut pas fonctionner en général
HTML --> XHTML --> XSL-FO --> PDF
Votre description de la chaîne de transformation nécessaire est pertinente.
Cependant, Le FOP n'est impliqué que dans la dernière étape à l'exception des fonctionnalités qui ne sont pas encore mises en œuvre, le fichier PDF final doit respecter les caractéristiques typographiques exprimées dans le fichier FO.
J'ai utilisé le xhtml2fo.xsl d'Antenna House pour la conversion xhtml --> XSL-FO. [...]
Un PDF est créé, mais il n'est pas du tout formaté.
Est-ce que la feuille de style que vous utilisez celui-ci provient du site AntennaHouse ?
D'après un rapide coup d'œil, il semble que devrait convertir le style="..."
produisant des attributs séparés dans la sortie FO, mais il ne traite pas les fichiers CSS externes .
En conséquence, les fichiers HTML stylisés avec des CSS externes seront transformés en fichiers FO sans aucun attribut de formatage ( font-family
, font-size
, text-align
, ...).
Peut-on y parvenir avec le FOP ?
Si c'est effectivement le cas, le formateur ne peut rien faire d'autre que utiliser les valeurs par défaut dont quelques-uns ( font-family
me vient à l'esprit) dépendent de l'application.
Ainsi, selon le formateur que vous utilisez, vous aurez une légèrement résultat différent, mais toujours "non formaté".
Ce dont vous avez besoin est soit un outil pour "fusionner" les fichiers html et css, en mettant les styles en ligne pour que le XSLT puisse les traiter, soit une feuille de style différente capable de prendre en compte les fichiers css externes (mais je soupçonne qu'il ne serait pas facile d'en écrire une qui fonctionne dans un cas général).
Ce qui peut être réparé avec peu d'efforts
Lors du traitement des tableaux html, le XSLT lié utilise la fonction fo:table-and-caption
qui n'est pas pris en charge par FOP, de sorte que les tableaux "disparaissent" de la sortie.
Cela peut être corrigé avec un petit changement dans le XSLT, ou (probablement une solution plus propre) en utilisant une feuille de style personnalisée qui importe l'autre :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:html="http://www.w3.org/1999/xhtml">
<xsl:include href="xhtml2fo.xsl"/>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
<xsl:template match="html:table" priority="2">
<fo:table xsl:use-attribute-sets="table">
<!-- warning: table caption is not processed! -->
<xsl:call-template name="process-table"/>
</fo:table>
</xsl:template>
</xsl:stylesheet>
Il est possible que la feuille de style que vous utilisez actuellement nécessite quelques ajustements similaires pour mieux fonctionner en conjonction avec FOP.
Divulgation : je suis un développeur FOP, bien que je ne sois plus très actif aujourd'hui.