web-dev-qa-db-fra.com

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

J'ai une nouvelle application sur laquelle je vais travailler pour générer un document Word contenant des tableaux, des graphiques, une table des matières et du texte. Qu'est-ce qu'une bonne API à utiliser pour cela? Dans quelle mesure êtes-vous sûr que cela prend en charge les graphiques, les tables de matières et les tableaux? Quels sont les pièges cachés dans leur utilisation?

Quelques clarifications:

  • Je ne peux pas produire de PDF, ils veulent un document Word.
  • Ils utilisent MS Word 2003 (ou 2007), pas OpenOffice
  • L'application s'exécute sur * nix app-server

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

Edit: Plusieurs bonnes réponses ci-dessous, chacune avec ses propres fautes par rapport à ma situation actuelle. Difficile de choisir une "réponse finale" d'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'avais demandé. Bien que POI soit certainement plus courant, il est trop immature pour ce que je veux.

108
billjamesdev

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

OpenOffice UNO vous permet également de créer des graphiques, des feuilles de calcul, des présentations, etc. compatibles avec MS-Office. Nous avons pu créer de manière dynamique des documents Word sophistiqués, notamment des graphiques et des tableaux. 

Nous avons simplifié le processus en utilisant des modèles de documents MS-Word avec des insertions de signets dans lesquelles le logiciel insérait du contenu. Toutefois, vous pouvez créer des documents complètement à partir de zéro. L'objectif était de faire en sorte que le logiciel génère des documents de rapport pouvant être partagés et modifiés par les utilisateurs finaux avant d'être convertis au format PDF pour la livraison finale et l'archivage. 

Vous pouvez éventuellement produire des documents aux formats OpenOffice si vous voulez que les utilisateurs utilisent OpenOffice au lieu de MS-Office. Dans notre cas, les utilisateurs veulent 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 au sein de la suite. Un Kit de développement logiciel OpenOffice (SDK) contenant des exemples d'applications et le Guide du développeur UNO est disponible.

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

Les points importants concernant OpenOffice UNO sont: 

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

Voici quelques sites Web utiles: 

54
Rob Garverick

Je pense que 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 en est encore à ses débuts.

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

30
Jorge Ferreira

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. Fondamentalement, vous aurez besoin d’un fichier jar… .. Faites-moi savoir si vous avez besoin d’informations complémentaires pour savoir comment le configurer.

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

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

acclamations Leonardo

Edit: projet en lien déplacé vers https://github.com/leonardoanalista/Java2Word

9
Leonardo

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

Le seul inconvénient est que, 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é.

4
Joshua Born

Essayez Aspose.Words for Java, il s’exécute sur n’importe quel système d’exploitation où Java est installé.

Le document sera exporté au format DOC, DOCX ou RTF si vous avez besoin d’un format de sortie MS Word. Tous sont également pris en charge.

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

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

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

4
romeok

Essayez Aspose.Words pour Java.

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

Aspose.Words for 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. 

3
mutley

Il existe un outil appelé JODConverter qui se connecte à Open Office pour exposer ses convertisseurs de format de fichier. Il existe des versions disponibles en tant qu'application Web (située dans Tomcat) que vous publiez et un outil de ligne de commande. Je tire du html dessus et convertis au format .doc et pdf avec succès. C’est un projet assez volumineux, je n’ai pas encore terminé, mais je pense que je vais l’utiliser . http: // sourceforge.net/projects/jodconverter/

2
Andrew Hancox

Vous pouvez utiliser un pont Java COM tel que JACOB . S'il s'agit du côté client, une autre option serait d'utiliser Javascript.

2
Gulzar Nazim

J'ai utilisé Aspose.Words pour faire la fusion dans .NET. Je crois qu'ils ont aussi une version Java.

2
tvanfosson

iText est vraiment facile à utiliser.

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

2
cam2574

Après un peu plus de recherches, 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 un document qui peut ensuite être modifié à l'aide de Doc puis ré-enregistré.

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

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

Avec iText, vous avez l’avantage de pouvoir changer de format (RTF et PDF) en modifiant légèrement le code. Si je me souviens bien, le contenu est présenté en utilisant les mêmes appels, puis défini comme PDF ou RTF en utilisant quelques lignes de code.

Cependant, je pense que la mise en forme dans RTF est limitée par rapport à DOC. Je ne sais pas si vous serez en mesure de mettre en œuvre les fonctionnalités avancées que vous recherchez (tableaux, images en ligne) sans trop de soucis, voire pas du tout. 

Compte tenu de ce que vous avez dit à propos du fait que HWPF ne dispose pas de suffisamment de fonctionnalités pour répondre à vos besoins (je n’ai traité que du côté Excel du POI), votre le meilleur moyen peut-être de convaincre les pouvoirs que PDF est le meilleur technologie pour le travail

1
James McMahon

J'ai développé des fichiers Word basés sur du XML pur par le passé. J'ai utilisé .NET, mais le langage ne devrait pas avoir d’importance, car c’est vraiment du XML. Ce n’était pas la chose la plus facile à faire (un projet l’avait demandé il ya quelques années.) Celles-ci ne fonctionnent que dans Word 2007 ou une version ultérieure, mais vous avez besoin du livre blanc de Microsoft qui décrit le fonctionnement de 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ébut).

1
schmoopy

docx4j ou poi, les deux étant ASL v2

@wondersofcomputing: iText est réellement gratuit et open source

1
JasonPlutext

Même si cela est beaucoup plus tard que la demande, cela pourrait aider les autres. Docmosis fournit une API Java permettant de 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 génération de documents sont effectuées par Docmosis lui-même.

0
Paul Jowett

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

J'ai été en mesure de restituer une page HTML avec le type MIME défini sur "application/msword", ce qui a amené le navigateur à générer Word qui importait parfaitement le code HTML, autorisant ainsi les modifications et la sauvegarde, comme si j'avais généré un vrai document Word.

Les tables fonctionnent bien, mais les images que je n'avais pas encore travaillées. Cela peut être aussi simple qu’une balise dans le code HTML, ou j’ai peut-être besoin de 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 trouvée. :)

0
billjamesdev

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

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

0
billjamesdev