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

C++Builder Discussion :

pilotage OLE : Builder -> Word -> pdf


Sujet :

C++Builder

  1. #1
    Membre régulier Avatar de LotfiB
    Inscrit en
    Août 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 117
    Points : 75
    Points
    75
    Par défaut pilotage OLE : Builder -> Word -> pdf
    Bonjour

    Je cherche à imprimer en pdf via OLE sous C++ Builder.
    J'ai Adobe acrobat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        WordDocument1->Save();  // ici on sauve un document
        // imprime ds un pdf
        WordApplication1->ActivePrinter = (Variant)(EditPrinterName->Text);
        WordDocument1->PrintOut();
    ça marche mais ça me demande le nom du fichier pdf en boite de dialogue... pour de l'automation, c'est pas terrible.
    Y a t il moyen de contourner ça et d'imposer un nom de fichier avant le printout ?

    De plus, est ce que l'on peut aussi mettre les options d'Acrobat : protection du document : impression autorisée mais pas de sélection/copy ?

    Merci

  2. #2
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut LotfiB
    Quand la boite de dialogue s'ouvre tu est dans l'application Word, je ne connais pas de commandes qui permettent de valider la boite de dialogue par default, la seule solution que j'ai trouve c'est d'ouvrir un Thread juste avant la commande " WordDocument1->PrintOut(); " de rechercher le Handle de la fenetre puis celui du Boutton Enregistrer et de simuler l'appuie sur ce boutton

  3. #3
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Un bout de code qui fonctionne chez moi selon cette idee
    le .h
    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
     
    //---------------------------------------------------------------------------
    #ifndef Save_PDFH
    #define Save_PDFH
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ExtCtrls.hpp>
    //---------------------------------------------------------------------------
    class TMonThread : public TThread
    {
    private:
    protected:
            void __fastcall Execute();
    public:
            __fastcall TMonThread(bool CreateSuspended);
    };
    class TForm1 : public TForm
    {
    __published: // IDE-managed Components
            TButton *Button1;
            void __fastcall Button1Click(TObject *Sender);
    private: // User declarations
    public:  // User declarations
            __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    le .cpp
    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
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Save_PDF.h"
    #include <utilcls.h>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
     Variant  vMSWord, vWDocuments, vWDocument;
     char sz[256];
     TMonThread *MonThread;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     vMSWord = Variant::CreateObject("Word.Application");
     vMSWord.OlePropertySet("Visible", true);
     vWDocuments = vMSWord.OlePropertyGet("Documents");
     vWDocument = vWDocuments.OleFunction("Add");
     vMSWord.OlePropertyGet("ActivePrinter", "Acrobat Distiller");
     MonThread = new TMonThread(false);
     vWDocument.OleFunction("PrintOut");
    }
    //---------------------------------------------------------------------------
    __fastcall TMonThread::TMonThread(bool CreateSuspended)
            : TThread(CreateSuspended)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TMonThread::Execute()
    {
            //---- Placer le code du thread ici ----
     HWND hwnd;
     HWND hwnd1;
     do
    {
     hwnd = FindWindow("#32770","Enregistrer le fichier PDF sous");
     hwnd1 = FindWindowEx(hwnd, NULL, "Button", "&Enregistrer"); // Button
     GetWindowText(hwnd, sz, 256);
    }
     while(strcmp(sz, "Enregistrer le fichier PDF sous"));
     PostMessage(hwnd1,WM_KEYDOWN,VK_RETURN,0);
     PostMessage(hwnd1,WM_KEYUP,VK_RETURN,0);
     delete MonThread;
    }

  4. #4
    Membre régulier Avatar de LotfiB
    Inscrit en
    Août 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 117
    Points : 75
    Points
    75
    Par défaut
    Merci pour ta réponse
    chapeau
    entre temps, j'ai trouvé une parade mais bien moins belle :
    ouvrir word avant de lancer le programme, et ds le propriétés de l'imprimante d'acrobat
    c'est de lui dire que le nom par defaut est document\.pdf

    mais ça se Reset à la sortie de word, donc on doit lancer word manuellement :-(

    sinon, la 2eme question de mon Post :
    sais tu comment piloter Adobe pour changer les protections du fichier
    en fait, en mettre pour empecher le copier, et laisser uniquement l'impression ?

    Merci

  5. #5
    Membre régulier Avatar de LotfiB
    Inscrit en
    Août 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 117
    Points : 75
    Points
    75
    Par défaut
    finalement ça ne marche pas
    le thread ne trouve pas la boite de dialogue
    pourtant les handles sont corrects
    il l'a trouvé une fois qd j'ai fais du pas à pas, ou un breakpoint ds le thread
    sinon, tout seul il ne le trouve pas
    ???
    je suis sous Vista, je compile en debug...
    est ce une question de focus / modal ?

    en fait il exécute
    PostMessage(hwnd1,WM_KEYDOWN,VK_RETURN,0);
    PostMessage(hwnd1,WM_KEYUP,VK_RETURN,0);
    delete MonThread;

    avant meme que je ne vois le Dlg !
    et le Dlg apparait alors
    comme s'il fallait mettre une pause avant le 1er PostMessage ???

  6. #6
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    J'ai teste le code sur Word 2003
    Normalement la boucle Do While permet d'attendre l'ouverture de la boite de dialogue.
    Il est peut etre possible de remplacer " PostMessage " par " SendMessage ", mais je ne suis pas sur

  7. #7
    Membre régulier Avatar de LotfiB
    Inscrit en
    Août 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 117
    Points : 75
    Points
    75
    Par défaut
    je ne pense pas que ça soit une question de Word (j'ai le 2007)
    par contre j'ai remarqué que qd il sortait de la boucle (breakpoint sur le premier postmsg), le hwnd1 était NULL !
    Une fenêtre peut exister avant que ces éléments n'existent...
    Moi, j'ai Adobe Acrobat Pro 8, mais même en demandant, la printer :"Acrobat Distiller", c'est la même chose
    je vais peut être faire une 2ème boucle d'attente sur le hwnd1...

  8. #8
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    La version 2007 a probablement des boites de dialogue legerement differentes, pour verifier les Handles il faut utiliser soit WinSight32 de BCB, ou Spy++ de VC, ca permet
    1 - de voir le Handle de chaque element
    2 - de voir la Hierarchie des elements
    3 - de recuperer les termes necessaires aux fonctions FindWindow
    ex: ("#32770","Enregistrer le fichier PDF sous")
    "Button", "&Enregistrer"

  9. #9
    Membre régulier Avatar de LotfiB
    Inscrit en
    Août 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 117
    Points : 75
    Points
    75
    Par défaut
    j'avais vérifié avec Spy++ hier
    il m'avait donné les mêmes termes que toi

  10. #10
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Est ce que tu a une hierarchie comme celle ci, les Handles seront different
    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
     
     |
    [-]--[ ] 000C051C "Enregistrer le fichier PDF sous"#32770(Dialog) <---- Handle fenetre
     |    |-[]
     |    |-[]
     |    |-[]
     |    |-[]
     |    |-[]
     |    |-[]
     |    +-[] 000B05F0""SHELLDLL_DefView
     |    |-[]
     |    +-[] 00170554""ComboBoxEx32
     |    |-[]
     |    |-[]
     |    |-[]
     |    |-[] 001404FC"&Enregistrer"Button <---- Handle Button
     |    |-[]
     |    |-[]
     |    |-[]
     |
     |-[ ]
     |

  11. #11
    Membre régulier Avatar de LotfiB
    Inscrit en
    Août 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 117
    Points : 75
    Points
    75
    Par défaut
    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
        Window 00010F8A "Enregistrer le fichier PDF sous" #32770 (Dialog)
            Window 00010FE2 "" DUIViewWndClassName
                Window 00010FE4 "" DirectUIHWND
                    Window 0001101E "" FloatNotifySink
                        Window 00011020 "Toulouse_calendrier_2009.pdf" ComboBox
                            Window 00011024 "Toulouse_calendrier_2009.pdf" Edit
                    Window 0001100A "" CtrlNotifySink
                        Window 0001100C "Wrapper d’hôte des lieux communs" CommonPlacesWrapperWndClass
                            Window 0001103A "" ToolbarWindow32
                    Window 0001100E "" CtrlNotifySink
                        Window 00011010 "Contrôle Arborescence d’espace de noms" NamespaceTreeControl
                            Window 00011012 "Contrôle Arborescence d’espace de noms" Static
                            Window 00011014 "Arborescence" SysTreeView32
                    Window 0001101A "" CtrlNotifySink
                        Window 00020F84 "ShellView" SHELLDLL_DefView
                            Window 00010FE6 "FolderView" SysListView32
                                Window 00010FEA "" SysHeader32
                    Window 00011032 "" FloatNotifySink
                        Window 00011034 "Fichiers PDF (*.PDF)" ComboBox
            Window 00020FA6 "" ToolbarWindow32
            Window 00010FAC "&Enregistrer" Button
            Window 00010FAE "Annuler" Button
            Window 00020FA4 "" ScrollBar

  12. #12
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Je ne peu pas tester mais ceci devrai fonctionner
    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
     
            //---- Placer le code du thread ici ----
     HWND hwnd;
     HWND hwnd1;
     HWND hwnd2;
     do
    {
     // on recupere le Handle de la fenetre
     hwnd = FindWindow("#32770","Enregistrer le fichier PDF sous");
     hwnd1 = FindWindowEx(hwnd, NULL, DUIViewWndClassName, NULL); // ou "DUIViewWndClassName"
     // on recupere le Handle du Button Enregistrer
     hwnd2 = FindWindowEx(hwnd1, NULL, "Button", "&Enregistrer");
     GetWindowText(hwnd, sz, 256);
    }
     while(strcmp(sz, "Enregistrer le fichier PDF sous"));
     // on simule l'appuie de la touche entrée
     PostMessage(hwnd2,WM_KEYDOWN,VK_RETURN,0);
     PostMessage(hwnd2,WM_KEYUP,VK_RETURN,0);
     delete MonThread;
    A partir du moment que la fenetre a ete detectee les Handle renvoyes ne doivent pas etre a "NULL"

  13. #13
    Membre régulier Avatar de LotfiB
    Inscrit en
    Août 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 117
    Points : 75
    Points
    75
    Par défaut
    J'ai essayé ça :
    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
    void __fastcall TMonThread::Execute()
    {
                //---- Placer le code du thread ici ----
    char sz[256];
    HWND hwnd, hwnd1, hwnd2;
        do
        {
        hwnd = FindWindow("#32770","Enregistrer le fichier PDF sous");
    // hwnd1 = FindWindowEx(hwnd, NULL, "DUIViewWndClassName", NULL);
        GetWindowText(hwnd, sz, 256);
        }
        while(strcmp(sz, "Enregistrer le fichier PDF sous"));
     
        do
        {
        // on recupere le Handle du Button Enregistrer
        hwnd2 = FindWindowEx(hwnd, NULL, "Button", "&Enregistrer");
        GetWindowText(hwnd2, sz, 256);
        }
        while(strcmp(sz, "&Enregistrer"));
     // on simule l'appuie de la touche entrée
     PostMessage(hwnd2,WM_KEYDOWN,VK_RETURN,0);
     PostMessage(hwnd2,WM_KEYUP,VK_RETURN,0);
     
        delete MonThread;
    }
    //-----
    ça ne fonctionne que si je mets un breakpoint en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PostMessage(hwnd2,WM_KEYDOWN,VK_RETURN,0);
    puis je lui dis continuer
    Alors là même que je ne vois aucune fenetre affiché, elle existe et il appuie bien sur le bouton...l'impression se lance
    je n'ai jamais vu ça !
    faut il mettre une attente ???

  14. #14
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Hello,

    La fenêtre existe, mais elle n'a peut-être pas encore eu le temps de s'initialiser correctement ?
    Et en rajoutant une boucle avant le premier PostMessage du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (!IsWindowVisible(hwnd)) Sleep(10);
    ?

    Ou en remplaçant les GetWindowText par des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SendMessage(<Handle>, WM_GETTEXT, 256, (LPARAM)sz);
    ??

  15. #15
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Tu peu sans probleme essayer une à une les propositions de totoche76 ou d'ajouter une temporisation comme tu l'a pense, il est possible que ton systeme demande un delai, je ne peu pas assayer je ne possede pas Vista

  16. #16
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Pour ta question sur Acrobat je ne sais pas si l'on peut acceder aux parametres de protection, ca doit probablement etre possible, voici le peu que je sais faire
    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
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #include <utilcls.h>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    Variant vAcrobatApp, vAcrobatPDDoc, PDDocument;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    // executer l'application
     vAcrobatApp = CreateOleObject("AcroExch.App");
    // executer le document
    // vAcrobatPDDoc = CreateOleObject("AcroExch.PDDoc");
     vAcrobatPDDoc = CreateOleObject("AcroExch.AVDoc");
    // ouvrir acrobat vide
     vAcrobatApp.OleFunction("Show");
    // deux facon d'ouvrir un fichier
     vAcrobatPDDoc.OleFunction("Open", "C:\\essaipdf.pdf", true);
    // vAcrobatPDDoc.OleFunction("OpenAVDoc", "C:\\essaipdf.pdf");
    // rendre acrobat invisible
    // vAcrobatApp.OleFunction("Hide");
    // PDDocument =  vAcrobatPDDoc.OleFunction("GetActiveDoc");  //  GetPDDoc
    // int NumPages = (vAcrobatPDDoc.OleFunction("GetNumPages") - 1);
     long retVal = vAcrobatPDDoc.OleFunction("PrintPagesSilent",
     0,        // First page
    -1, // Last page (-1 is all pages)
     1,        // Postscript level
     0,        // Binary ok
     1         // Shrink to fit
     );
    // if (retVal != 0)
    // AfxMessageBox(_T("The Print was a success"));
     // iNumPages = PDDoc.GetNumPages
    //AVDoc.printPagesSilent 0, iNumPages - 1, 2, True, true
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
     vAcrobatPDDoc.OleFunction("Close");
     vAcrobatApp.OleFunction("CloseAllDocs");
     vAcrobatApp.OleFunction("Exit");
     vAcrobatPDDoc = Unassigned;
     vAcrobatApp = Unassigned;
    }
    //---------------------------------------------------------------------------
    Le code n'est pas nettoye est je ne sais pas exactement a quoi correspondent toutes les commandes

  17. #17
    Membre régulier Avatar de LotfiB
    Inscrit en
    Août 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 117
    Points : 75
    Points
    75
    Par défaut
    excellent l'histoire d'attendre que la fenetre soit prete, je l'ai mis dès que mon premier handle est valide, apres je cherche celui du bouton :
    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
    void __fastcall TMonThread::Execute()
    {
                //---- Placer le code du thread ici ----
    char sz[256];
    HWND hwnd, hwnd2;
        do
        {
        hwnd = FindWindow("#32770","Enregistrer le fichier PDF sous");
    // hwnd1 = FindWindowEx(hwnd, NULL, "DUIViewWndClassName", NULL);
        GetWindowText(hwnd, sz, 256);
        }
        while(strcmp(sz, "Enregistrer le fichier PDF sous"));
        while (!IsWindowVisible(hwnd)) Sleep(10);
        do
        {
        // on recupere le Handle du Button Enregistrer
        hwnd2 = FindWindowEx(hwnd, NULL, "Button", "&Enregistrer");
        GetWindowText(hwnd2, sz, 256);
        }
        while(strcmp(sz, "&Enregistrer"));
     // on simule l'appuie de la touche entrée
     PostMessage(hwnd2,WM_KEYDOWN,VK_RETURN,0);
     PostMessage(hwnd2,WM_KEYUP,VK_RETURN,0);
     
        delete MonThread;
    }
    ça marche super bien
    Merci à vous tous

  18. #18
    Membre régulier Avatar de LotfiB
    Inscrit en
    Août 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 117
    Points : 75
    Points
    75
    Par défaut
    pour Acrobat j'ai trouvé 2 liens pas mal :
    http://www.adobe.com/devnet/acrobat/...oper_guide.pdf
    http://www.adobe.com/devnet/acrobat/..._reference.pdf

    ciao


    Citation Envoyé par blondelle Voir le message
    Pour ta question sur Acrobat je ne sais pas si l'on peut acceder aux parametres de protection, ca doit probablement etre possible, voici le peu que je sais faire
    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
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #include <utilcls.h>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    Variant vAcrobatApp, vAcrobatPDDoc, PDDocument;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    // executer l'application
     vAcrobatApp = CreateOleObject("AcroExch.App");
    // executer le document
    // vAcrobatPDDoc = CreateOleObject("AcroExch.PDDoc");
     vAcrobatPDDoc = CreateOleObject("AcroExch.AVDoc");
    // ouvrir acrobat vide
     vAcrobatApp.OleFunction("Show");
    // deux facon d'ouvrir un fichier
     vAcrobatPDDoc.OleFunction("Open", "C:\\essaipdf.pdf", true);
    // vAcrobatPDDoc.OleFunction("OpenAVDoc", "C:\\essaipdf.pdf");
    // rendre acrobat invisible
    // vAcrobatApp.OleFunction("Hide");
    // PDDocument =  vAcrobatPDDoc.OleFunction("GetActiveDoc");  //  GetPDDoc
    // int NumPages = (vAcrobatPDDoc.OleFunction("GetNumPages") - 1);
     long retVal = vAcrobatPDDoc.OleFunction("PrintPagesSilent",
     0,        // First page
    -1, // Last page (-1 is all pages)
     1,        // Postscript level
     0,        // Binary ok
     1         // Shrink to fit
     );
    // if (retVal != 0)
    // AfxMessageBox(_T("The Print was a success"));
     // iNumPages = PDDoc.GetNumPages
    //AVDoc.printPagesSilent 0, iNumPages - 1, 2, True, true
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
     vAcrobatPDDoc.OleFunction("Close");
     vAcrobatApp.OleFunction("CloseAllDocs");
     vAcrobatApp.OleFunction("Exit");
     vAcrobatPDDoc = Unassigned;
     vAcrobatApp = Unassigned;
    }
    //---------------------------------------------------------------------------
    Le code n'est pas nettoye est je ne sais pas exactement a quoi correspondent toutes les commandes

  19. #19
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Tres interressants ces liens

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

Discussions similaires

  1. Export Word vers PDF : pilotage du composant ActiveX PDFCreator
    Par Phifi dans le forum Vos contributions VB6
    Réponses: 7
    Dernier message: 02/03/2012, 16h40
  2. [WORD] pilotage ole Delphi
    Par missmarion dans le forum API, COM et SDKs
    Réponses: 19
    Dernier message: 28/09/2010, 11h19
  3. Pilotage OLE WORD - Remplacer des termes-
    Par bru-no dans le forum C++Builder
    Réponses: 10
    Dernier message: 19/03/2007, 22h51
  4. Pilotage OLE Word avec Visual C++
    Par baka02 dans le forum MFC
    Réponses: 2
    Dernier message: 20/03/2006, 13h04
  5. Pilotage Ole de word
    Par beauchastel dans le forum Langage
    Réponses: 6
    Dernier message: 10/01/2006, 10h43

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