Existe-t-il une API Java capable de créer des documents Word riches? [fermé]

111

J'ai une nouvelle application sur laquelle je vais travailler où je dois générer un document Word contenant des tableaux, des graphiques, une table des matières et du texte. Quelle est une bonne API à utiliser pour cela? Êtes-vous sûr qu'il prend en charge les graphiques, les TdC et les tableaux? Quels sont les pièges cachés de leur utilisation?

Quelques clarifications:

  • Je ne peux pas sortir un PDF, ils veulent un document Word.
  • Ils utilisent MS Word 2003 (ou 2007), pas OpenOffice
  • L'application s'exécute sur le serveur d'application * nix

Ce serait bien si je pouvais commencer avec un modèle de document et simplement remplir quelques espaces avec des tableaux, des graphiques, etc.

Edit: Plusieurs bonnes réponses ci-dessous, chacune avec ses propres défauts en ce qui concerne ma situation actuelle. Difficile de choisir une «réponse finale» parmi eux. Je pense que je vais le laisser ouvert et j'espère que de meilleures solutions seront créées.

Edit: Le projet OpenOffice UNO semble être le plus proche de ce que j'ai demandé. Bien que le POI soit certainement plus courant, il est trop immature pour ce que je veux.

billjamesdev
la source
26
Je ne sais pas comment la fermeture de cette question 30 mois après sa dernière modification, et plus de 3 ans après sa demande initiale, sera très productive. Si j'ai changé le titre en "Comment créer des documents Word riches avec une API Java?" cela réglerait-il cela?
billjamesdev
1
au cas où quelqu'un aurait besoin d'un examen complet de l'api java disponible esupu.com/open-source-office-document-java-api-review
Supun Sameera
Vous pourriez jeter un œil à docxtemplater, https://github.com/edi9999/docxtemplater/ qui est une bibliothèque que j'ai créée pour générer docx à partir de modèles docx
edi9999
1
La question devrait être rouverte. La question a été reformulée pour correspondre aux règles. Par conséquent, je voudrais appeler quiconque a le pouvoir de rouvrir cette question. Avant la question était: Qu'est-ce qu'une bonne API Java pour créer des documents Word? Maintenant, la question est: existe-t-il une API Java capable de créer des documents Word riches? La question indique maintenant clairement ce que veut la personne qui la demande: créer des documents Word avec des graphiques, des TdC et des tableaux. La question ne demande plus non plus une "bonne" API Java. Le bien est différent pour tout le monde.
Sjoerd Pottuit

Réponses:

56

En 2007, mon projet a utilisé avec succès l' interface UNO ( Universal Network Objects ) d' OpenOffice.org pour générer par programme des documents compatibles MS-Word (* .doc), ainsi que les documents PDF correspondants, à partir d'une application Web Java (un framework Struts / JSP).

OpenOffice UNO vous permet également de créer des graphiques, des feuilles de calcul, des présentations, etc. compatibles MS-Office. Nous avons pu créer dynamiquement des documents Word sophistiqués, y compris des graphiques et des tableaux.

Nous avons simplifié le processus en utilisant des modèles de documents MS-Word avec des inserts de signets dans lesquels le logiciel a inséré du contenu, mais vous pouvez créer des documents entièrement à partir de zéro. L'objectif était que le logiciel génère des rapports pouvant être partagés et modifiés par les utilisateurs finaux avant de les convertir au format PDF pour la livraison finale et l'archivage.

Vous pouvez éventuellement produire des documents aux formats OpenOffice si vous souhaitez que les utilisateurs utilisent OpenOffice au lieu de MS-Office. Dans notre cas, les utilisateurs souhaitent utiliser les outils MS-Office.

UNO est inclus dans la suite OpenOffice. Nous avons simplement lié notre application Java aux bibliothèques liées à UNO dans la suite. Un kit de développement logiciel (SDK) OpenOffice est disponible, contenant des exemples d'applications et le guide du développeur UNO.

Je n'ai pas cherché à savoir si le dernier OpenOffice UNO pouvait générer des formats de document Open XML MS-Office 2007.

Les éléments importants d'OpenOffice UNO sont:

  1. C'est un freeware
  2. Il prend en charge plusieurs langues (par exemple, Visual Basic, Java, C ++ et autres).
  3. Il est indépendant de la plate-forme (Windows, Linux, Unix, etc.).

Voici quelques sites Web utiles:

Chanceux
la source
1
Jusqu'à présent, c'est le plus compatible avec l'ensemble d'outils que j'ai demandé. Je vais le marquer comme «accepté». Bien que je reconnaisse pleinement que POI est plus courant, il n'a tout simplement pas encore la fonctionnalité que je souhaite.
billjamesdev
30

Je pense qu'Apache POI peut faire le travail. Un problème possible en fonction de l'utilisation que vous visez peut être causé par le fait que HWPF est encore en développement précoce.

HWPF est l'ensemble des API pour la lecture et l'écriture de documents Microsoft Word 97 (-XP) en utilisant (uniquement) Java.

Jorge Ferreira
la source
Avez-vous connaissance des possibilités de graphiques et de tableaux? Et les tables des matières? Quelqu'un a-t-il une expérience réelle de ces choses dans POI?
billjamesdev
1
En regardant la documentation pour POI, il semble que ce HWPF soit très tôt dans le développement, permettant principalement de lire du texte à partir d'un .doc, pas vraiment pour la création dynamique de documents "complexes".
billjamesdev
Je ne pense pas qu'il gère les graphiques / tableaux les plus complexes, etc.
Brian Agnew
POI ou docx4j? stackoverflow.com/questions/15013837/…
JasonPlutext
9

Vous pouvez utiliser ceci: http://code.google.com/p/java2word

J'ai implémenté cette API appelée Java2Word. avec quelques lignes de code, vous pouvez générer un document Microsoft Word.

Par exemple.:

IDocument myDoc = new Document2004();
myDoc.getBody().addEle(new Heading1("Heading01"));
myDoc.getBody().addEle(new Paragraph("This is a paragraph...")

Il y a quelques exemples d'utilisation. En gros, vous aurez besoin d'un fichier jar. Faites-moi savoir si vous avez besoin d'informations supplémentaires sur la façon de le configurer.

* J'ai écrit ceci parce que nous avions une vraie nécessité dans un projet. Plus dans mon blog:

http: //leonardo-pinho.blogspot.com/2010/07/java2word-word-document-generator-from.html *

applaudit Leonardo

Edit : Projet dans le lien déplacé vers https://github.com/leonardoanalista/java2word

Léonard
la source
1
L'avez-vous testé avec MS Word? J'ai réussi à créer des fichiers que OpenOffice et LibreOffice peuvent lire mais pas MSWord sous Windows. (J'ai signalé ce problème à code.google.com/p/java2word/issues/detail?id=16 )
Stein G. Strindhaug
2
Je ne peux pas ouvrir les fichiers générés par java2word avec OpenOffice? Fonctionne bien avec Office 2010
Ashika Umanga Umagiliya
Prend-il en charge la création de fichiers .docx? @Leonardo
MaheshVarma
Ne wproject home: github.com/leonardoanalista/java2word
vhunsicker
4

Essayez Aspose.Words pour Java, il fonctionne sur n'importe quel système d'exploitation sur lequel Java est installé.

Il sortira le document au format DOC, DOCX ou RTF si vous avez besoin d'un format de sortie MS Word. Tous sont également bien pris en charge.

En utilisant cette API, vous pouvez créer un document à partir de zéro, littéralement à partir de nœuds et définir leurs propriétés de mise en forme. Vous pouvez également utiliser un DocumentBuilder qui fournit des méthodes de niveau supérieur telles que créer une ligne de tableau, insérer un champ, etc. des morceaux de plusieurs documents et Aspose.Words fusionneront correctement les styles, la mise en forme de la liste, etc. dans le document résultant.

Vous pourrez insérer un champ TOC en utilisant Aspose.Words, mais à partir d'aujourd'hui, le champ TOC nécessitera une mise à jour du champ lorsque le document est ouvert dans Microsoft Word. Cependant, nous allons publier un support complet pour les champs TOC au début de 2010. Par exemple, il construira une table des matières complète comme MS Word le fait.

Je fais partie de l'équipe Aspose.Words.

Romeok
la source
4

Il n'a été mentionné qu'une fois brièvement, donc j'aimerais appeler la bibliothèque docx4j, car j'ai eu plus de succès avec docx4j qu'autre chose. La prise en charge par Apache POI des documents Word n'est pas très bonne. De plus, contrairement à Aspose.Words, docx4j est une bibliothèque open source.

Le seul inconvénient est qu'avec docx4j, vous devez créer des documents au format Office Open XML (docx) plutôt que des documents au format OLE2 (doc). Il s'agit du format par défaut pour Word 2007, mais Word 2003 et les utilisateurs antérieurs devront installer un pack de compatibilité.

Joshua né
la source
3

Essayez Aspose.Words pour java.

Aspose.Words for Java est une bibliothèque de classes (commerciale) avancée pour Java qui vous permet d'effectuer une large gamme de tâches de traitement de documents directement dans vos applications Java.

Aspose.Words pour Java prend en charge les formats DOC, OOXML, RTF, HTML et OpenDocument. Avec Aspose.Words, vous pouvez générer, modifier et convertir des documents sans utiliser Microsoft Word.

Seki
la source
2

Vous pouvez utiliser un pont Java COM comme JACOB . Si c'est du côté client, une autre option serait d'utiliser Javascript.

Gulzar Nazim
la source
Merci, mais il semble que cela nécessiterait de fonctionner sur une machine Windows, non? J'ai clarifié le système d'exploitation de la machine hôte après avoir lu ceci, mais merci pour l'info.
billjamesdev
L'utilisation de JACOB sur le serveur Web nécessiterait l'installation de Microsoft Word lui-même, car la création et la manipulation de documents Word via l'interface COM nécessitent de mettre en place des instances réelles de l'application Word. En général, une telle utilisation de Word + COM sur un serveur multi-utilisateur est assez problématique car Word n'est pas conçu pour une telle utilisation - par exemple, la duplication de parties du document est traditionnellement effectuée à l'aide de l'objet Selection et du presse-papiers Windows, ce qui est impensable dans le Web- configuration de la machine serveur. J'ai été assez brûlé par cela (bien que
j'aie
2

J'ai utilisé Aspose.Words pour faire du publipostage dans .NET. Je pense qu'ils ont également une version Java.

Tvanfosson
la source
2

Il existe un outil appelé JODConverter qui se connecte au bureau ouvert pour exposer ses convertisseurs de format de fichier, il existe des versions disponibles en tant qu'application Web (se trouve dans tomcat) sur laquelle vous publiez et un outil de ligne de commande. J'ai lancé du html et je l'ai converti en .doc et pdf avec succès, c'est dans un projet assez gros, je n'ai pas encore été mis en ligne, mais je pense que je vais l'utiliser. http://sourceforge.net/projects/jodconverter/

Andrew Hancox
la source
2

iText est vraiment facile à utiliser.

Si vous avez besoin de fichiers doc, vous pouvez appeler abiword (processeur de texte multi-os léger gratuit) à partir de la ligne de commande, il a plusieurs options de conversion de format de conversion.

cam2574
la source
1

docx4j ou poi, tous deux ASL v2

@wondersofcomputing: iText est en fait gratuit et open source

JasonPlutext
la source
1

Après un peu plus de recherche, je suis tombé sur iText, une API de création de fichiers PDF et RTF. Je pense que je peux utiliser la génération RTF pour créer un fichier lisible par Doc qui peut ensuite être édité à l'aide de Doc et réenregistré.

Quelqu'un a-t-il une expérience avec iText, utilisé de cette façon?

Bill, le POI et l'API iText sont très similaires du point de vue de la programmation. J'ai travaillé avec les deux dans le passé et je les ai trouvés à la fois faciles à utiliser et bien documentés.

Avec iText, vous avez l'avantage de pouvoir basculer entre les formats (RTF et PDF) avec des modifications mineures du code. Si je me souviens bien, le contenu est présenté en utilisant les mêmes appels, puis défini au format PDF ou RTF en utilisant quelques lignes de code.

Cependant, je pense que le formatage en RTF est limité par rapport à DOC. Je ne sais pas si vous serez en mesure d'implémenter les fonctionnalités avancées que vous recherchez (tableaux, images en ligne) sans une quantité décente de tracas, voire pas du tout.

Compte tenu de ce que vous avez dit à propos de HWPF n'ayant pas suffisamment de fonctionnalités pour vos besoins (je n'ai traité que du côté Excel de POI), votre meilleur pari peut être de convaincre les pouvoirs en place que le PDF est la meilleure technologie pour le travail .

James McMahon
la source
1

J'ai développé des fichiers de mots basés sur XML pur dans le passé. J'ai utilisé .NET, mais le langage ne devrait pas avoir d'importance puisqu'il s'agit vraiment de XML. Ce n'était pas la chose la plus facile à faire (un projet qui l'exigeait il y a quelques années). Celles-ci ne fonctionnent que dans Word 2007 ou supérieur - mais tout ce dont vous avez besoin est le livre blanc de Microsoft qui décrit ce que fait chaque balise. Vous pouvez accomplir tout ce que vous voulez avec les balises de la même manière que si vous utilisiez Word (bien sûr un peu plus pénible au départ).

Schmoopy
la source
0

Après un peu plus de recherche, je suis tombé sur iText , une API de création de fichiers PDF et RTF. Je pense que je peux utiliser la génération RTF pour créer un fichier lisible par Doc qui peut ensuite être édité à l'aide de Doc et réenregistré.

Quelqu'un a-t-il une expérience avec iText, utilisé de cette façon?

billjamesdev
la source
J'ai utilisé iText pour exporter vers RTF et c'est un peu floconneux: TOC par exemple ne fonctionne pas très bien et ce n'est vraiment pas très facile à utiliser (il manque la documentation)
AlfaTeK
0

Encore une autre possibilité, puisqu'il s'agit d'une application Web.

J'ai pu rendre une page HTML avec le type MIME défini sur "application / msword", ce qui a amené le navigateur à générer Word qui importait très bien le html, permettant les modifications et l'enregistrement comme si je produisais un vrai document Word.

Les tableaux fonctionnent bien, mais les images que je n'avais pas encore mises au point. Cela peut être aussi simple qu'une simple balise dans le HTML, ou il se peut que je doive diffuser une partie distincte de la réponse contenant les données d'image en binaire, ou une autre méthode que je n'ai pas encore proposée. :)

billjamesdev
la source
0

Même si cela est beaucoup plus tardif que la demande, cela pourrait aider les autres. Docmosis fournit une API Java pour créer des documents au format doc, pdf, odt en utilisant des documents comme modèles. Il utilise OpenOffice comme moteur pour effectuer les conversions de format. La manipulation et la population de documents sont effectuées par Docmosis elle-même.

Paul Jowett
la source