IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants FMX Delphi Discussion :

Delphi Générer un PDF


Sujet :

Composants FMX Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2006
    Messages : 621
    Par défaut Delphi Générer un PDF
    Bonjour à tous,

    Je suis sous Delphi XE2 et je développe sous FireMonkey à destination de Win32 ET MAC OSX.
    j'ai besoin pour un soft de générer un fichier PDF qui aurait l'allure du fichier en PJ. Ca veut dire plusieurs choses :
    • d'abord comme je suis sous FMX, aucune lib ne pourra être basée sur VCL ce qui exclut par exemple SynPDF (excellente au demeurant)
    • pas de solution à base de DLL ou d'OCX ou d'ActiveX (pas dispo sous Mac)
    • si possible libre ou pas trop chère
    • Si possible pas de composant ou de package à installer je préfère la bonne vieille solution du code...
    • pas d'utilisation d'une imprimante virtuelle

    Je n'ai pas forcément besoin de fonctions avancées (codage, protection...), j'ai juste besoin de pouvoir spécifier les polices, de mettre des images, des cadres, orienter un peu le texte...

    Pour l'imprimante virtuelle, éventuellement ça pourrait le faire car le MAC sait imprimer du PDF, et sous windows il existe maintenant des solutions pour imprimer des PDF. Par contre, je maîtrise pas du tout la création d'une page à imprimer... J'ai jamais fait ça. Juste un petit essai rapide avec Rave mais bon je maîtrise pas du tout...

    Voila. Je sais pas trop si je vais trouver ça mais on sait jamais, y a bien un khador quelque part qui a fait ça...

    Merci d'avance.
    Images attachées Images attachées  

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Salut, c'est quel JDR ça ?

    bon je ne sais pas si ça existe sous Delphi, mais en PHP FPDF permet de gérérer du PDF en PHP à partir de rien.

    En fait les fichiers PDF sont un peu à l'image du HTML ou du RTF une série de tags le tout compressé avec ZLIB.

    Si tu connais un peu PHP tu peux retrouver assez facilement comment reproduire le code de FPDF sous Delphi.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre éclairé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2006
    Messages : 621
    Par défaut
    Tiens mon message a été déplacé dans FMX. Je m'étais posé la question, partant du principe que ma demande n'est pas spécifique à FMX, elle est réellement générale à Delphi.
    J'avais juste un peu peur que l'audience ne soit pas au RDV dans le forum FMX...

    Merci Paul pour l'info. le JDR C'est Donjons et Dragons 3.5
    J'avais à l'époque récupéré une doc assez lourde sur le format PDF, et je dois avouer qu'à part le format Office Xml, j'ai pas trouvé grand chose de plus compliqué... Je comprends pourquoi les libs PDF coutent en general 400€... Dire que c'est proche du HTML compressé est eput être un peu... exagéré...
    Et je connais pas du tout PHP. Par contre si quelqu'un dispose d'une doc assez claire et sympa sur le format PDF je suis preneur...

    Pour PDF Writer, je vais regarder ce soir. Mais j'ai pas l'impression que ça ait beaucoup bougé ce truc...

  4. #4
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Non je ne plaisante pas

    d'ailleurs la compression n'est pas obligatoire:

    tu fais un copier coller ce texte dans Notepad, tu l'enregistres avec l'extension .PDF et tu as un PDF!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    %PDF-1.7
    1 0 obj
    <</Type/Catalog/Pages 2 0 R>>
    endobj
    2 0 obj
    <</Type/Pages/Kids[3 0 R ]/Count 1>>
    endobj
    3 0 obj
    <</Type/Page/Parent 2 0 R/MediaBox[0 0 595.28 841.89]/Resources<</Font<</F1 6 0 R>>/ProcSet[/PDF/Text]>>/Annots[5 0 R]/Contents 4 0 R>>
    endobj
    4 0 obj
    <</Length 38>>stream
    BT /F1 10 Tf 10 750 TD [(Hello)] TJ ET
    endstream
    endobj
    5 0 obj
    <<
     /Type/Annot
     /Subtype/Widget
     /Rect[14.17 813.68 127.56 827.72]
     /AP <</N 7 0 R>>
     /FT/Tx
     /Contents(nom)
     /P 3 0 R
     /NM(0001-0000)
     /M(D:20110916215246+04'00')
     /F 4
     /Border[0 0 1]
     /MK<<
      /BC[0.50 0.50 0.50]
    	/BG[1.00 1.00 1.00]
      /IF<</A[0.50 0.50]>>
    	/TP 0
     >>
     /T(nom)
     /Ff 0
     /V(Paul 18/09/2011 18:20)
     /DA(/F1 10.00 Tf 0.000 0.000 0.000 rg)
     /Q 0
     >>
    endobj
    6 0 obj
    <</Type/Font /Subtype/Type1 /BaseFont/Helvetica /Name/F1 /Encoding/WinAnsiEncoding >>
    endobj
    7 0 obj
    <</Type/XObject /Subtype/Form /FormType 1 /BBox[0 0 113.39 14.04] /Matrix[1 0 0 1 0 0] /Resources<</ProcSet[/PDF]>>/Length 43>>stream
    q BT /F1 10.00 Tf 0.000 0.000 0.000 rg ET Q
    endstream
    endobj
    xref
    0 8
    0000000000 65535 f
    0000000009 00000 n
    0000000054 00000 n
    0000000106 00000 n
    0000000257 00000 n
    0000000342 00000 n
    0000000744 00000 n
    0000000845 00000 n
    trailer
    <</Size 10/Root 1 0 R>>
    startxref
    1048
    %%EOF
    c'est un test que j'avais fait sur les formulaires PDF.

    et en pièce joint le script PHP qui l'a généré...pas très compliqué à comprendre, bien que la syntaxe des "objets" PDF ne soit pas expliquée, ça donne une idée de la structure du fichier PDF.
    paul.php
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre éclairé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2006
    Messages : 621
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    Non je ne plaisante pas
    Ben alors tu fumes un truc pas net alors... Toute blague mise à part, ça m'a l'air tout ce qu'on veut sauf trivial... Je comprends bien l'analogie avec XML ou HTML pour la syntaxe générale, mais ça s'arrête là...
    Mais je loue l'effort consistant à venir à mon secours, y a du boulot...
    Citation Envoyé par Paul TOTH Voir le message
    ...et en pièce joint le script PHP qui l'a généré...pas très compliqué à comprendre, bien que la syntaxe des "objets" PDF ne soit pas expliquée, ça donne une idée de la structure du fichier PDF.
    paul.php
    Ouaip ça donne une idée, de la complexité.
    Bon je note l'idée, masi je dosi avouer que je penche plus vers la solution de Shai et du canvas, ça me semble plus simple et moins "propriétaire" que le PDF. A moins que je mette la main sur un tuto élégant et simple qui explique comment générer le PDF de façon simple. Je vais me mettre en rapport avec la personne qui a développe le truc en PHP sait-on jamais.

  6. #6
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par arkhamon Voir le message
    Bon je note l'idée, masi je dosi avouer que je penche plus vers la solution de Shai et du canvas, ça me semble plus simple et moins "propriétaire" que le PDF.
    en même temps c'est toi qui demandait du PDF

    PDF 1.7 devient une norme ISO !

    Introduction to PDF
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 093
    Par défaut
    Citation Envoyé par arkhamon Voir le message
    pas de solution à base de DLL ou d'OCX ou d'ActiveX (pas dispo sous Mac)
    Tu exagère LoadLibrary en FMX charge une bibliothèque liée dynamiquement (DLL) Windows ou un fichier objet partagé MAC OS (dylib)

    Tu peux donc avoir une encapsulation POO des libraires tiers DLL\dylib !
    un objet ou interface ancêtre qui défini des méthodes
    Selon une directive de compilation, tu enregistre la classe d'implémentation (un RegisterClass et une Factory) ou alors tu utilises un singleton

    Chaque classe d'implémentation répondra à la demande d'impression avec un code spécifique pour chacune !

    Tu es très exigeant sur la réponse
    Si tu veux du code pur, étudie le format PDF et ses balises et génère le à la main

    Citation Envoyé par arkhamon Voir le message
    Pour l'imprimante virtuelle, éventuellement ça pourrait le faire car le MAC sait imprimer du PDF, et sous windows il existe maintenant des solutions pour imprimer des PDF. Par contre, je maîtrise pas du tout la création d'une page à imprimer... J'ai jamais fait ça. Juste un petit essai rapide avec Rave mais bon je maîtrise pas du tout...
    Tu devrais plutôt faire ce choix !
    Si tu n'es pas à l'aise avec Rave ou FastReport (j'ignore si ça fonctionne en FMX)
    Utilise FMX.TPrinter donnant accès à un FMX.TCanvas, et ça je pense que tu maitrise !
    Pense que l'imprimante c'est 300 ou 600 dpi, donc un Canvas de 3000x4000 ou 6000x8000 que tu devrais lire dans PageHeight et PageWidth
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Membre éclairé

    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2006
    Messages
    621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2006
    Messages : 621
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Tu exagère LoadLibrary en FMX charge une bibliothèque liée dynamiquement (DLL) Windows ou un fichier objet partagé MAC OS (dylib)

    Tu peux donc avoir une encapsulation POO des libraires tiers DLL\dylib !
    un objet ou interface ancêtre qui défini des méthodes
    Selon une directive de compilation, tu enregistre la classe d'implémentation (un RegisterClass et une Factory) ou alors tu utilises un singleton
    Ca y est tout de suite les grands mots... que je comprends pas. Bon j'ai certainement oublié de le dire, mais je ne suis (plus) un grand spécialiste de Delphi, ou plutôt des évolutions du langage. Donc Singleton et autres bizarreries de ce genre qui n'existaient pas à l'époque (genre 1998) j'ai pas eu le temps d'intégrer... Je dois avouer que j'en suis resté à ce qu'il était nécessaire de connaître pour faire des applis de base. Utiliser des libs externes, ça je sais à peu près, mais je suis pas fana...Surtout s'il faut le faire et sur Win32 et sur OSX. En plus ça va demander des softs supplémentaires, et comme on va aprtager le soft avec des potes, j'évite toutes les soluces externes autant que faire se peut.


    Citation Envoyé par ShaiLeTroll Voir le message
    Tu es très exigeant sur la réponse
    ah bon ?
    Citation Envoyé par ShaiLeTroll Voir le message
    Si tu veux du code pur, étudie le format PDF et ses balises et génère le à la main :
    : aussi...


    Citation Envoyé par ShaiLeTroll Voir le message
    Tu devrais plutôt faire ce choix !
    Si tu n'es pas à l'aise avec Rave ou FastReport (j'ignore si ça fonctionne en FMX)
    Utilise FMX.TPrinter donnant accès à un FMX.TCanvas, et ça je pense que tu maitrise !
    Pense que l'imprimante c'est 300 ou 600 dpi, donc un Canvas de 3000x4000 ou 6000x8000 que tu devrais lire dans PageHeight et PageWidth
    Ca ça me paraît déjà une bonne soluce... Y a une doc et des tutos quelque part pour faire ça ? Je dois avouer que l'impression sous Windows c'est un truc que j'ai toujours trouvé compliqué... Mais bon rien n'est impossible...

  9. #9
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 093
    Par défaut
    Citation Envoyé par arkhamon Voir le message
    Donc si je comprends bien (parce que je suis pas toujours très "aware"...). Pour générer ma petite impression ...
    Attention, l'objet TCanvas tu ne le crées pas, il est fourni comme propriété de Printer.Canvas, il existe déjà

    Tu manipules le FMX.Printer.Canvas comme un grand dessin, tu peux donc faire tout ce que tu veux, tu verras que dessiner sur une grande échelle n'est pas évident, je l'ai fait en 1999 pour un listing de code barre !
    Tu verras aussi que l'image sera surement moche à cause de son étirement d'un format "écran" à un format papier (un zoom entier sera préférable, possible que FMX fournisse des zoom issu de D2D ou MacOS plus performant que celle du GDI Windows (au bureau, mon collègue utilise GDI+ pour cette problématique de zoom)

    La Remarque de Nono40 de gérer un TCanvas lié à Printer ou Bitmap pour les tests est très pertinente ! Cela m'aurait surement éviter des soucis (j'imprimais dans un fichier de l'outil KODAK de Win98 à l'époque)
    Même si l'aperçu peut-être parfait, l'impression tout à souvent un pixel trop à droite ou qui manque en fin de ligne

    Tu peux même tricher !

    TControl.PaintTo, tu imprimes directement un écran sur l'imprimante, il faut déterminer le zoom avec Printer.PageHeight et Printer.PageWidth

    J'avais utilisé ce moyen pour imprimer une grille TMS dans un Bitmap puis sur Printer, je prenais un zoom entier pour éviter les dégradations du StrechDraw
    En paysage, c'était x3 ou x6, en Portrait, x2 et x4, un petit calcul cherchait le ratio entier entre Grid.Rect et Canvas.Rect, sans me soucier de Grid.PixelPerInch ni de GetDeviceCaps avec HORZSIZE, VERTSIZE, LOGPIXELSX, LOGPIXELSY...


    Citation Envoyé par arkhamon Voir le message
    Ca y est tout de suite les grands mots... que je comprends pas.
    De quoi te documenter alors !

    Citation Envoyé par arkhamon Voir le message
    mais je ne suis (plus) un grand spécialiste de Delphi, ou plutôt des évolutions du langage. Donc Singleton et autres bizarreries de ce genre qui n'existaient pas à l'époque (genre 1998) j'ai pas eu le temps d'intégrer...
    Ces Bizarries ce sont les Design Pattern un est concept générale pouvant s'appliquer à différents domaines mais cela a été surtout popularisé en informatique dès 1995 a peu près en même temps que JAVA !
    Ben oui, la POO c'est bien mais sans architecture cela peut devenir du grand n'importe quoi !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Générer un PDF en Java
    Par joneil dans le forum Documents
    Réponses: 7
    Dernier message: 25/02/2012, 15h14
  2. Générer du pdf
    Par illegalsene dans le forum Documents
    Réponses: 5
    Dernier message: 04/05/2005, 14h20
  3. Librairies gratuites pour générer du PDF
    Par Noxexplorer dans le forum ASP
    Réponses: 2
    Dernier message: 02/05/2005, 20h18
  4. Réponses: 5
    Dernier message: 08/07/2002, 16h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo