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 :

C++ Builder COM PDFCreator


Sujet :

C++Builder

Vue hybride

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

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    502
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 502
    Par défaut C++ Builder COM PDFCreator
    Bonjour

    J'ai besoin de produire un fichier PDF depuis C++ Builder 6.

    Pour cela il faut utiliser l'interface COM de PDFCreator par exemple ce que j'ai pu faire sans problème avec Delphi 7. Mais j'ai beaucoup de mal à transcrire ce code vers C++ Builder. Certes je peux faire une DLL Delphi appelé depuis C++ mais ce n'est guère élégant.

    Voic ce que je tente en me basant surs divers exemples glanés sur le net (aucun ne portent sur PDFCreator sinon je n'aurais pas de problème)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TCOM_clsPDFCreator PDFCreator = CoclsPDFCreator::Create();
    Je précise que j'ai généré l'unité de contrôle du COM "PDFCreator_TLB"

    Cette instruction produit à l’exécution une erreur "classe d'exception char * Adresse de l'objet exception 0xbba26a".

    Par ailleurs l'application Delphi qui fonctionne elle, ne permet que de convertir un fichier (TXT ou RTF) vers PDF mais pas d'intercepter une impression (état fait avec QReport) dirigé vers PDFCreator. Là aussi il me manque un élément.

  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
    Par défaut
    Salut frantzgac
    Regarde ce lien sur le Forum

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    502
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 502
    Par défaut
    Bonjour

    malheureusement ce fil
    http://www.developpez.net/forums/d47...r-travail-pdf/
    décrit les affres de quelqu'un qui ne parvient pas à ses fins. De plus il semble que le niveau de la conversation ne soit pas au top car je cite
    Effectivement, ca tourne pas rond dans l'import de la librairie de types, dans le .H on peut lire clairement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #error "This file requires a newer version of the header UTILCLS.H" \
           "You need to apply an update/patch to your copy of C++Builder"
    alors que ces lignes du fichier PDFCreator_TLB.h sont dont la portée d'une compilation conditionnelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #if !defined(__UTILCLS_H_VERSION) || (__UTILCLS_H_VERSION < 0x0600)
    ce qui signifie que l'unité PDFCreator prévoit le cas où l'include UTILCLS.H ne serait pas cohérent, et non qu'il y a effectivement une erreur.

    Ceci dit comme je parviens à faire fonctionner l'unité PFDCreator généré par l'importation de librairies de type en Delphi, je pense que si je ne parviens pas à le faire en C++ c'est du fait de ma méconnaissance de la manipulation des classes produites par PFDCreator_TLB.

    C'est donc un spécialiste de ces questions qui pourrait peut être m'aider à utiliser ces dernières que je mets ici en lien

    http://frantzgacogne.free.fr/ftp/pdfcreator_tlb.cpp

    http://frantzgacogne.free.fr/ftp/pdfcreator_tlb.h

  4. #4
    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
    Par défaut
    A tu teste le dernier code que je fournissais dans ce post

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    502
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 502
    Par défaut
    Merci, eEffectivement j'étais passé un peu vite sur cette méthode utilisant OLE. Voici le bout de code tenté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Variant vPDFC, ProgramIsRunning;
    vPDFC = Variant::CreateObject("PDFCreator.clsPDFCreator");
    vPDFC.OleFunction("cStart", "/NoProcessingAtStart", false) = true;
    vPDFC.OlePropertySet("cVisible", true);
    vPDFC.OlePropertyGet("cOption", "UseAutosave") = true;
    vPDFC.OlePropertyGet("cOption", "UseAutosaveDirectory") = true;
    vPDFC.OleFunction("cConvertFile","h:\\Etudes\\EtudeCpp\\PDFCreator\\File1.txt","h:\_Etudes\\EtudeCpp\\PDFCreator\\file1.pdf","PDF/X");
    vPDFC.OleFunction("cShowLogfileDialog",true);
    vPDFC.OleFunction("cGetPDFCreatorPrinters");
    vPDFC.OleFunction("cPrintPDFCreatorTestpage");
    vPDFC.OleFunction("cClose");
    vPDFC = Unassigned;
    Jusqu'à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vPDFC.OlePropertyGet("cOption",
    ça passe en silence

    Celle ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vPDFC.OleFunction("cConvertFile","h:\\Etudes\\EtudeCpp\\PDFCreator\\File1.txt","h:\_Etudes\\EtudeCpp\\PDFCreator\\file1.pdf","PDF/X");
    provoque l'erreur EoleSysError "nom inconnu"

    Tandis que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vPDFC.OleFunction("cGetPDFCreatorPrinters");
    vPDFC.OleFunction("cPrintPDFCreatorTestpage");
    celles ci ne font rien...

    Je me suis aussi inspiré de
    http://www.codeproject.com/Articles/...ord-Automation
    qui traite d'un sujet différent mais de la même technologie

    je pense que pour aller plus loin je vais devoir étudier de près "OLE"

  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
    Par défaut
    malheureusement oui tu va devoir regarder du cote de Ole et connaitre les joies des erreurs incomprensibles, mais avec l'experience on arrive a traduire des fonctions d'un autre language vers BCB, et puis il y a toujours le Forum.
    pour ta ligne qui donne une erreur, est tu sur de tes chemins des fichiers source et destination sinon j'ai trouve ceci, a adapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Variant retVal;
    Variant PDFCreator = CreateOleObject("PDFCreator.clsPDFCreator");
    retVal = PDFCreator.OleFunction("cStart","/NoProcessingAtStartup");
    //PDFCreator.OlePropertySet ("cOption","UseAutoSave",1);
    retVal = PDFCreator.OleFunction("cConvertFile",eSrcFile->Text,eDstFile->Text,"PDF/X");
    retVal = PDFCreator.OleFunction("cClose");
    PDFCreator = Unassigned;
    je te post un bout de code trouve dans mes archives, si je retrouve la liste des fonctions je la posterais
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    //#include "utilcls.h"
    //#include "comobj.hpp"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    Variant vPDFC, ProgramIsRunning, vPDFCError;
    String DefaultPrinter;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    // on teste si PDFCreator est deja execute
    // si oui
    try
            {
            vPDFC = Variant::GetActiveObject("PDFCreator.clsPDFCreator");
            }
    // si non
    catch(...)
            {
            vPDFC = Variant::CreateObject("PDFCreator.clsPDFCreator");
            }
    vPDFCError = Variant::CreateObject("PDFCreator.clsPDFCreatorError");
    Variant pdfOptions = vPDFC.OlePropertyGet("cOptions");
    vPDFC.OleFunction("cStart", "/NoProcessingAtStart", false) = true;
    //ProgramIsRunning = vPDFC.OleProcedure("cProgramIsRunning");
    //bool visible = vPDFC.OlePropertyGet("cVisible");
    vPDFC.OlePropertySet("cVisible", true);
    //int etatWindow = vPDFC.OlePropertyGet("cWindowState");
    //vPDFC.OlePropertySet("cWindowState", 0);
    //String version = vPDFC.OlePropertyGet("cWindowsVersion");
    DefaultPrinter = vPDFC.OlePropertyGet("cDefaultPrinter");
    vPDFC.OlePropertySet("cDefaultPrinter", "PDFCreator");
    String vPDFPath = "C:\\";
    pdfOptions.OlePropertyGet("AutosaveDirectory") = vPDFPath;
    //vPDFC.OlePropertyGet("cOption", "AutosaveDirectory") = vPDFPath;
    String vPDFName = "teste_memo"; // extension .pdf
    //vPDFC.OlePropertyGet("cOption", "AutosaveFilename") = vPDFName;
    pdfOptions.OlePropertyGet("AutosaveFilename") = vPDFName;
    //vPDFC.OlePropertyGet("cOption", "UseAutosave") = true;
    pdfOptions.OlePropertyGet("UseAutosave") = true;
    //vPDFC.OlePropertyGet("cOption", "UseAutosaveDirectory") = true;
    pdfOptions.OlePropertyGet("UseAutosaveDirectory") = true;
    // 0=PDF, 1=Png, 2=jpg, 3=bmp, 4=pcx, 5=tif, 6=ps, 7=eps, 8=txt
    //vPDFC.OlePropertyGet("cOption", "AutosaveFormat") = 0;
     
    vPDFC.OlePropertySet("cOption", "cClearCache", true);
    //vPDFC.OleFunction("cAddPrintjob", "C:\\teste_memo.txt");
    //String prntjbname = vPDFC.OlePropertyGet("cPrintjobFilename", 1);
    //int a = vPDFC.OlePropertyGet("cCountOfPrintjobs");
    //bool printstop = vPDFC.OlePropertyGet("cPrinterStop");
    vPDFC.OleFunction("cPrintFile", "teste_memo.pdf");
    vPDFC.OlePropertySet("cPrinterStop", false);
    vPDFC.OleFunction("cPrintFile", "teste_memo.txt");
    //Variant vVersion = vPDFC.OlePropertyGet("cGhostscriptVersion");
    HWND hwnd;
    hwnd = FindWindow("ThunderRT6FormDC", "PDFCreator - Moniteur d'impression PDF");
    OpenIcon(hwnd);
    BringWindowToTop(hwnd);
     
    vPDFCError = vPDFC.OlePropertyGet("cError");
    int eNumber = vPDFC.OlePropertyGet("cErrorDetail", "Number");
    String eDetail = vPDFC.OlePropertyGet("cErrorDetail", "Description");
    //vPDFCError = vPDFC.OlePropertyGet("cErrorDetail");
    //DefaultPrinter = vPDFC.OlePropertyGet("cDefaultPrinter");
    //vPDFC.OleFunction("cGetLogfile");
    //vPDFC.OlePropertyGet("cProgramRelease", true);
    //vPDFC.OlePropertyGet("cProgramIsRunning") = true;
    //vPDFC.OlePropertyGet("cPDFCreatorApplicationPath");
    //vPDFC.OleFunction("cClose");
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    vPDFC.OlePropertySet("cDefaultPrinter", DefaultPrinter.c_str());
    vPDFC.OleFunction("cClose");
    }
    //---------------------------------------------------------------------------
    toutes ces fonctions n'avaient pas été teste

Discussions similaires

  1. PDFCreator et COM, imprimer une seule page
    Par Papy214 dans le forum API, COM et SDKs
    Réponses: 0
    Dernier message: 14/02/2013, 17h15
  2. Gérer port com virtuel en builder 5
    Par phil2fer dans le forum C++
    Réponses: 9
    Dernier message: 28/09/2012, 08h33
  3. Matlab COM Builder
    Par poisson16 dans le forum MATLAB
    Réponses: 1
    Dernier message: 17/06/2007, 20h29
  4. Outils, cours et NOUVEAUX tutoriels pour Borland C++Builder
    Par hiko-seijuro dans le forum C++Builder
    Réponses: 10
    Dernier message: 12/03/2006, 22h33
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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