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

  1. #1
    Membre éprouvé

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

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2006
    Messages : 621
    Points : 1 264
    Points
    1 264
    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 sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    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.

  3. #3
    Membre éprouvé

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

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2006
    Messages : 621
    Points : 1 264
    Points
    1 264
    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 sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 633
    Points : 25 340
    Points
    25 340
    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

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    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

  6. #6
    Membre éprouvé

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

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2006
    Messages : 621
    Points : 1 264
    Points
    1 264
    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...

  7. #7
    Membre éprouvé

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

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2006
    Messages : 621
    Points : 1 264
    Points
    1 264
    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.

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    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

  9. #9
    Membre éprouvé

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

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2006
    Messages : 621
    Points : 1 264
    Points
    1 264
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    en même temps c'est toi qui demandait du PDF
    C'est pas faux. En même temps, dans "PDF" y a "P" comme portable, et "D" comme document. Pile poil les deux trucs qui m'intéressent...
    Mais bon plus je regarde, et plus je me dis que je vais probablemtn investir mon (faible) temps dispo dans le canvas de FMX...

  10. #10
    Membre éprouvé

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

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2006
    Messages : 621
    Points : 1 264
    Points
    1 264
    Par défaut
    Donc si je comprends bien (parce que je suis pas toujours très "aware"...). Pour générer ma petite impression :
    • je crée un objet Tprinter.
    • je fais un BeginDoc
    • je crée une nouvelle page avec NewPage
    • La dedans, je crée un objet TCanvas
    • Dans cet objet TCanvas, je fais une série d'appels à des trucs comme Drawrect,DrawPath, DrawBitMap, FillRect, FillText....
    • Je fais un EndDoc

    Et hop c'est fait ?

    J'arriverai à obtenir l'équivalent de ce que j'avais mis ne PJ au début avec les polices et les couleurs et tout et tout ?

    L'appel à la fenêtre de configuration de l'impression il se fait quand ?

  11. #11
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 104
    Points
    19 104
    Par défaut
    Si tu ajoutes Printers dans le USES tu auras un objet Printer déjà créé avec l'imprimante par défaut.

    Pour gérer la sélection d'imprimante, regarde dans l'onglet "Dialog" tu a un TPrinterDialog" et un "TPrinterSetupDialog".

    Sinon oui pour dessiner tu auras tous les outils que tu veux avec le TCanvas. Regarde l'aide Delphi de TCanvas.

    Attention que la taille du canevas varie énormément d'une imprimante à une autre. Il faut que tu tienne compte de la taille réelle et travailler en proportion. TCanvas.Width et TCanvas.Height te donnent la taille.

    En VCL je créais une procédure qui dessine sur un TCanvas que j'appelais deux fois : une fois avec un TImage.Picture.Bitmap pour avoir un aperçu puis une fois avec un TPrinter.Canvas.
    Tu peux comme cela tester ta procédure et ton affichage sans avoir à imprimer. J'espère pour toi qu'en FMX tu peux faire la même chose.

  12. #12
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 633
    Points : 25 340
    Points
    25 340
    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 !

  13. #13
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 803
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 803
    Points : 13 485
    Points
    13 485
    Par défaut
    Citation Envoyé par Nono40 Voir le message
    Attention que la taille du canevas varie énormément d'une imprimante à une autre. Il faut que tu tienne compte de la taille réelle et travailler en proportion.
    On peut travailler directement en mm et ainsi ne plus avoir à se préoccuper des résolutions X/Y de l'imprimante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //Les positions et tailles ne sont plus exprimées en pixel, mais en 100ème de mm
    SetMapMode(Printer.Canvas.Handle, MM_HIMETRIC);

  14. #14
    Membre éprouvé

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

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2006
    Messages : 621
    Points : 1 264
    Points
    1 264
    Par défaut
    Je commence à comprendre un peu mieux.
    Petite question (qui ne clôt pas le débat) :quand j'aurai fini le canvas, et que je vais lancer l'impression en sélectionnant "Imprimer dans un fichier PDF", le resultat ca va être quoi : un fichier PDF contenant des pages BMP ou ca va garder des champs texte, des rectangles et des BMP ?

    Je pense avoir une petite idée de la réponse ("ben pourquoi tu pense que des mecs ont pondu PostScript ?") mais bon on sait jamais...

  15. #15
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 633
    Points : 25 340
    Points
    25 340
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    On peut travailler directement en mm et ainsi ne plus avoir à se préoccuper des résolutions X/Y de l'imprimante:
    La technique du SetMapMode, c'est effectivement plus pratique !
    Cela existait déjà Win98 et NT4, si j'avais su, j'aurais pas fumé avec mes conversions !

    MM_HIMETRIC Each logical unit is mapped to 0.01 millimeter. Positive x is to the right; positive y is up.
    MM_LOMETRIC Each logical unit is mapped to 0.1 millimeter. Positive x is to the right; positive y is up.
    MM_TEXT Each logical unit is mapped to one device pixel. Positive x is to the right; positive y is down.
    MM_LOMETRIC ça doit être suffisant !

    le mode par défaut c'est MM_TEXT !
    L'Axe Vertical est-il inversé entre MM_TEXT et MM_LOMETRIC\MM_HIMETRIC ?

    Citation Envoyé par arkhamon Voir le message
    un fichier PDF contenant des pages BMP
    J'ai eu ce problème où le composant TWWRichEdit de InfoPower pour Report Builder et ExtraDevice PDF qui par défaut imprimait le RTF sous format d'image, j'ai fouillé pour trouver l'option qui transformait le RTF en format PDF Texte

    Effectivement, tu vas avoir des Images (une page par page ? probablement) !

    Voir avec un TMetaFileCanvas si tu ne pourrais pas avoir du Vectoriel en WMF ou EMF, par contre, je pense que l'imprimante recevra toujours une image !

  16. #16
    Membre éprouvé

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

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2006
    Messages : 621
    Points : 1 264
    Points
    1 264
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    On peut travailler directement en mm et ainsi ne plus avoir à se préoccuper des résolutions X/Y de l'imprimante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //Les positions et tailles ne sont plus exprimées en pixel, mais en 100ème de mm
    SetMapMode(Printer.Canvas.Handle, MM_HIMETRIC);
    Dites voir M. Andnotor, SetMapMode, ça serit-y pas des fois un truc spécifique de MacroBug par hasard ? Ca risque de marcher beaucoup moins bien sous Magic OSX ? Les transformations de nom c'est parce que ce matin je suis d'humeur taquine...

  17. #17
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 803
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 803
    Points : 13 485
    Points
    13 485
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    MM_LOMETRIC ça doit être suffisant !
    En 600 dpi, cela fait ~23 points\mm. Autant travailler au 100ème

    Citation Envoyé par ShaiLeTroll Voir le message
    L'Axe Vertical est-il inversé entre MM_TEXT et MM_LOMETRIC\MM_HIMETRIC ?
    En effet, mais le point Y=0 reste le haut de la page. Perso j'utilise de petites fonctions pour faire les conversions et ainsi rester cohérent (positif) avec les autres cotes. (ex. Hauteur de police ou largeur de trait en mm positif)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function Xmm(const aValue :extended) :integer;
    begin
      Result := Round(aValue *100);
    end;
     
    function Ymm(const aValue :extended) :integer;
    begin
      Result := -Round(aValue *100);
    end;
    @arkhamon: Je n'ai ni Mac, ni XE2 pour confirmer/infirmer... mais si ça compile sous FMX, on peut supposer que ça fonctionne...

  18. #18
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 633
    Points : 25 340
    Points
    25 340
    Par défaut
    Cela peut compiler si l'on mets les uses nécessaires !
    Mais c'est effectivement une API Windows !

    Avant de te lancer dans l'impression via DrawLine et autre !
    Tente un FMX.TPanel.PaintTo dans le FMX.TPrinter.Canvas

  19. #19
    Membre éprouvé

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

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2006
    Messages : 621
    Points : 1 264
    Points
    1 264
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Cela peut compiler si l'on mets les uses nécessaires !
    Mais c'est effectivement une API Windows !
    Et donc ? ... Ca marchera pas sous OSX...
    Citation Envoyé par ShaiLeTroll Voir le message
    Avant de te lancer dans l'impression via DrawLine et autre !
    Tente un FMX.TPanel.PaintTo dans le FMX.TPrinter.Canvas
    Bonne idée à laquelle j'avais pensé, sauf que :
    • y a une pallanquée de champs (si tu jettes un coup d'oeil à la PJ en haut tu vas avoir un apperçu... de la première page seulement (y en a 3 au minimum)
    • suivant lles cas, il peut y avoir jusqu'à 10 pages supplémentaires (différents blocs)
    Donc je suis pas sur que faire un panel avec la composition de l'impression va être une bonne idée au final...
    Nice try...

    Bon je viens de reagrder de plus près PaintTo. Ca voudrait dire que je peux invoquer PaintTo d'un objet TEdit, en lui fournissant un canevas d'un printer et il fait une copie du contrôle sur le printer c'est ça ?

  20. #20
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 633
    Points : 25 340
    Points
    25 340
    Par défaut
    Oui, PaintTo sur n'importe quelle Controle

    Tu peux designer ton écran pour que chaque Panel fasse une page (ou moitié de page), tu joue avec NewPage du TPrinter entre deux PaintTo

    Pense à l'échelle aussi, l'écran c'est 96dpi, l'impression 300dpi, donc il faudra faire PaintTo dans Bitmap temporaire, et lui fera un StrechDraw sur le Canvas du Printer (utilise un x3 ou x6, évite un ratio non entier sinon le strech bave)

    Je précise que c'est une technique de bourrin, je ne l'ai fait qu'une fois pour imprimer une grille TMS qui faisait toujours 12x8 cellule (plaque pour lecteur à densité optique), cela fonctionnait parfaitement car un seul composant avec juste des couleurs et font différentes par cellule rien d'aussi extrème que ta fiche !

    Sinon attend un peu et refait tout l'écran en FastReport : FastReport FMX for Apple MacOS et le Demo
    FastReport c'est pareil que le Builder, faut poser ses Shapes, Edit ... c'est long et fastidieux, tu as accès aussi à la DB
    Mais au lieu de faire Design pour Ecran tu le fais pour du Papier !

    La seule grosse différente c'est les listings ! Tout ce qui est ListBox c'est totalement différent sous les outils de Reporting qui se rapprocherait de la TDBCtrlGrid !

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