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

  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