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

Langage Delphi Discussion :

Impression d'une Fiche dans un PDF


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2004
    Messages : 85
    Points : 39
    Points
    39
    Par défaut Impression d'une Fiche dans un PDF
    Salut,

    Je désire imprimer tout l'interface de mon programme (Fiche principale contenant tout les composantes) dans un Pdf.

    Je n'ai jamais programme quoi que ce soit coté impression donc je ne sais pas trop ou commencer.

    Je voudrais préciser que Adobe Acrobat pro est installer sur les machines.

    Quelqu'un pourrait m'aider un peu ?
    Merci

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2004
    Messages : 85
    Points : 39
    Points
    39
    Par défaut
    Bon je peux imprimer ma fiche principale avec la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1.PrintDialog1.Execute
    Ensuite j'ai simplement a sélectionner mon PdfWriter dans mon choix d'imprimante.

    Est-ce possible, lorsque je sélectionne le PDFWriter qu'il me donne un nom de fichier par défaut ?

    Et est-ce possible de lui indiquer qu'il prenne PdfWriter comme imprimante par défaut même si ce n'est pas celle qui est par défaut dans le system.

    Merci

  3. #3
    Membre confirmé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Février 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 537
    Points : 460
    Points
    460
    Par défaut
    Bonjour,
    essaie ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    with TPrintDialog.Create(Application) do
          begin
             Printer.PrinterIndex := Printer.Printers.IndexOf('PdfWriter');//Nom de l'imprimante que l'on veut employer
             Print;
    André
    Ils ne savaient pas que c'était impossible, alors ils l'ont fait !

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2004
    Messages : 85
    Points : 39
    Points
    39
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure THipgables.Button1Click(Sender: TObject);
    begin
    with TPrintDialog.Create(hipgables) do //hipgables : nom de la form principale
          begin
             Printer.PrinterIndex := Printer.Printers.IndexOf('Adobe PDF');
             Print;
          end;
    end;
    et ca marche pas jai ces message d'erreur :

    [Erreur] Hgables.pas(786): Identificateur non déclaré : 'Printer'
    [Erreur] Hgables.pas(786): Opérateur ou point-virgule manquant
    [Erreur fatale] Thelper.dpr(14): Impossible de compiler l'unité utilisée 'Hgables.pas'

  5. #5
    Membre confirmé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Février 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 537
    Points : 460
    Points
    460
    Par défaut
    il faut rajouter "Printers" dans les "Uses".

    André
    Ils ne savaient pas que c'était impossible, alors ils l'ont fait !

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2004
    Messages : 85
    Points : 39
    Points
    39
    Par défaut
    ok merci ca marche MAIS il crée automatiquement le fichier PDF a un emplacement par défaut avec aucun nom, le fichier s'appelle juste ".PDF".

    J'aimerais qu'il donne un nom par défaut exemple "Hipgables.Pdf" et qu'il me demande où l'on désire le sauvegarder...

    Merci

  7. #7
    Membre chevronné

    Profil pro
    Chef de Projet / Développeur
    Inscrit en
    Juin 2002
    Messages
    598
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de Projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2002
    Messages : 598
    Points : 2 020
    Points
    2 020
    Par défaut
    Bonjour,

    Essaie cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    reg := TRegistry.Create ;
    reg.LazyWrite := false ;
    if not reg.OpenKey( 'Software\Adobe\Acrobat Distiller\PrinterJobControl' , false ) then 
       exit ;
     
    reg.WriteString( Application.ExeName , 'c:\mon_fichier_a_moi_qui_va_bien.pdf' );
    reg.Free ;
    Bon, le exit, est pas terrible. Il faut habiller cela mieux que cela, mais cela devrait fonctionner.

    Acrobat supprime la clé après usage.
    --
    vanquish

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2004
    Messages : 85
    Points : 39
    Points
    39
    Par défaut
    Salut,

    ca me dit : [Erreur] Hgables.pas(783): Identificateur non déclaré : 'reg'

    Je ne comprend absoluement ce que fait le code que tu m'indique mais ca
    semble lire et écrire dans le Registre du windows ??

    la clé qui est écrite est donc supprimer par la suite, donc apres l'impression le
    registre de windows redevient à son état original ?

    Merci

  9. #9
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Il te faut rajouter dans les uses l'unité Registry ... et prendre le soin de mettre
    Reg:Tregistry;
    A+

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2004
    Messages : 85
    Points : 39
    Points
    39
    Par défaut
    Bon jai fait ca comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure THipgables.Button1Click(Sender: TObject);
    var Reg : Tregistry;
    begin
    reg := TRegistry.Create ;
    reg.LazyWrite := false ;
    if not reg.OpenKey( 'Software\Adobe\Acrobat Distiller\PrinterJobControl' , false ) then
       exit ;
    reg.WriteString( Application.ExeName , 'c:\Hipgable.pdf' );
    reg.Free ;
    end;
    Ca compile sans erreur et quand je cliquer sur le bouton1 pour impression ca fait absolument rien et ca ne donne aucune erreur....

  11. #11
    Membre chevronné

    Profil pro
    Chef de Projet / Développeur
    Inscrit en
    Juin 2002
    Messages
    598
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de Projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2002
    Messages : 598
    Points : 2 020
    Points
    2 020
    Par défaut
    Citation Envoyé par Brain3D Voir le message
    Je ne comprend absoluement ce que fait le code que tu m'indique
    C'est vrai que je n'ai pas été super clair. Je ne répondais qu'à la question :
    J'aimerais qu'il donne un nom par défaut exemple "Hipgables.Pdf"
    Ce code doit être ajouté au reste (précéder, en fait).

    Ce code fait que : la prochaine fois que l'imprimante Adobe recevra un Job de la part de "TonProjet.exe" (d'où le Application.ExeName), alors aucun nom de fichier ne sera demandé à l'utilisateur, la sortie se fera sur 'c:\Hipgable.pdf'.

    Le code que je fourni, n'est donc là que pour activer un comportement de l'imprimante PDF, mais ne provoque aucune impression en tant que telle.
    Après mon code, il faut donc que ton application lance l'impression en elle-même.

    Théoriquement, Adobe supprime la clé dès son utilisation et si ton impression va au bout, tu n'as aucun nettoyage à faire (mais en cas d'erreur, il est peut-être préférable d'aller supprimer cette clé).

    Cordialement
    --
    vanquish

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2004
    Messages : 85
    Points : 39
    Points
    39
    Par défaut
    Merci des éclairsissement,

    J'ai écris mon code comme cela :
    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
    procedure THipgables.PrintBtnClick(Sender: TObject);
    var Reg : Tregistry;
    begin
    reg := TRegistry.Create ;
    reg.LazyWrite := false ;
    if not reg.OpenKey( 'Software\Adobe\Acrobat Distiller\PrinterJobControl' , false ) then
       exit ;
    reg.WriteString( Application.ExeName , 'c:\Hipgable.pdf' );
    reg.Free ;
    with TPrintDialog.Create(hipgables) do //hipgables : nom de la form principale
          begin
             Printer.PrinterIndex := Printer.Printers.IndexOf('Adobe PDF');
             Print;
          end;
    end;
    Ça fonctionne, le programme va écrire le fichier pdf avec le bon nom dans le C:\.

    Mais c'est pas exactement ce que j'ai besoin mais on y est presque.

    lorsque qu'on clique sur le bouton imprimer le programme doit :

    - Ouvrir la fenetre d'impression avec l'imprimante PDF choisis par défaut.
    (même si ce n'est celle qui est par défaut dans le system)
    - Avoir le nom de fichier "Hipgables.pdf" par défaut avec un emplacement de sauvegarde par défaut. (Ex: C:\Hipgables.pdf)

    Bien entendu avant de lancer l'impression l'utilisateur pourrait changer le nom
    du fichier ou l'emplacement anisi que l'imprimante si il désire imprimer sur papier.

    Merci!!
    C'est la seule chose qu'il me reste a régler pour terminer mon programme!!


    Merci

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2004
    Messages : 85
    Points : 39
    Points
    39
    Par défaut
    Bon j'arrive pas a faire imprimer tel qu'indiquer dans ce message ci-dessus...
    Pourtant ca doit pas etre excessivement compliquer a faire...

    Quelqu'un pourrait m'aider encore un peu!! on y est presque!

    Merci!!

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2004
    Messages : 85
    Points : 39
    Points
    39
    Par défaut
    Bon j'ai réussi a lui faire faire ce que je voulais... c'est a dire que l'utilisateur peut changer de nom de fichier ou de répertoire avant l'impression Pdf.

    Voici comment j'ai fait ca :

    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
    procedure THipgables.ImprimerClick(Sender: TObject);
    var Reg : Tregistry;
    begin
      if savedialog.Execute then
      begin
      reg := TRegistry.Create ;
      reg.LazyWrite := false ;
        if not reg.OpenKey( 'Software\Adobe\Acrobat Distiller\PrinterJobControl' , false ) then
        exit ;
      reg.WriteString( Application.ExeName , savedialog.FileName);
      reg.Free ;
      Printer.PrinterIndex := Printer.Printers.IndexOf('Adobe PDF');
      hipgables.Print;
      end;
    end;
    J'ai aucune idée si c'est la meilleur façon de faire mais au moin ça marche!!!

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2004
    Messages : 85
    Points : 39
    Points
    39
    Par défaut
    Bon dernière chose, selon le code que j'ai écris, comment je dois faire pour faire imprimer ma fiche en pdf sur du papier personnalisé ?

    par défaut il imprime sur du papier lettre. (papier par défaut dans Adobe Acrobat)

  16. #16
    Membre chevronné

    Profil pro
    Chef de Projet / Développeur
    Inscrit en
    Juin 2002
    Messages
    598
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de Projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2002
    Messages : 598
    Points : 2 020
    Points
    2 020
    Par défaut
    Il me semble que l'objet Printer est capable de sélectionner les "bacs" d'impression à utiliser.
    Une fois que tu as détecté que ton utilisateur à choisi l'imprimante PDF, utilise ces propriétés/méthodes de l'imprimante pour sélectionner le bon bac.

    Tu peux aussi modifier les propriétés dans la panneau de conf de l'imprimante et voir les impacts sur la base de registre, pour pouvoir les reproduire.

    C'est pas super clean, mais bon ...

    Seul moyen d'avoir les points d'entrées fiables et stables dans le temps, est d'acheter le SDK Adobe.
    --
    vanquish

  17. #17
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    aller voir du coté de:
    http://www.primopdf.com/

Discussions similaires

  1. fermer une fiche dans l'évènement OnActivate
    Par Soulama dans le forum Composants VCL
    Réponses: 7
    Dernier message: 08/03/2006, 14h26
  2. Afficher une fiche dans un thread
    Par abatonime dans le forum Langage
    Réponses: 5
    Dernier message: 05/11/2005, 22h26
  3. Comment afficher une fiche dans une autre fiche ?
    Par psidonio dans le forum Composants VCL
    Réponses: 4
    Dernier message: 01/10/2005, 23h22
  4. [iText] Rajouter une image dans un pdf
    Par COCOLOLO dans le forum Documents
    Réponses: 2
    Dernier message: 06/04/2005, 17h01
  5. [Drag & Drop] Mettre une fiche dans un panel
    Par corwin_d_ambre dans le forum Composants VCL
    Réponses: 5
    Dernier message: 12/01/2004, 10h46

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