# Java > Dveloppement Web en Java > Servlets/JSP >  Gnration HTML to PDF

## mattrixx

Bonjour  tous,

Voil mon projet touche  sa fin mais je ne trouve pas, enfin je ne trouve  pas quelque chose de correcte qui me permet de gnrer une page pdf  partir d'une page xhtml avec media type "printer" (css)

avez vous une ide d'api que je pourrais utiliser, j'ai essayer iTexte j'ai galement contacter le concepteur qui me dit que iText n'est pas fait pour faire ce genre de chose (il le fait mais pas trs bien)

et vous, vous utiliser quoi ?

merci pour votre aide, il ne me reste plus que cela pour clturer mon projet.

merci

----------


## tchize_

en gnral, j'ouvre firefox, et je fais fichier -> imprimer -> dans un PDF.

Blague  part, convertir un html en quelque chose de visuel, c'est en gnral le boulot d'un navigateur, donc il faudrait un navigateur  part entire pour faire ce travail correctement  ::roll:: 

Il y a aussi html2ps sous linux suivi de ps2pdf, mais c'est pas parfait (perte d'une partie des couleurs)

----------


## mattrixx

> en gnral, j'ouvre firefox, et je fais fichier -> imprimer -> dans un PDF.
> 
> Blague  part, convertir un html en quelque chose de visuel, c'est en gnral le boulot d'un navigateur, donc il faudrait un navigateur  part entire pour faire ce travail correctement 
> 
> Il y a aussi html2ps sous linux suivi de ps2pdf, mais c'est pas parfait (perte d'une partie des couleurs)



oui mais ici le but est qu'il gnre le pdf automatiquement et ainsi je le sauve automatiquement sur un emplacement rseau et copie du liens en db, car la gnration du document sont des lettres type envoyer par mail ou pas courrier

je rame pour trouver un system fiable pour faire cela  ::(:

----------


## OButterlin

Peut-tre que ceci peut t'intresser

----------


## mattrixx

> Peut-tre que ceci peut t'intresser


Merci je vvais y regarder mais cela est iText je pense  ::(:

----------


## OButterlin

iText n'est pas un problme en soit, c'est l'API qui permet de crer des documents PDF, on peut tout faire avec...
C'est le convertisseur entre le document xhtml et l'API qui fera la diffrence...

----------


## tchize_

il y a une raison particulire pour avoir gnr les lettre type en html? Vu que c'est un format sans page le html, ce n'est vraiment pas la premier chose qui me viendrait en tete pour gnre des documents types. Ajouter  a qu'il y aie peu de chance que les utilisateurs aient les comptences ncessaires pour changer les lettres types dans le futur. Il y a des trucs comme JODReport pour faire ce genre de chose, par exemple.

----------


## mattrixx

> il y a une raison particulire pour avoir gnr les lettre type en html? Vu que c'est un format sans page le html, ce n'est vraiment pas la premier chose qui me viendrait en tete pour gnre des documents types. Ajouter  a qu'il y aie peu de chance que les utilisateurs aient les comptences ncessaires pour changer les lettres types dans le futur. Il y a des trucs comme JODReport pour faire ce genre de chose, par exemple.


l'utilisateur ne dois pas changer les lettres types (cela a t demander comme cela dans le cahier des charges)

mais je vais voir jodreport, mais le but est d'avoir une application sans trop de composant externe pour quelle sois portatif au maximum

----------


## tchize_

dans ce cas, j'auras gnr directement la lettre type avec itext, sans passer par du html :/ Avec jodreport tu va gnrer facilement la lettre au format ODT. Le problme c'est que pour faire ODT -> PDF, faudra faire tourner un serveur openoffice et y accder via JODConverter. Ca risque d'tre un peu pratiquable pour une application desktop. Si c'est un appliocation web, comme tout ce fait cot serveur, c'est moins un problme  :;):

----------


## mattrixx

> dans ce cas, j'auras gnr directement la lettre type avec itext, sans passer par du html :/ Avec jodreport tu va gnrer facilement la lettre au format ODT. Le problme c'est que pour faire ODT -> PDF, faudra faire tourner un serveur openoffice et y accder via JODConverter. Ca risque d'tre un peu pratiquable pour une application desktop. Si c'est un appliocation web, comme tout ce fait cot serveur, c'est moins un problme


avec itext comme a ?

et ma lettre type je peux la mettre en page ? facilement ?

c'est  dire comme tout courrier gauche expditeur avec logo, droite destinataire avec date et tout ?

si oui alors je laisse tomber je cherche document itext

mais attention il gnre le document par rapport  une request en db, ce qui veux dire que je boucle sur une arraylist pour afficher par exemple un contenu et adresse puis gnrer le pdf puis on passe au deuxime et ainsi de suite.....

----------


## tchize_

au dessus de itext, il existe jaspert report, qui permet de faire des template que japser report joindra  une banque de donne pour envoyer le tout par itext. C'est la grosse artillerie, peut etre que ca te convient. 

Sinon, itexte te permet de crer des pdf en disant "page 1, l je veux a, l je veux a, l je veux une ligne, l je veux une table etc", donc oui ca permet de gnrer des documents format. Le seul "hic" en utilisant itext seul, c'est que le template, c'est ton code java. Mais comme tu dis que "le template ne bougera pas c'est dans le cahier des charge"....

----------


## OButterlin

Dans ce genre de configuration, j'utiliserais iReport pour le modle et JasperReport pour l'excution

----------


## mattrixx

> au dessus de itext, il existe jaspert report, qui permet de faire des template que japser report joindra  une banque de donne pour envoyer le tout par itext. C'est la grosse artillerie, peut etre que ca te convient. 
> 
> Sinon, itexte te permet de crer des pdf en disant "page 1, l je veux a, l je veux a, l je veux une ligne, l je veux une table etc", donc oui ca permet de gnrer des documents format. Le seul "hic" en utilisant itext seul, c'est que le template, c'est ton code java. Mais comme tu dis que "le template ne bougera pas c'est dans le cahier des charge"....


bon il me reste une semaine pour finalis cela avant de faire le rapport  ::(: 

je vais essayer  de trouver un tuto 

si tu as une bonne adresse je suis preneur

----------


## mattrixx

> Dans ce genre de configuration, j'utiliserais iReport pour le modle et JasperReport pour l'excution


oui j'y ai regarder mais on dirais que c'est des logiciel annexe  ::(: 

maintenant je ne me suis pas plus documenter que cela mais je voudrais que m'ont application sois le plus light et le plus autonome possible

----------


## OButterlin

iReport permet de faire la maquette de tes tats, ensuite, on n'a besoin que des fichiers gnrs.
L'API de jasperreport permet de charger un modle, le compiler, l'enrichir et gnrer une sortie (pdf en l'occurrence).

----------


## mattrixx

> iReport permet de faire la maquette de tes tats, ensuite, on n'a besoin que des fichiers gnrs.
> L'API de jasperreport permet de charger un modle, le compiler, l'enrichir et gnrer une sortie (pdf en l'occurrence).


tu as un bon tuto pour a ?

car je ne vois pas comment venir dire il me faut a ou sa

si tu veux j'ai une mthode qui attend des paramrtres et par rapport  cela il va chercher en db les lments qu'il  besoin pour faire le pdf

----------


## mattrixx

bon je regarde avec ireport et jaspert

j'arrive  faire le rcup des data, mais j'ai un problme dans les expressions

j'ai deux services qui fournissent des ressources diffrentes

donc je dois gnrer deux lettres types pour demander  chaque service de me fournir les ressources qu'il sait donner

le problme est que j'arrive  avoir tous les records, mais il me donne toutes les ressources pour le mme service

Si j'agrandit la page alors il me fait un entte avec le service numro deux, mais ne liste pas les ressources de ce service, car il les a mis au service un.

je voudrais faire si ressource diffrente de ressource prcdente alors page deux services deux avec ressource service deux

a va, vous comprenez ?

merci pour l'aide

----------


## OButterlin

> a va, vous comprenez ?


euh... non... ::aie:: 

Peux-tu tre plus clair ?

----------


## mattrixx

> euh... non...
> 
> Peux-tu tre plus clair ?


je me doutais j'ai crit juste avant de partir du bureau  ::cry:: 

Bon je reprends.

j'ai regard avec ireport j'ai donc taper un template vite fait avec l'adresse de destinataire un petit texte bla bla et les ressources que le destinataire peux fournir

donc par exemple :

Service informatique ==> ressource dispo : portable, cran, ordinateur, projecteur

service travaux ==> ressource dispo : barrire, camion, voiture

l'ide est que pour un vnement j'ai besoin de l'aide de ces deux services.
donc la requte est donne moi pour ce type d'vnement les services qui puisse me donner portable, cran, ordinateur, projecteur, barrire et camion

donc j'ai dans la table vnement pour cet vnement deux services avec plusieurs ressources pour chaque service

 la gnration du document, je dois avoir deux lettres 

Une pour l'informatique avec les ressources dont j'ai besoin et l'autre pour le travaux avec les ressources que celui-ci peut fournir.

Mon problme est que j'ai bien les infos, mais je n'arrive pas  dire pour ce service il faut a et quand tu vois que l'id du service n'est plus le mme alors fait une deuxime page avec nouveau destinataire et nouvelle ressource lie  ce destinataire.

Est-ce que tu comprends mieux ?

encore merci

----------


## OButterlin

J'essaye de traduire :

1- Tu as une premire requte qui te donne une liste de services.
2- Pour chaque service, tu as une liste de ressources disponibles
3- Tu voudrais un saut de page pour chaque service

C'est a ?

----------


## mattrixx

> J'essaye de traduire :
> 
> 1- Tu as une premire requte qui te donne une liste de services.
> 2- Pour chaque service, tu as une liste de ressources disponibles
> 3- Tu voudrais un saut de page pour chaque service
> 
> C'est a ?


oui c'est bien cela que je veux faire mais je n'y arrive pas, j'ai regarder hier sur le net trouver quelque petit truc mais rien qui peux m'aider  ::(: 

si cela serais en code ok je fait des if else et c bon mais la comme c'est une application que je ne connais pas n'y la syntaxe n'y si cela est possible  faire

voici les captures d'cran cela sera plus explicite que mon blabla  ::aie:: 

Le retour de data de la request :


La lettre type avec les champs qui doive etre garnis :


Un grand merci pour ton aide. ici je n'ai plus qu'une semaine on va dire pour clture le code avant de faire le dossier, aprs vais voir pour acheter un livre sur ireport et plus me plonger dedans, mais ici le temps joue contre moi  ::(:

----------


## OButterlin

Pour rpondre  cette problmatique, jasperreports utilise la notion de "sub-report".
En pratique, ton document principale va utiliser une requte sur les services.
Ce document inclura un sous-tat qui fera la requte sur les ressources (en lui passant en paramtre l'id du service).

Pour ce qui est du saut de page  chaque service, regarde les options dans iReport, c'est faisable mais de mmoire, je ne peux pas de donner plus de prcision.

----------


## mattrixx

> Pour rpondre  cette problmatique, jasperreports utilise la notion de "sub-report".
> En pratique, ton document principale va utiliser une requte sur les services.
> Ce document inclura un sous-tat qui fera la requte sur les ressources (en lui passant en paramtre l'id du service).
> 
> Pour ce qui est du saut de page  chaque service, regarde les options dans iReport, c'est faisable mais de mmoire, je ne peux pas de donner plus de prcision.


ok donc tu veux dire que je dois cind cette procdure en deux partie ?


```

```

un peux chaud  une semaine de la prsentation du projet  ::P:

----------


## mattrixx

ok j'ai trouver, sorry mais je n'ai pas su venir le dire plustot  ::): 

en raliter il suffit de faire une catgorie de groupe sur le service et  ce moment il me fait une page par service avec toute les ressources de ce service

donc a roule maintenant  ::): 

merci pour votre aide  ::ccool::

----------

