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

API, COM et SDKs Delphi Discussion :

Impression de plusieurs .PDF selon un ordre précis


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Par défaut Impression de plusieurs .PDF selon un ordre précis
    Bonjour,

    Je cherche à imprimer plusieurs fichiers .PDF contenu dans un répertoire selon un ordre bien précis et pas nécessairement dans l'ordre qu'ils sont classés dans le répertoire.

    J'arrive facilement à les reclasser selon mes besoins et j'utilise ShellExecute avec le verbe "print" pour lancer l'impression à l'aide d'une boucle.

    Malheureusement, si j'envoie le tout trop rapidement, la gestion interne de Adobe fait en sorte que les fichiers s'impriment, tous correctement, mais dans une séquence différente de la mienne.

    J'ai essayer le timer et un delai de 5 secondes, ça fonctionne mais si un fichier demande plus de 5 secondes à s'imprimer, les fichiers suivants s'impriment dans un ordre inconnu.

    J'aimerais être en mesure de savoir qu'un fichier a bel et bien été envoyé à l'imprimante avant de demander une nouvelle impression à Adobe.

    Merci.

  2. #2
    Membre confirmé Avatar de samaury
    Homme Profil pro
    Chevalier Jedi
    Inscrit en
    Mars 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Chevalier Jedi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2008
    Messages : 114
    Par défaut
    Bonjour
    Tu as une alternative au shellexecute : la fonction WaitForSingleObject qui te permet de lancer un process et d'attendre que il se termine avant de passer à autre chose.
    A titre d'exemple,voici ce que je fais dans une de mes classes utilitaires :
    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
     
    ///Exécute un fichier et attend sa fermeture
    class function TSystemTool.ExecuteAndWait(CommandLine: string; MilliSeconds_TimeOut: Cardinal = INFINITE): Cardinal;
    var
        StartInfo: TStartupInfo;
        ProcInfo: TProcessInformation;
        CreateOK: Boolean;
        ACommandLine: PChar;
     
    begin
        Result := WAIT_FAILED;
        FillChar(StartInfo, SizeOf(TStartupInfo), #0);
        FillChar(ProcInfo, SizeOf(TProcessInformation), #0);
        StartInfo.cb := SizeOf(TStartupInfo);
     
        ACommandLine := Pchar(CommandLine);
        CreateOK := CreateProcess(nil, ACommandLine, nil, nil, False,
            CREATE_NEW_PROCESS_GROUP + NORMAL_PRIORITY_CLASS,
            nil, nil, StartInfo, ProcInfo);
     
        if CreateOK then
            Result := WaitForSingleObject(ProcInfo.hProcess, MilliSeconds_TimeOut);
    end;
    J'espère que ça répond à ta question.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Par défaut
    Merci pour ta réponse. Effectivement, ça pourrait marcher. Mais comment lancer un exécutable et le fichier associé à imprimer. Par exemple, si je veux imprimer le fichier "a.pdf", à quoi pourrait ressembler le PChar ACommandeLine? À "AcroRd32.exe print a.pdf"? ou à quelque chose comme ça?

    Dans un autre ordre d'idée. Lorsqu'une impression est envoyée à l'imprimante, l'icone de l'imprimante apparait dans la zone de notification, en bas à droite. Est-ce qu'on peut tester le message qui accompagne l'icone?

  4. #4
    Membre confirmé Avatar de samaury
    Homme Profil pro
    Chevalier Jedi
    Inscrit en
    Mars 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Chevalier Jedi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2008
    Messages : 114
    Par défaut
    J'ai essayer ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c:\emplacement_de_acrobat_reader\AcroRD32.exe /t mon_fichier_a_imprimer.pdf
    En ligne de commande, ça marche pas mal mais malheureusement j'ai pas le temps de tester dans un soft. Fais moi savoir ce que ça donne.
    Sinon, je suis tombé sur ça : http://www.synergeek.fr/2009/03/impr...e-de-commande/ qui parle d'outils (ghostcript et gsview) pour automatiser l'impression des pdf.
    @++

  5. #5
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Par défaut
    Merci Samaury,
    Ta ligne de commande fonctionne dans un programme.
    Mais je reste avec le même problème.
    Si j'exécute le programme avec un point d'arrêt et que je vérifie si chaque fichier est envoyé dans le bon ordre, ça fonctionne. Le programme Adobe a le temps de transmettre le fichier à l'imprimante avant que je lui demande le suivant.
    Si j'enlève le point d'arrêt, les impressions sont demandés trop rapidement et Adobe se met à les gérer selon un ordre qui m'est inconnu.
    C'est pourquoi j'aimerais lire dans la barre de notification, ou ailleurs, le nom qui a été envoyé à l'imprimante et m'en servir.

    Merci pour ton aide.

  6. #6
    Membre confirmé Avatar de samaury
    Homme Profil pro
    Chevalier Jedi
    Inscrit en
    Mars 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Chevalier Jedi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2008
    Messages : 114
    Par défaut
    A mon avis tu va devoir détecter la fin des travaux d'impression avant de lancer les impression suivantes. Cette discussion pourrait t'aider http://www.developpez.net/forums/d86...ur-impression/

    Autre alternative mais j'ai peux d'espoirs que ça fonctionne teste la propriété printing de l'objet/fonction printer déclarée dans l'unité Printers
    @++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Impression PDF avec plusieurs feuilles selon case à cocher
    Par Roussette35 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/12/2014, 17h00
  2. Réponses: 6
    Dernier message: 13/01/2014, 14h53
  3. [WD14] Impression de plusieurs PDF sur différents imprimantes
    Par mrabat1 dans le forum WinDev
    Réponses: 5
    Dernier message: 22/04/2010, 16h40
  4. Impression de plusieurs PDF
    Par chris78 dans le forum Struts 1
    Réponses: 2
    Dernier message: 02/07/2009, 01h42
  5. Réponses: 2
    Dernier message: 24/07/2006, 16h23

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