Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
931 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  obtenir un pdf a partir d'un XML

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

obtenir un pdf a partir d'un XML

n°209243
swich
snps
Posté le 05-09-2002 à 13:40:46  profilanswer
 

voila je dois generer un pdf a partir d'un XML, je suis donc passer par le html (en faisant un fichier XSL), mais o surprise apres avoir utilise HTML2PDF, mes tableaux ne sont plus la, mes images non plus, g plus rien (gras, souligne italique)
il me met un warning a chaque fois qu'il trouve une balise HTML
 
je peux faire comment pour avoir un pdf a partir d'un xml ?
(si y'a moyen d'eviter de passer par un parseur type DOM sous php ben je suis preneur :)
 

mood
Publicité
Posté le 05-09-2002 à 13:40:46  profilanswer
 

n°209246
lorill
Posté le 05-09-2002 à 13:42:32  profilanswer
 

Ben au lieu de generer du html tu fais du xsl:fo et tu fais le pdf par fop par exemple. Ou alors voir du coté de docbook peut-etre.

n°209249
swich
snps
Posté le 05-09-2002 à 13:47:06  profilanswer
 

xsl:fo,  :??:  c koi ca ?

n°209250
lorill
Posté le 05-09-2002 à 13:48:18  profilanswer
 
n°209251
swich
snps
Posté le 05-09-2002 à 13:50:47  profilanswer
 

je sais, c deja fait :)
thx je look ca.

n°209253
swich
snps
Posté le 05-09-2002 à 13:55:58  profilanswer
 

mais petite quesion comme ca en passant, avec ca je pourrai genrer un pdf "en tps reel" pq c pour un site web ca, donc fo que ca puisse se faire en ligne, c bon ou pas ?

n°209254
lorill
Posté le 05-09-2002 à 13:57:42  profilanswer
 

mmmh, ca depends combien de temps tes utilisateurs peuvent attendre... Ca risque d'être trop lent a mon avis.

n°209256
swich
snps
Posté le 05-09-2002 à 13:59:10  profilanswer
 

c'est a dire ?
pq en fait c pour generer une facture en pdf donc au pire y'aura vraiment o pire 4-5 pages

n°209258
lorill
Posté le 05-09-2002 à 14:04:01  profilanswer
 

J'avais des documents relativement simple d'une vingtaine de pages, il fallait bien 10 secondes pour le génerer. Par contre tu peux peut-etre l'envoyer par mail, non ?

n°209259
benou
Posté le 05-09-2002 à 14:04:11  profilanswer
 

swich a écrit a écrit :

c'est a dire ?
pq en fait c pour generer une facture en pdf donc au pire y'aura vraiment o pire 4-5 pages
 




c'est surtout en nombre d'accès simultané à ton site qu'il faut compter ...

mood
Publicité
Posté le 05-09-2002 à 14:04:11  profilanswer
 

n°209260
swich
snps
Posté le 05-09-2002 à 14:05:31  profilanswer
 

bah 10 s pour 20 pages, ca fait 2s pour une page, c bon ca me va :)
et en plus oui je dois l'envoyer par mail
 
par contre ce qui est chiant c tout en anglais, pas une seule expli ou tuto en french :(

n°209263
lorill
Posté le 05-09-2002 à 14:07:43  profilanswer
 

swich a écrit a écrit :

bah 10 s pour 20 pages, ca fait 2s pour une page, c bon ca me va :)
et en plus oui je dois l'envoyer par mail




 
Faut pas compter comme ca, y'a le temps de lancement qui est fixe... Et qui s'ajoute au temps de géneration du source FO et de la génération pdf...  
 
Par contre si tu l'envoie par mail c'est pas un probleme, tu peux le faire tourner en tâche de fond.
 
Edit: s/pas mail/par mail/


Message édité par lorill le 05-09-2002 à 14:09:49
n°209264
swich
snps
Posté le 05-09-2002 à 14:08:55  profilanswer
 

ok ok , je savais pas :)
bon je vais essayer de voir comment ca marche  :sweat:  

n°209278
swich
snps
Posté le 05-09-2002 à 14:28:21  profilanswer
 

euu ptite question comme ca en passant, en fait le xslFO remplace le xsl, mais comment lier le xml et xslfo, c pas dit ds le tuto

n°209282
lorill
Posté le 05-09-2002 à 14:30:23  profilanswer
 

swich a écrit a écrit :

euu ptite question comme ca en passant, en fait le xslFO remplace le xsl, mais comment lier le xml et xslfo, c pas dit ds le tuto




 
Ben comme tu transformais ton xml en html, par xslt a priori. C'est pas comme ca que tu faisais ?

n°209288
swich
snps
Posté le 05-09-2002 à 14:35:55  profilanswer
 

ben qd je veux afficher mon xml je mettais ds mon xml :
<?xml-stylesheet href="affichage_devis.xsl" type="text/xsl ?>  
 et ds mon xsl je faisais des trucs dans le genre :  
<xsl:value-of select="taille"/>  
mais la g rien vu qui ressemble a ca ds le xslFO

n°209291
avander
Posté le 05-09-2002 à 14:40:57  profilanswer
 

XSL comporte deux volets bien distincts : XSLT pour les transformation et XSLFO pour les formatting objects (la présentation quoi). XSLFO c'est une application XML donc c'est un fichier XML avec des balises compréhensible pour un parser FO qui doit présenter le contenu. Comme il n'existe toujours pas on utilise FOP pour convertir le FO en PDF, ainsi on peut voir le résultat avec par exemple Acrobat Reader.  
 
En clair, tu dois écrire un stylesheet XSL qui transforme ton XML initial en (XML pour) FO, ensuite tu présente ce fichier à FOP qui produira le PDF équivalent.  
 
Bon travail! Avander


Message édité par avander le 05-09-2002 à 14:42:25

---------------
A thing of beauty is a joy forever (John Keats)
n°209294
swich
snps
Posté le 05-09-2002 à 14:42:54  profilanswer
 

waouuuu, ca a l'air cho a faire qd meme, non?
ou c le debut qui est galere est apres ca va mieu ?

n°209300
avander
Posté le 05-09-2002 à 14:51:04  profilanswer
 

Il faut bien comprendre la structure et la hiërarchie des FO, après c'est un stylesheet à développer ( pas plus compliqué que de transformer du XML en HTML :-).
 
Voici qq liens pour te mettre sur la bonne voie :
http://www.xml.com/pub/a/2001/01/17/xsl-fo/index.html
http://www.xml.com/pub/a/2001/01/24/xsl-fo/
 
http://www.xml.com/pub/a/2002/03/20/xsl-fo.html
 
Avander


Message édité par avander le 05-09-2002 à 14:54:58

---------------
A thing of beauty is a joy forever (John Keats)
n°209310
swich
snps
Posté le 05-09-2002 à 14:56:07  profilanswer
 

ok merci bien je vais regarder ca

n°209325
swich
snps
Posté le 05-09-2002 à 15:21:26  profilanswer
 

qq'un peut il me faire un ptit exemple avec ca (juste avoir un tablo)
si mon fichier xml fait :
<rep>
   <contact>  
    <nom>to</nom>
    <prenom> to </prenom>
   </contact>
<contact>  
    <nom>ti</nom>
    <prenom> ti </prenom>
   </contact>
<contact>  
    <nom>ta</nom>
    <prenom> ta </prenom>
</contact>
</rep>
 
et mon xsl :
 
<table>
<xsl:for-each select="rep">
<tr>
<td> <xsl:value-of select="nom"/> </td>
<td> <xsl:value-of select="prenom"/> </td>
</tr>
</xsl:for-each>
</table>
 
pour avoir le meme avec xslFO ...
pq la je capte pas vraiment le truc :(
 

n°209394
avander
Posté le 05-09-2002 à 17:11:18  profilanswer
 

J'ai fait un stylesheet pour ton exemple, est-ce qu'il y moyen de te faire parvenir ces fichiers autrement qu'en les déversant directement sur le forum pcq. c'est assez long et je veux pas m'attirer les foudres des modérateurs...
 
Avander


---------------
A thing of beauty is a joy forever (John Keats)
n°209402
benou
Posté le 05-09-2002 à 17:27:04  profilanswer
 

bha ouais mais en même temp je suis assez curieux moi. Je pense pas que ca dérange les modos ... et puis c'est charte compliant ! ;)

n°209764
swich
snps
Posté le 06-09-2002 à 08:46:30  profilanswer
 

-> avander  
va voir tes messages perso
:)

n°209802
avander
Posté le 06-09-2002 à 10:14:13  profilanswer
 

Pour les curieux ;-) et pour la bonne cause voici d'abord le xml qui reprend l'exemple donné par swich :
 
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<rep>
  <contact>
   <nom>to</nom>
   <prenom> to </prenom>
  </contact>
<contact>
   <nom>ti</nom>
   <prenom> ti </prenom>
  </contact>
<contact>
   <nom>ta</nom>
   <prenom> ta </prenom>
</contact>
</rep>
<!-- eof -->
 
Le stylesheet qui va transformer cela en FO (attention les yeux c'est un peu long!) :
 
<?xml version='1.0' encoding="ISO-8859-1"?>
<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
  xmlns:fo="http://www.w3.org/1999/XSL/Format">
 
  <xsl:output method="xml" encoding="ISO-8859-1"/>
 
 
  <xsl:template match="/">
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
 
      <fo:layout-master-set>
 
        <!-- description des types de pages (ex. première, gauche et droite) -->
        <fo:simple-page-master master-name="cover"
            page-height="29.7cm" page-width="21cm"
            margin-top="1cm" margin-bottom="1cm"
            margin-left="2.5cm" margin-right="2.0cm">
          <fo:region-body/></fo:simple-page-master>
        <fo:simple-page-master master-name="left"
            page-height="29.7cm" page-width="21cm"
            margin-top="1cm" margin-bottom="0cm"
            margin-left="2.0cm" margin-right="2.5cm">
          <fo:region-before extent="1cm"/>
          <fo:region-body margin-top="1.1cm" margin-bottom="2.1cm"/>
          <fo:region-after extent="2cm"/></fo:simple-page-master>
        <fo:simple-page-master master-name="right"
            page-height="29.7cm" page-width="21cm"
            margin-top="1cm" margin-bottom="0cm"
            margin-left="2.5cm" margin-right="2.0cm">
          <fo:region-before extent="1cm"/>
          <fo:region-body margin-top="1.1cm" margin-bottom="2.1cm"/>
          <fo:region-after extent="2cm"/></fo:simple-page-master>
 
        <!-- description de la sequence des pages -->
        <fo:page-sequence-master master-name="contents" >
        <fo:repeatable-page-master-alternatives>
            <fo:conditional-page-master-reference master-name="left" odd-or-even="even"/>
            <fo:conditional-page-master-reference master-name="right" odd-or-even="odd"/></fo:repeatable-page-master-alternatives></fo:page-sequence-master></fo:layout-master-set>
 
      <!-- definition des flots de texte -->
      <fo:page-sequence master-name="contents" initial-page-number="1" language="fr">
 
        <!-- entête de page -->
        <fo:static-content flow-name="xsl-region-before">
          <fo:table>
            <!-- 2do: generate these automatically! -->
            <fo:table-column column-width="10cm"/>
            <fo:table-column column-width="5cm"/>
            <fo:table-body>
              <fo:table-row>
                <fo:table-cell>
                  <fo:block font-family="Helvetica" font-size="8pt" text-align="start">
                    XSL-FO quickie!</fo:block></fo:table-cell>
                <fo:table-cell>
                  <fo:block font-family="Helvetica" font-size="8pt" text-align="end">
                    Avander</fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:static-content>
 
        <!-- pied de page -->
        <fo:static-content flow-name="xsl-region-after">
          <fo:block font-family="Helvetica" font-size="8pt" text-align="center" space-before.optimum="10pt" space-after.optimum="1pt">
            <fo:leader leader-pattern="rule" rule-thickness="1pt" leader-length="100%"/></fo:block>
          <fo:table>
            <!-- 2do: generate these automatically! -->
            <fo:table-column column-width="6cm"/>
            <fo:table-column column-width="4cm"/>
            <fo:table-column column-width="6cm"/>
            <fo:table-body>
              <fo:table-row>
                <fo:table-cell>
                  <fo:block font-family="Helvetica" font-size="8pt" text-align="start">
                    zRep<xsl:text>.pdf</xsl:text></fo:block></fo:table-cell>
                <fo:table-cell>
                  <fo:block font-family="Helvetica" font-size="8pt" text-align="center">
                    <xsl:text>- </xsl:text>
                    <fo:page-number/>
                    <xsl:text> -</xsl:text></fo:block></fo:table-cell>
                <fo:table-cell>
                  <fo:block font-family="Helvetica" font-size="8pt" text-align="end">
                    <xsl:text>Dernière mise à jour : 05/09/2002</xsl:text></fo:block></fo:table-cell></fo:table-row></fo:table-body></fo:table></fo:static-content>
 
        <!-- corps de page -->
        <fo:flow flow-name="xsl-region-body">
 
          <xsl:apply-templates/></fo:flow></fo:page-sequence></fo:root></xsl:template>
 
<!-- debug only : flags all elements without template -->
  <xsl:template match="*">
    <fo:block>
      <xsl:text>???</xsl:text>
      <xsl:apply-templates/></fo:block></xsl:template>
 
<!-- blocks -->
  <xsl:template match="rep">
    <fo:table space-after.optimum="10pt">
      <!-- 2do: generate these automatically! -->
      <fo:table-column column-width="8cm"/>
      <fo:table-column column-width="8cm"/>
      <fo:table-body>
 
        <xsl:apply-templates/></fo:table-body></fo:table></xsl:template>
 
 
  <xsl:template match="contact">
    <fo:table-row>
      <xsl:apply-templates/></fo:table-row></xsl:template>
 
 
  <xsl:template match="nom|prenom">
    <fo:table-cell border-width="1px" border-style="solid" >
      <fo:block font-size="10pt" font-family="Times-Roman" vertical-align="top">
 
        <xsl:value-of select="."/></fo:block></fo:table-cell></xsl:template>
 
</xsl:stylesheet>
<!-- eof -->
 
Après transformation du xml par le stylesheet vous obtenez du FO ( càd. un fichier xml qui décrit la présentation à l'aide de formatting objects). Pour voir à quoi cela ressemble on convertit généralement le fichier FO en PDF avec l'application FOP.  
 
Désolé, les smilies c'était pas prévu!
Avander


Message édité par avander le 06-09-2002 à 10:15:30

---------------
A thing of beauty is a joy forever (John Keats)
n°209829
swich
snps
Posté le 06-09-2002 à 11:05:31  profilanswer
 

lol les smiley ds le code
 :D

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  obtenir un pdf a partir d'un XML

 

Sujets relatifs
[TCL/tk] obtenir des info sur l'écran[XML] Y a-t-il un browser qui supporte VRAIMENT le XML?
[PostGreSQL] Pilote ODBC et connexion a partir de windowscomment obtenir la largeur d'une image?
[C/C++]Un mini parser XML ?[HTML, JS] Modifier le contenu d'une frame à partir d'une autre
[JAVA, XML]inclure des .xml dans du xml[XML] XML et le web... (Transforming)
[XML / XSL] Comment formaté du texte contenu dans une balise xml ?[Palm os] Faire un annuaire sous plam a partir d'un .txt
Plus de sujets relatifs à : obtenir un pdf a partir d'un XML


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR