Exportation PDF avec contraintes

jejelg3 Messages postés 7 Date d'inscription mercredi 6 décembre 2006 Statut Membre Dernière intervention 31 mai 2008 - 29 mai 2008 à 16:07
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013 - 31 mai 2008 à 20:28
Bonjour à tous !

Contexte :
Je développe actuellement un programme en ColdFusion (ColdFusion MX7) afin de générer un rapport PDF à partir d'un catalogue de données contenues dans une base de données MySQL. Pour résumer le procédé, il y a une table dans la database avec deux champs (nom de la donnée + contenu). Le rapport doit contenir toutes les données de cette table (nom + contenu).

Contrainte :
- Le contenu d'une donnée fait parfois référence à une autre donnée du catalogue. Cette référence doit être remplacée par le numéro de page de la donnée pointée dans le fichier PDF généré.
- Un index doit être généré à la fin du rapport PDF avec le nom de chaque donnée et le numéro de page ou celle ci est localisée dans le PDF.

Solution :
- A fur et a mesure de la génération du rapport, stocker dans un tableau temporaire (que nous nommerons ici tabTemp) les numéros de pages correspondant aux données. Puis après la génération du rapport PDF, refaire une seconde "pass" en remplaçant toutes les références (identifiées par une balise spécifiques <reference= nom_de_la_donnee>) par le numéro de la page. Enfin, générer l'index à l'aide du même tableau temporaire (tabTemp). Solution qui a l'air facilement réalisable et pourtant...

Problème :
Il est impossible en ColdFusion MX7 de récupérer le numéro de page courant pour le stocker dans un tableau temporaire (cf le site Adobe : "The cfdocument scope variables are reserved for page number rendering. Do not use them in ColdFusion expressions."). De plus, impossible de retravailler un fichier PDF déjà créé afin d'effectuer les modifications nécessaires et d'y ajouter l'index.

Autres solutions envisagées pour contourner ce problème :
- Exporter vers un autre format que PDF (Word ?) puis ???
- Générer ce rapport à l'aide d'une autre technologie intégrable au projet ColdFusion existant (javascript ? php ?). Trop lourd à développer ?
- Avant de générer le rapport, analyser les données et calculer (prévoir) à l'avance sur combien de page (au format X fois Y) la donnée va telle être contenue. Deuxième étape : remplacer toutes les références par les numéros de page hypothètiques. Enfin, générer le dit rapport. ===> Oui, mais comment anticiper sur le nombre de pages à prévoir ?
- Autres solutions ?

Après de NOMBREUSES recherches sur le web, impossible de trouver une quelconque piste expoitable. Mon projet est complètement bloqué depuis un moment. Bref, je galère ! Avez-vous une idée ? Toutes vous suggestions sont les bienvenues. Merci pour votre aide.

9 réponses

nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
30 mai 2008 à 10:37
Bonjour,

je n'ai pas encore eu l'occasion d'approfondir le générateur de pdf.
Mais, normalement il est possible par exemple de généré un pdf au départ d'une page html et coldfusion se charge lui-même de transposer la structure, le style, etc au niveau du pdf.
Comme il est possible d'utiliser les ancres au niveau html (ex : une FAQ), ne serait-ce pas une piste à suivre ? Comment Coldfusion transpose-t-il les ancres HTML au niveau du pdf ?

Nickadele
0
jejelg3 Messages postés 7 Date d'inscription mercredi 6 décembre 2006 Statut Membre Dernière intervention 31 mai 2008
30 mai 2008 à 17:15
Bonjour et merci à toi nickadele pour ta suggestion.

Oui, bien sur il est possible de générer facilement et rapidement un PDF à partir d'une page HTML. D'ailleurs, cela s'effectue sans connaissance approfondie du langage. Malheureusement pour des utilisations avancées, cela est très limité. D'autant plus en ColdFusion version MX7. Mon problème n'est pas juste de générer un fichier PDF mais d'effectuer des opérations lors de la génération.

Je pense que ton idée d'ancres au niveau HTML peut être une piste à suivre. Mais comment à la fin de la génération retrouver le numéro de page de chaque ancre dans le document PDF et ainsi générer un index à la fin du PDF. De plus, cela se corse davantage lorsqu'il s'agit de retravailler ce PDF afin de remplacer toutes les références d'une page vers une autre grace aux ancres.

Merci à tous pour toutes vos idées sur cette piste et je reste également ouvert à toutes autres suggestions...
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
31 mai 2008 à 11:03
Re,

je viens de faire un test avec une page contenant des ancres, cela fonctionne très bien.
Pas besoin de connaître le numéro de page de destination de l'ancre, coldfusion se charge de transposer les ancres html en bookmark pdf !
Ce que j'ai fait :
1. création de ma page en html (voir exemple ci-dessous)
2. test de la page au format html, afin de s'assurer qu'au niveau html les ancres soient bien définies.
3. Ajout de la fonction cfdocument

Nickadele
----------------------------------------------
non, ma belle ne s'appel pas Adèle
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
31 mai 2008 à 11:04
<cfheader name="Content-Disposition" value="inline; filename=test.pdf">
<cfdocument format="pdf">
<cfoutput>
<html>

aller au test 1

aller au test 2

aller au test 3

aller au test 4

aller au test 5

aller au test 6

aller au test 7

aller au test 8

























































titre test1

























































titre test2

























































titre test3

























































titre test4

























































titre test5

























































titre test6

























































titre test7

























































titre test8
























































</html>
</cfoutput>
</cfdocument>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jejelg3 Messages postés 7 Date d'inscription mercredi 6 décembre 2006 Statut Membre Dernière intervention 31 mai 2008
31 mai 2008 à 19:01
Re bonjour et re merci à toi nickadele pour ta réponse.

Merci de m'avoir expliqué comment insérer des ancres HTML. Cependant, ce n'était pas du tout ce qui me posé problème. Je savais déjà insérer des ancres HTML dans un document PDF généré avec ColdFusion.

Ce qui me posé problème et qui me pose encore problème est "comment à la fin de la génération (avec les ancres HTML dans le PDF) retrouver le numéro de la page de
chaque ancre dans le but de créer un index à la fin du
PDF".

Je rappelle à tous que l'objectif est de générer un catalogue de données au format PDF avec un index "dynamique" à la fin de ce PDF (index de chaque donnée avec son numéro de page). Poser des ancres HTML pour repérer une donnée dans le catalogue c'est bien mais le but reste d'afficher les numéros de page de ces ancres dans le PDF.

Merci encore pour tous vos efforts. Bien cordialement !
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
31 mai 2008 à 19:15
Re,

as tu essayé en gérant les breackpage ?
as tu des éléments qui définissent une taille de contenu ?

Nickadele
----------------------------------------------
non, ma belle ne s'appel pas Adèle
0
jejelg3 Messages postés 7 Date d'inscription mercredi 6 décembre 2006 Statut Membre Dernière intervention 31 mai 2008
31 mai 2008 à 20:17
Impossible de gérer ce problème avec des "pagebreak" car deux données peuvent se situer sur la même page. Il ne doit pas y avoir de blanc dans une page. Explication : les données sont affichées à les unes à la suite des autres dans le PDF.

Exemple de génératon PDF
:

Les "-----------------------------" représentent les délimiteurs de page dans le fichier PDF. Chaque donnée est représentée par un titre et du texte ("blablabla...").

-----------------------------
Donnée 1

blablablablablabla
blablablablablabla
blablablablablabla
blablablablablabla

blablablablablabla

blablablablablabla
blablablablablabla
-----------------------------
blablablablablabla
blablablablablabla
blablablablablabla
blablablablablabla
blablablablablabla

blablablablablabla
blablablablablabla
blablablablablabla
blablablablablabla

-----------------------------

blablablablablabla

blablablablablabla

blablablablablabla

blablablablablabla


Donnée 2


blablablablablabla

blablablablablabla

blablablablablabla
-----------------------------
blablablablablabla
blablablablablabla
blablablablablabla

Donnée 3

blablablablablabla
blablablablablabla
blablablablablabla
-----------------------------

Donnée 4

blablablablablabla
blablablablablabla
blablablablablabla
blablablablablabla
blablablablablabla
blablablablablabla
blablablablablabla

-----------------------------

INDEX A AFFICHER

Donnée 1        page 1
Donnée 2        page 3
Donnée 3        page 4
Donnée 4        page 5

-----------------------------
0
jejelg3 Messages postés 7 Date d'inscription mercredi 6 décembre 2006 Statut Membre Dernière intervention 31 mai 2008
31 mai 2008 à 20:21
Petite précision :

Je connais la taille du conteneur (taille de la page) mais pas du contenu. La taille du contenu change selon la donnée. Certaines données tiennent sur deux pages, d'autres sur 10 pages, d'autres sur une demi page, etc (génération PDF "dynamique").

D'autant plus que le texte d'une donnée peut être écrit de plusieurs tailles différentes. Tantôt une taille
et parfois et une autre taille
. Donc cela n'occupe pas la même place dans le PDF.

Cordialement !
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
31 mai 2008 à 20:28
Je pense que tu n'auras pas d'autres solutions que d'utiliser ta troisième proposition :
"Avant de générer le rapport, analyser les données et calculer (prévoir) à l'avance sur combien de page (au format X fois Y) la donnée va telle être contenue. Deuxième étape : remplacer toutes les références par les numéros de page hypothètiques. Enfin, générer le dit rapport."

Nickadele
----------------------------------------------
non, ma belle ne s'appel pas Adèle
0