Conversion entre les formats de document en C #

Quel est le meilleur moyen de convertir entre HTML, XML et XSL-FO en C #?

J’ai déjà le code HTML (transmis par FCKEditor) et j’aimerais imprimer un fichier PDF (j’ai un convertisseur XSL-> PDF). Je n’arrive tout simplement pas à trouver une bibliothèque capable de convertir du HTML en tout ce qui est convivial avec XSL.

Il y a un ou deux ans, je devais générer des fichiers PDF à partir d’un programme C ++ / C #. En fin de compte, j’ai décidé de lancer le FOP Java d’Apache en tant que processus distinct pour effectuer la conversion. L’expérience avec xsl-fo n’a pas été agréable. À l’époque, il ne semblait pas y avoir un seul outil qui aurait complètement implémenté xsl-fo. Les outils avaient tendance à choisir un sous-ensemble de la spécification et à la pirater. Compte tenu de la complexité tentaculaire de xsl-fo, je commence à me demander s’il y aura un jour une mise en œuvre complète.

La FOP avait tendance à être boguée et un temps considérable a été consacré à la résolution des problèmes. XSLT et XPaths étaient difficiles à apprendre. Il a fallu quelques semaines avant que je voie au-delà de la verbosité et que je puisse rapidement faire avancer les choses. Je ne pense pas avoir jamais eu ma tête autour de xsl-fo cependant. Les modèles html et css ressemblent à un jouet d’enfant. Heureusement, les fichiers PDF génèrent et n’ont pas trop de problèmes. 🙂

Quoi qu’il en soit, la tâche à accomplir: générer des fichiers PDF à partir de la sortie xhtml de FCKEditor.

Je n’arrive tout simplement pas à trouver une bibliothèque capable de convertir du HTML en tout ce qui est convivial avec XSL.

Il h. Ouais, c’est parce qu’il n’y en a pas et qu’il n’y aura probablement pas de convertisseur html vers xsl-fo qui soit bon. Un tel convertisseur a quelques inconvénients: la complexité des navigateurs et la complexité de xsl-fo. Pour qu’un tel convertisseur puisse traiter un document HTML moyen, il a besoin des entrailles d’un navigateur Web: la mise en page, la prise en charge css probablement même JavaScript. Ensuite, il doit prendre la page rendue et déterminer quel type de fichier xsl-fo est nécessaire pour obtenir quelque chose qui se présente de manière similaire et qui respecte les contraintes paginées de xsl-fo.

C’est comme le problème de faire une visionneuse de mots: sans réimplémenter beaucoup de mots, ça craint la plupart du temps parce que ça ne ressemble pas.

Alors que peux-tu faire? Bien, avoir un petit sous-ensemble de HTML pour travailler est un bon début. Espérons que la sortie de FCKEditor est xhtml, car le html en xml est un monde de douleur en soi (ce qui peut être utile de le ranger ). Ensuite, à moins que quelque pauvre âme ait déjà fait un FCKEditor xhtml -> xsl-fo xslt pour votre implémentation xsl-fo, vous devrez en créer un. Cela implique l’apprentissage de xsl-fo, xslt et xpath. D’après mon expérience, cela prendra quelques semaines et ce sera une solution complexe.

Pour commencer à utiliser xsl-fo, j’ai trouvé les liens suivants utiles:

  • XSL-FOTutorial
  • Norme XSL
  • Page de conformité Apache FOP
  • XSL-FO: prêt pour le prime time? décrit le problème que xsl-fo essaie de résoudre
  • Pour trois introductions rapides, voir a , b et c

Alors, quel est tout ce xsl-fo, xslt et toutes les autres choses? Le XSL-FO: prêt pour le prime time? l’exprime comme:

Famille de langage de styles extensible (XSL) XSL est une famille de recommandations permettant de définir la transformation et la présentation de documents XML. Il se compose de trois parties:

  • XSL Transformations (XSLT), un langage pour transformer XML
  • XML Path Language (XPath), langage d’expression utilisé par XSLT pour accéder à des parties d’un document XML ou y faire référence. (XPath est également utilisé par la spécification XML Linking)
  • Objets de mise en forme XSL (XSL-FO), un vocabulaire XML permettant de spécifier la sémantique de mise en forme

Mon conseil? Courir. Trouver un autre parti. Trouvez une autre solution. Générez des fichiers LaTeX et convertissez-les en fichiers PDF. Générer autre chose. Créez des documents Word et imprimez-les à l’aide de PDFCreator . Générer des images. Contrôle Firefox pour imprimer les pages en tant que pdfs. Trouvez-vous pour éviter d’avoir besoin de fichiers PDF. N’importe quoi, tant qu’il ne combat pas html, xsl-fo, FOP, xslt et xpath.

PS: Faites-moi savoir si vous avez besoin d’aide. 🙂

Je voudrais d’abord essayer XSLT . Lorsque vous parlez de formatage de documents XML (et c’est à peu près ce dont vous parlez), c’est l’outil conçu pour le faire.

De Wiki :

“L’idée générale de l’utilisation de XSL-FO est que l’utilisateur écrit un document, pas en langage FO, mais en langage XML. XHTML, DocBook et TEI sont autant de possibilités, mais il peut s’agir de n’importe quel langage XML. une transformation XSLT, soit en en écrivant une, soit en en recherchant une pour le type de document en question. Cette transformation XSLT convertit le XML en XSL-FO. ”

Vous avez besoin d’une transformation XSLT pour HTML en XSL-FO. Je ne sais pas où en obtenir un, mais apparemment, le concept n’est pas étranger.

Échange très instructif ici. J’ai créé une application Web utilisant ASP.NET et C # .NET pour mon activité de sous-traitance informatique. L’un des principaux objectives de l’application Web est de générer des CV personnalisés dans divers formats. Je stocke le contenu de mon CV dans une firebase database SQL Server et construis le XML principalement brut dans une méthode C #. J’ai utilisé XSLT pour convertir au format HTML et avec un peu de maladresse, j’ai enfin obtenu un CV de base présentable. Mon prochain objective est d’obtenir une version imprimable du CV. J’ai eu un livre sur XML dans la bibliothèque et j’ai un peu retouché le XSLT. Puis je suis arrivé au chapitre XSL-FO. C’est à ce moment que l’iceberg a frappé. Je voulais relever le défi d’avoir une option PDF qui serait un choix de menu et une transformation de XSLT à XSL-FO en PDF. La chose est que toutes les recommandations du livre avaient des références à des produits commerciaux. Cela ne vaut tout simplement pas la peine, car PDF n’est pas nécessaire. J’ai examiné Altova XMLSpy sur une base de 30 jours, mais dès que j’ai essayé de transformer pour la première fois un fichier d’exemple XSL-FO, j’ai reçu un message indiquant que je devais télécharger plus de logiciels. Ce téléchargement prenait une éternité de leur site, j’ai donc abandonné et supprimé le logiciel. Les versions gratuites des logiciels commerciaux d’autres fournisseurs ne disposent pas de l’option de transformation. Après avoir lu les notes ici, j’ai décidé d’éviter le XSL-FO moi-même. Je vais essayer d’obtenir une version MS Word maintenant et si mes clients veulent la convertir au format PDF, ils peuvent payer pour la version de création de PDF d’Adobe.

C’est une question morte, mais je voudrais append pour les futurs lecteurs que l’incarnation actuelle de FCKEditor (CKEditor maintenant) est meilleure pour produire du XHTML de haute qualité (même un ensemble de balises définissables par l’utilisateur est possible).

J’ai eu des problèmes similaires en n’utilisant pas XSL-FO, mais en utilisant un convertisseur (X) HTML en PDF qui rend le PDF à partir de votre source sans XSL Transforms. Je valide le fichier XHTML produit et corrige les rares problèmes rencontrés avec HtmlAgilityPack. De cette manière, vous vous éloignerez des complexités HTML non sémantiques. Vous avez le choix entre de nombreux convertisseurs. Mon choix est wkhtmltopdf (Si l’argent n’est pas un problème, PrinceXML est une alternative supérieure – j’aimerais bien l’utiliser, mais c’est trop cher).