Convertir un docx en pdf

Tags: #<Tag:0x00007fe297e2bf68>

Bonjour,

Je voudrais convertir en rhino un document .docx qui se trouve dans un attribut A de type document, en PDF et ensuite le stocker dans un attribut B de type document.

Pourriez-vous svp m’aider en me disant comment procéder et s’il y a déjà des libs/fonctions qui existent déjà pour faire cette conversion ?

Merci d’avance pour votre aide.

Abed

Je n’ai jamais fait ce genre de chose.

Mais visiblement il y a des APIs dans la lib Docx4j qui semblent faire ça, cf. https://www.programcreek.com/java-api-examples/?class=org.docx4j.Docx4J&method=toPDF

A voir avec la doc et dans les forums consacrés à Docx4j

Merci @david,

Auriez-vous juste une idée comment je peux faire appel en Rhino à la commande :

Docx4J.toPDF(wordMLPackage, fileOutputStream)
2020-06-03 21:30:40,388 ERROR [com.simplicite.util.ScriptInterpreter] SIMPLICITE|http://e3m.simplicite.io:10158||ECORESC001|designer|com.simplicite.util.ScriptInterpreter|ImmoDiagnostic/the_ajax_ImmoDiagnostic||Erreur script: ReferenceError: "Docx4J" is not defined.

Est-ce qu’il manque des packages ?

Merci encore
Abed.

Il faut explicitement importer les packages Docx4J (ou autres) requis, cf. https://docs.simplicite.io/documentation/01-core/publication-examples.md#binarycontent

Désolé @david, même après plus de 7 heures de recherches, je n’arrive toujours pas à lancer en rhino la commande

Docx4J.toPDF(doc4, pdfFile);

J’ai ajouté les packages :

importPackage(Packages.org.docx4j.openpackaging.packages);
importPackage(Packages.org.docx4j.openpackaging.parts.WordprocessingML);	

///////////////////////////////////////


//importPackage(Packages.org.docx4j.XmlUtils);
importPackage(Packages.org.docx4j.convert.out.pdf.viaXSLFO.PdfSettings);
//importPackage(Packages.org.docx4j.fonts.IdentityPlusMapper);
//importPackage(Packages.org.docx4j.fonts.Mapper);
//importPackage(Packages.org.docx4j.fonts.PhysicalFont);
//importPackage(Packages.org.docx4j.jaxb.Context);
//importPackage(Packages.org.docx4j.openpackaging.io.SaveToZipFile);
//importPackage(Packages.org.docx4j.openpackaging.packages.WordprocessingMLPackage);
//importPackage(Packages.org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart);
importPackage(Packages.org.docx4j.convert.out.pdf.PdfConversion);

Et j’ai toujours l’erreur :

2020-06-03 22:47:18,562 ERROR [com.simplicite.util.ScriptInterpreter] SIMPLICITE|http://e3m.simplicite.io:10158||ECORESC001|designer|com.simplicite.util.ScriptInterpreter|ImmoDiagnostic/the_ajax_ImmoDiagnostic||Erreur script: ReferenceError: "Docx4J" is not defined.

Si vous avez qq minutes à m’accorder pour m’aider à trouver la librairie qui manque ou la bonne syntaxe de la commande, cela m’aiderait beaucoup.

Merci d’avance.

La classe Docx4J est celle là : https://javadoc.io/doc/org.docx4j/docx4j/latest/org/docx4j/Docx4J.html
donc il faut commencer par ajouter l’import du package de cette classe donc importPackage(Packages.org.docx4j);, ensuite j’imagine qu’il faut d’autres imports. Comme ce n’est pas une lib Simplicité mais une lib tierce referez vous à la doc de cette lib tierce pour savoir quoi importer.

En Rhino, comme en Java, il faut importer explicitement les classes dont on a besoin.

Par défaut Simplicité importe les classes Simplicité com.simplicite.* et quelques autres, cf. https://docs.simplicite.io/documentation/01-core/basic-code-examples.md#inclusions, les autres doivent être importées explicitement.

Le com.simplicite.util.tools.DocxTool permet de manipuler le contenu d’un DOCX (sans connaitre ou importer Docx4J ou l’open XML), mais pas de générer un PDF. Si ça marchait bien, on aurait intégré cette méthode aux tools.

Il doit y avoir du support là dessus directement sur le forum docx4j
https://www.docx4java.org/forums/docx-java-f6/

Mais d’expérience Docx4J.toPDF ne convertit pas très bien un DOCX en PDF, certaines mises en page ne sont pas bien exportées, alignement, espaces… c’est très basique et donc ne ressemble jamais au doc d’origine.

Sur un ancien projet cette fonctionnalité avait été abandonnée au profit d’une impression en PDF depuis un outil bureautique tel que MS Word ou Open Office qui fait ça nativement en supportant toute la norme Open XML (en tache de fond via un appel systeme ou par l’utilisateur directement dans Word avant d’importer le PDF dans son formulaire).

Mais bon avec la version plus récente de DOCX4J peut être que ça s’est amélioré. Essayez et dites nous si ça vaut le coup de faire évoluer les tools simplicité.