wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :2359

Membres en ligne : 0
Invités en ligne : 1

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Utilisation générale wxWidgets
» Compiler et utilier wxPdfdocument
Conversation (Résolue) : Compiler et utilier wxPdfdocument
02-05-2013 14:58:43  Compiler et utilier wxPdfdocument #1
ajm (Membre)
Inscrit le : 16-03-2011
Messages: 82
Snippets: 0
Tutoriels: 0
Hors ligne
Salut,

Jusqu'à maintenant, je n'arrive pas à utiliser le wxPdfdocument et je crois que qlq peut me donner un coup de main.

Voici donc la procédure que l'ai fait:

1-Téléchargenet et extraction, Copie du lib dans C:\

2-Modification du fichier "C:\wxpdfdoc-0.9.3\build29\makefile.gcc"


Code:

 
# =========================================================================
#     This makefile was generated by
#     Bakefile 0.2.9 (http://www.bakefile.org)
#     Do not modify, all changes will be overwritten!
# =========================================================================
 
 
 
# -------------------------------------------------------------------------
# These are configurable options:
# -------------------------------------------------------------------------
 
# Compiler flags to link shared library
LINK_DLL_FLAGS ?= -shared
 
# C++ compiler
CXX = g++
 
# Standard flags for C++
CXXFLAGS ?=
 
# Standard preprocessor flags (common for CC and CXX)
CPPFLAGS ?=
 
# Standard linker flags
LDFLAGS ?=
 
# Use DLL build of wx library? [0,1]
WX_SHARED ?= 0
 
# Use debug build of wxWidgets (linked with debug CRT)? [0,1]
WX_DEBUG ?= 1
 
# Version of the wx library to build against.
WX_VERSION ?= 29
 
# Use monolithic build of wxWidgets? [0,1]
WX_MONOLITHIC ?= 1
 
# The directory where wxWidgets library is installed
WX_DIR ?= "C:\wxWidgets-2.9.4"
 
# Build this wxCode component as DLL or as static library? [0,1]
SHARED ?= 1
;


nb: J'ai compiler le wxWidgets comme suit:
mingw32-make -f makefile.gcc BUILD=debug SHARED=0 MONOLITHIC=1 UNICODE=1
mingw32-make -f makefile.gcc BUILD=release SHARED=0 MONOLITHIC=1 UNICODE=1

3-Compilation du lib wxWidgets:
-> cmd -> cd C:\wxpdfdoc-0.9.3\build29 -> mingw32-make -f makefile.gcc

Remarque:

Après compilation, j'ai seulement un fichier "C:\wxpdfdoc-0.9.3\lib\gcc_dll\libwxcode_msw29ud_pdfdoc.a" au-lieu d'un fichier dll.
J'ai remarqué aussi qu'un fichier "C:\wxpdfdoc-0.9.3\samples\minimal\minimal.exe" a été crée(je l'ai testé et il peut générer les exemples)


4-Creation d'un projet wxWidgets sous codeblock, sous debug et release j'ai ajouter:
"C:\wxpdfdoc-0.9.3\lib\gcc_dll\libwxcode_msw29ud_pdfdoc.a" dans linker setting -> links libraries

"C:\wxpdfdoc-0.9.3\include" dans Search directories->Compiler

"C:\wxpdfdoc-0.9.3\lib\gcc_dll" dans Search directories->Linker

5-Edition du projet:
J'ai ajouté le code suivant dans le fichier pdftestMain.h

Code:

 
#include "wx/wxprec.h"
 
#ifdef __BORLANDC__
#pragma hdrstop
#endif
 
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
 
#include "wx/pdfdoc.h"
 

Et le code suivant dans un événement button

Code:

 
  wxPdfDocument pdf;
//  pdf.AddPage();
  pdf.AddPage(wxPORTRAIT,wxPAPER_A4);
  pdf.SetFont(wxT("Helvetica"),wxT("B"),16);
  pdf.Cell(40,10,wxT("Hello World!"));
  pdf.AddPage(wxLANDSCAPE,wxPAPER_A4);
  pdf.SetFont(wxT("Helvetica"),wxT("B"),16);
  pdf.Cell(40,10,wxT("Hello World!"));
  pdf.AddPage(wxPORTRAIT,wxPAPER_A3);
  pdf.SetFont(wxT("Helvetica"),wxT("B"),16);
  pdf.Cell(40,10,wxT("Hello World!"));
  pdf.AddPage(wxLANDSCAPE,wxPAPER_A3);
  pdf.SetFont(wxT("Helvetica"),wxT("B"),16);
  pdf.Cell(40,10,wxT("Hello World!"));
  pdf.SaveAsFile(wxT("tutorial1.pdf"));
 


6-compilation du projet:

J'ai plusieurs erreurs tels que:

Code:

 
undefined reference to `wxZlibOutputStream::wxZlibOutputStream(wxOutputStream&, int, int)
undefined reference to `wxXmlDocument::wxXmlDocument()
undefined reference to `wxXmlDocument::GetRoot()
undefined reference to `wxZlibOutputStream::Close()
.
.
.
.
.
.
.
.
 


Et Voila mon problème.
02-05-2013 15:43:35  Re: Compiler et utilier wxPdfdocument #2
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1375
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut.

ajm:
Remarque:

Après compilation, j'ai seulement un fichier "C:\wxpdfdoc-0.9.3\lib\gcc_dll\libwxcode_msw29ud_pdfdoc.a" au-lieu d'un fichier dll.
J'ai remarqué aussi qu'un fichier "C:\wxpdfdoc-0.9.3\samples\minimal\minimal.exe" a été crée(je l'ai testé et il peut générer les exemples)
Je viens de tester, avec les mêmes paramètres, et j'ai le même résultat.
Ça doit à mon avis être un problème dans le fichier "Makefile.gcc".
J'ai d'ailleurs testé avec wxWidgets-2.9.5 (svn) et là, ça ne compile plus du tout. :/
Il a fallu que je revienne en 2.9.4 pour que ça marche.

ajm:
J'ai remarqué aussi qu'un fichier "C:\wxpdfdoc-0.9.3\samples\minimal\minimal.exe" a été crée(je l'ai testé et il peut générer les exemples)
Oui, j'ai la même chose (un exécutable de plus de 86Mo d'ailleurs). Il est linké en statique, ça confirme le fait qu'il n'y ait pas de dll.
Par contre, le deuxième exemple (/sample/pdfdc/printing.exe) n'a pas été compilé chez moi (erreurs de link).
Ça confirmerait que le Makefile contienne des erreurs.
ajm:
J'ai plusieurs erreurs tels que:

Code:

undefined reference to `wxZlibOutputStream::wxZlibOutputStream(wxOutputStream&, int, int)
undefined reference to `wxXmlDocument::wxXmlDocument()
undefined reference to `wxXmlDocument::GetRoot()
undefined reference to `wxZlibOutputStream::Close()
.
.
Ça correspond à des erreurs de link avec les libs wxWidgets.
Pour "wxXmlDocument", il faut ajouter les libs "libwxbase29ud_xml.a" ainsi que "libwxexpatd.a" (il me semble)
Pour "wxZlibOutputStream", il faut ajouter la lib "libwxzlibd.a"

Sinon, j'ai fait le test avec "WX_SHARED=1" dans le Makefile, et là, il crée bien la dll pdfdoc.
Avec ce paramètre, le deuxième exemple est généré sans problème.

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
03-05-2013 08:21:35  Re: Compiler et utilier wxPdfdocument #3
ajm (Membre)
Inscrit le : 16-03-2011
Messages: 82
Snippets: 0
Tutoriels: 0
Hors ligne
Salut,

Xaviou:
Sinon, j'ai fait le test avec "WX_SHARED=1" dans le Makefile, et là, il crée bien la dll pdfdoc.
Avec ce paramètre, le deuxième exemple est généré sans problème.
J'ai recompilé wxWidgets avec "SHARED=1" pour faire le test "WX_SHARED=1". Là j'ai aussi la dll pdfdoc(C:\wxpdfdoc-0.9.3\lib\gcc_dll\wxcode_msw29ud_pdfdoc.dll).

J'ai crée un projet pour tester ce dll. Après avoir linké et compilé, l"exe ne demande pas le dll(c'est étrange) ça veut dire donc que le link est statique??.

Xaviou:
Pour "wxXmlDocument", il faut ajouter les libs "libwxbase29ud_xml.a" ainsi que "libwxexpatd.a" (il me semble)
Pour "wxZlibOutputStream", il faut ajouter la lib "libwxzlibd.a"
Je ne trouve pas le fichier "libwxbase29ud_xml.a" dans le repertoir de wxWidgets.
03-05-2013 10:24:45  Re: Compiler et utilier wxPdfdocument #4
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1375
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut.

ajm:
Je ne trouve pas le fichier "libwxbase29ud_xml.a" dans le repertoire de wxWidgets.
En fait, oui c'est normal.
J'avais mal regardé, mais tu as compilé wxWidgets en Monolithique.
Ce fichier lib est donc inclus dans la grosse lib wxWidgets.
ajm:
J'ai crée un projet pour tester ce dll. Après avoir linké et compilé, l"exe ne demande pas le dll(c'est étrange) ça veut dire donc que le link est statique??.
C'est effectivement bizarre.
Tu devrais nettoyer ton dossier d'installation de wxPdfDocument, et redémarrer la compilation, car il reste peut-être des trucs suites aux différents essais que tu as pu faire.

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
03-05-2013 14:32:18  Re: Compiler et utilier wxPdfdocument #5
ajm (Membre)
Inscrit le : 16-03-2011
Messages: 82
Snippets: 0
Tutoriels: 0
Hors ligne
Xaviou:
Tu devrais nettoyer ton dossier d'installation de wxPdfDocument, et redémarrer la compilation, car il reste peut-être des trucs suites aux différents essais que tu as pu faire.
J'ai recommencé à zero la compilation(supprimer le dossier "wxpdfdoc-0.9.3" et faire une nouvelle copie). et là tout va bien.

J'ai ensuite fait le test, et j'ai ajouté:

Code Cpp:

 
#include "wx/wxprec.h"
 
#ifdef __BORLANDC__
#pragma hdrstop
#endif
 
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
 
#include "wx/pdfdoc.h"
 


dans le head et,

Code Cpp:

 
    wxPdfDocument pdf;
    //pdf.AddPage();
    pdf.AddPage(wxPORTRAIT,wxPAPER_A4);
    pdf.SetFont(wxT("Helvetica"),wxT("B"),16);
    pdf.Cell(40,10,wxT("Hello World!"));
    pdf.AddPage(wxLANDSCAPE,wxPAPER_A4);
    pdf.SetFont(wxT("Helvetica"),wxT("B"),16);
    pdf.Cell(40,10,wxT("Hello World! Njaka"));
    pdf.AddPage(wxPORTRAIT,wxPAPER_A3);
    pdf.SetFont(wxT("Helvetica"),wxT("B"),16);
    pdf.Cell(40,10,wxT("Hello World!"));
    pdf.AddPage(wxLANDSCAPE,wxPAPER_A3);
    pdf.SetFont(wxT("Helvetica"),wxT("B"),16);
    pdf.Cell(40,10,wxT("Hello World!"));
    pdf.SaveAsFile(wxT("tutorial1.pdf"));
 

dans une événement bouton.

Après la compilation, je n'ai plus d'erreur mais le problème ce que quand je clic le bouton le test a cessé de fonctionner. Je ne sais plus où et le problème.
03-05-2013 14:49:15  Re: Compiler et utilier wxPdfdocument #6
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1375
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Tu obtiens quoi lors du clic sur le bouton ?
L'application crashe, ou est-ce qu'il ne se passe rien du tout ?

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
03-05-2013 14:55:06  Re: Compiler et utilier wxPdfdocument #7
ajm (Membre)
Inscrit le : 16-03-2011
Messages: 82
Snippets: 0
Tutoriels: 0
Hors ligne
Je n’obtiens pas le "tutorial1.pdf" ni autre chose.
03-05-2013 15:16:07  Re: Compiler et utilier wxPdfdocument #8
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1375
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Tu ne le cherches peut-être pas au bon endroit (suivant les paramètres, le dossier d'exécution n'est pas forcément celui où se trouve l'exécutable).

Essaye de rajouter la ligne suivante (au début ou à la fin, peut importe) :

Code wxWidgets:

wxMessageBox(wxGetCwd());

Ainsi, tu verras
- Si ta fonction événementielle est bien appelée
- À quel endroit est enregistré le fichier

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
04-05-2013 09:04:44  Re: Compiler et utilier wxPdfdocument #9
ajm (Membre)
Inscrit le : 16-03-2011
Messages: 82
Snippets: 0
Tutoriels: 0
Hors ligne
Après avoir travaillé pendant la nuit, j'ai avancé un peut. Et j'ai trouvé que le problème vient du fonction

"pdf.SetFont(wxT("Helvetica"),wxT("B"),16);"

J'ai donc modifier le code comme suit:

Code Cpp:

 
wxPdfDocument pdf;
pdf.AddPage(wxPORTRAIT,wxPAPER_A4);
pdf.Rect (10, 10,100, 10,wxPDF_STYLE_DRAW);
pdf.AddPage(wxLANDSCAPE,wxPAPER_A4);
pdf.AddPage(wxPORTRAIT,wxPAPER_A4);
pdf.SetDisplayMode(wxPDF_ZOOM_FULLPAGE,wxPDF_LAYOUT_CONTINUOUS,90);
 
pdf.SetTitle(wxT("Title"));
pdf.SetAuthor(wxT("Namthote of the "));
pdf.SetSubject(wxT("Subject"));
pdf.SetKeywords(wxT("Keywords"));
pdf.SaveAsFile(wxT("Test.pdf"));
 
wxFileName my_file=wxGetCwd()+wxT("\\Test.pdf");
if(my_file.FileExists())
{
    wxLaunchDefaultApplication(wxGetCwd()+wxT("\\Test.pdf"));
}
 


Avec cette code j'ai obtenue un fichier "Test.pdf".

Comment puis-je resoudre le SetFont?

J'ai uploader le fichier pdf ici :http://www.4shared.com/office/nnphBLqH/Test.html
04-05-2013 15:14:52  Re: Compiler et utilier wxPdfdocument #10
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1375
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut.
ajm:
Après avoir travaillé pendant la nuit, j'ai avancé un peut. Et j'ai trouvé que le problème vient du fonction

"pdf.SetFont(wxT("Helvetica"),wxT("B"),16);"
C'est très étrange, car "Helvetica" est une des "famille" de police comprise par wxPdfDocument.

Je viens d'ailleurs de refaire le test avec les 5 familles de polices.
Voici le résultat :
http:/s3.archive-host.com/membres/up/10 … s_Test.pdf

Et voici le code :

Code wxWidgets:

    wxPdfDocument pdf;
    pdf.AddPage(wxLANDSCAPE, wxPAPER_A4);
 
    const wxChar* szFonts[]={ _T("Helvetica"), _T("Times"), _T("Courier"), _T("Symbol"), _T("ZapfDingbats")};
    int iCount=WXSIZEOF(szFonts);
 
    pdf.SetFont(_T("Helvetica"), _T("B"), 16);
 
    pdf.Cell(0, 10, _T("wxPdfDocument : Fonts test"), wxPDF_BORDER_FRAME, 1, wxPDF_ALIGN_CENTER);
    pdf.Ln();
 
    for (int i=0; i<iCount; i++)
    {
        pdf.SetFont(_T("Helvetica"), _T(" "), 12);
        pdf.Cell(60, 10, szFonts[i]);
        pdf.SetFont(szFonts[i], _T(" "), 12);
        pdf.Cell(60, 10, _T("Normal"));
        pdf.SetFont(szFonts[i], _T("I"), 12);
        pdf.Cell(60, 10, _T("Italic"));
        pdf.SetFont(szFonts[i], _T("B"), 12);
        pdf.Cell(60, 10, _T("Bold"));
        pdf.SetFont(szFonts[i], _T("U"), 12);
        pdf.Cell(60, 10, _T("Underline"), 0, 1);
    }
    pdf.SaveAsFile(wxT("wxPdfDoc-Fonts Test.pdf"));

Tu peux éventuellement essayer en remplaçant "Helvetica" par "Arial" (c'est censé donner le même résultat).

Sinon, il faut voir la méthode "AddFont" (mais pour être franc, je ne l'ai jamais essayé...)

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
06-05-2013 08:26:27  Re: Compiler et utilier wxPdfdocument #11
ajm (Membre)
Inscrit le : 16-03-2011
Messages: 82
Snippets: 0
Tutoriels: 0
Hors ligne
Je me demande pourquoi le "sample/minimal.exe" marche très bien alors que mon test ne marche pas. Peut être qu'il y a quelque chose que je doit configurer sur la compilation.
----------
Salut,

Finalement j'ai réussit à résoudre le problème, seulement j'ai oublié d'ajouter les fichiers dans le src dans le projet.

Merci Xav.

Dernière modification par ajm (07-05-2013 08:55:42)

07-05-2013 09:40:29  Re: Compiler et utilier wxPdfdocument #12
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1375
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut.

Bonne nouvelle. Me voilà rassuré car ça commençait à devenir vraiment bizarre...

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
15-05-2013 07:29:43  Re: Compiler et utilier wxPdfdocument #13
ajm (Membre)
Inscrit le : 16-03-2011
Messages: 82
Snippets: 0
Tutoriels: 0
Hors ligne
Salut,

Pour aider les autres à utiliser cette bibliothèque, j'ai fait une tuto sur youtube, voici le lien http://www.youtube.com/watch?v=A1HcxYYLi9E.

Merci beaucoup Xav!
10-06-2013 21:34:10  Re: Compiler et utilier wxPdfdocument #14
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1375
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Hello.

Une petite question relative à wxPdfDoc : est-ce que tu as essayé de compiler cette lib avec wxWidgets-2.9.5 (svn) ?

Pour ma part, y'a rien à faire, ça ne veut pas passer :

Code:

In constructor 'wxPdfDC::wxPdfDC()':
error: cannot allocate an object of abstract type 'wxPdfDCImpl'
note:   because the following virtual functions are pure within 'wxPdfDCImpl':
note:     virtual void wxDCImpl::DoDrawLines(int, const wxPoint*, wxCoord, wxCoord)
note:     virtual void wxDCImpl::DoDrawPolygon(int, const wxPoint*, wxCoord, wxCoord, wxPolygonFillMode)
In constructor 'wxPdfDC::wxPdfDC(const wxPrintData&)':
error: cannot allocate an object of abstract type 'wxPdfDCImpl'
note:   since type 'wxPdfDCImpl' has pure virtual functions
In constructor 'wxPdfDC::wxPdfDC(wxPdfDocument*, double, double)':
error: cannot allocate an object of abstract type 'wxPdfDCImpl'
note:   since type 'wxPdfDCImpl' has pure virtual functions

Alors qu'avec la version 2.9.4, ça compile nickel...

@+
Xav'
----------
Sinon, sympa la vidéo.

La combine de passer par Code::Blocks est bien trouvée.

Dernière modification par Xaviou (10-06-2013 21:35:03)


Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
11-06-2013 07:45:44  Re: Compiler et utilier wxPdfdocument #15
ajm (Membre)
Inscrit le : 16-03-2011
Messages: 82
Snippets: 0
Tutoriels: 0
Hors ligne
Hello,

En faite j'ai compilé ce lib seulement avec wxWidgets-2.9.4, et je n'ai pas 2.9.5 pour faire un teste.
11-06-2013 18:55:07  Re: Compiler et utilier wxPdfdocument #16
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1375
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Bon, ben j'y suis finalement arrivé, avec l'aide de l'auteur.

Voici le lien vers le topic du forum officiel anglais correspondant :
http:/forums.wxwidgets.org/viewtopic.ph … mp;t=37517

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Utilisation générale wxWidgets
» Compiler et utilier wxPdfdocument