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 : 6

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Utilisation générale wxWidgets
» Afficher un document PDF dans une frame.
Conversation : Afficher un document PDF dans une frame.
15-03-2012 09:28:32  Afficher un document PDF dans une frame. #1
ajm (Membre)
Inscrit le : 16-03-2011
Messages: 82
Snippets: 0
Tutoriels: 0
Hors ligne
Bonjour,

Comment afficher le contenu d'un document pdf dans une frame? J'ai déjà essayé l'exemple wxActiveXContainer du manual(http:/docs.wxwidgets.org/trunk/classwx_ … ainer.html), mais je n'arrive pas à le compiler, même si je corrige les erreurs de la compilation.

Dernière modification par ajm (15-03-2012 09:37:14)

17-03-2012 15:50:58  Re: Afficher un document PDF dans une frame. #2
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut.

Quelles sont tes erreurs de compilation ?

Pour ma part, je suis arrivé à compiler (en modifiant le code pour séparer déclaration et implémentation) mais uniquement sous wxWidgets-2.9.3 (j'ai testé avec wxWidgets 2.8.12, mais j'ai des "undefined reference" que je n'arrive pas à corriger.
Par contre, je ne peux pas te dire si ça marche, car je n'ai pas Adobe Reader d'installé.

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
17-03-2012 17:13:26  Re: Afficher un document PDF dans une frame. #3
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Il y a peut-être une solution assez simple à mettre en oeuvre : transformer le fichier pdf à afficher en images png et afficher ces dernières.

Tu peux par exemple utiliser l'un des outils founis par MuPDF (pdfdraw.exe) qui permet de le faire.

Ou alors, si tu as du courage, tu crées ton propre contrôle d'affichage en partant des sources du viewer MuPDF.

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
10-05-2013 11:13:18  Re: Afficher un document PDF dans une frame. #4
ajm (Membre)
Inscrit le : 16-03-2011
Messages: 82
Snippets: 0
Tutoriels: 0
Hors ligne
Salut Xav,


Jusqu'à maintenant, Je n'arrive à compiler le code dans manuel(http:/docs.wxwidgets.org/trunk/classwx_ … ainer.html) , et j'ai l'erreur suivant.

Code Cpp:

 
obj\Debug\ViewPdf1Main.o||In function `ZNK17wxPDFMediaBackend12GetClassInfoEv' : |
C:\Users\ITOKIANA\Desktop\ViewPdf1\ViewPdf1Main.h|205|multiple definition of `wxPDFMediaBackend::GetClassInfo() const'
|
obj\Debug\ViewPdf1App.o:C:\Users\ITOKIANA\Desktop\ViewPdf1\ViewPdf1Main.h|205|first defined here|
obj\Debug\ViewPdf1Main.o||In function `ZN17wxPDFMediaBackend14wxCreateObjectEv':|
C:\Users\ITOKIANA\Desktop\ViewPdf1\ViewPdf1Main.h|205|multiple definition of `wxPDFMediaBackend::wxCreateObject()'
|
obj\Debug\ViewPdf1App.o:C:\Users\ITOKIANA\Desktop\ViewPdf1\ViewPdf1Main.h|205|first defined here|
obj\Debug\ViewPdf1Main.o||In function `ZNK17wxPDFMediaBackend12GetClassInfoEv' : |
C:\Users\ITOKIANA\Desktop\ViewPdf1\ViewPdf1Main.h|205|multiple definition of `wxPDFMediaBackend::ms_classInfo'
|
obj\Debug\ViewPdf1App.o:C:\Users\ITOKIANA\Desktop\ViewPdf1\ViewPdf1Main.h|205|first defined here|
||=== Build finished: 6 errors, 0 warnings (0 minutes, 2 seconds) ===|
 


Est-ce-que tu peut me dire où est le problème?

Dernière modification par ajm (10-05-2013 11:20:07)

10-05-2013 21:31:36  Re: Afficher un document PDF dans une frame. #5
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut.

A première vue, je dirais qu'il s'agit tout simplement d'un manque de "guard-blocks" dans ton header "ViewPdf1Main.h" :

Code wxWidgets:

#ifndef __VIEWPDF1MAIN_H_INCLUDED__
#define __VIEWPDF1MAIN_H_INCLUDED__
 
Déclaration de la classe
.....
 
#endif // __VIEWPDF1MAIN_H_INCLUDED__
 


@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
13-05-2013 07:36:21  Re: Afficher un document PDF dans une frame. #6
ajm (Membre)
Inscrit le : 16-03-2011
Messages: 82
Snippets: 0
Tutoriels: 0
Hors ligne
J'ai essayé d'ajouter le code ci-dessus dans le head mais l'ai toujours le même errur. voici le code dans le head:

Code cpp:

 
#ifndef VIEWPDF1MAIN_H
#define VIEWPDF1MAIN_H
 
 
//(*Headers(ViewPdf1Frame)
#include <wx/menu.h>
#include <wx/button.h>
#include <wx/frame.h>
#include <wx/statusbr.h>
//*)
#include "wx/mediactrl.h"       // wxMediaBackendCommonBase
#include "wx/msw/ole/activex.h" // wxActiveXContainer
#include "wx/msw/ole/automtn.h" // wxAutomationObject
 
class ViewPdf1Frame: public wxFrame
{
    public:
 
        ViewPdf1Frame(wxWindow* parent,wxWindowID id = -1);
        virtual ~ViewPdf1Frame();
 
    private:
 
        //(*Handlers(ViewPdf1Frame)
        void OnQuit(wxCommandEvent& event);
        void OnAbout(wxCommandEvent& event);
        //*)
 
        //(*Identifiers(ViewPdf1Frame)
        static const long ID_CUSTOM1;
        static const long ID_BUTTON1;
        static const long idMenuQuit;
        static const long idMenuAbout;
        static const long ID_STATUSBAR1;
        //*)
 
        //(*Declarations(ViewPdf1Frame)
        wxButton* Button1;
        wxMediaCtrl* mymediactrl;
        wxStatusBar* StatusBar1;
        //*)
 
        DECLARE_EVENT_TABLE()
};
 
#endif // VIEWPDF1MAIN_H
 
 
const IID DIID__DPdf = {0xCA8A9781,0x280D,0x11CF,{0xA2,0x4D,0x44,0x45,0x53,0x54,0x00,0x00}};
const IID DIID__DPdfEvents = {0xCA8A9782,0x280D,0x11CF,{0xA2,0x4D,0x44,0x45,0x53,0x54,0x00,0x00}};
const CLSID CLSID_Pdf = {0xCA8A9780,0x280D,0x11CF,{0xA2,0x4D,0x44,0x45,0x53,0x54,0x00,0x00}};
 
class WXDLLIMPEXP_MEDIA wxPDFMediaBackend : public wxMediaBackendCommonBase
{
public:
    wxPDFMediaBackend() : m_pAX(NULL) {}
    virtual ~wxPDFMediaBackend()
    {
        if(m_pAX)
        {
            m_pAX->DissociateHandle();
            delete m_pAX;
        }
    }
    virtual bool CreateControl(wxControl* ctrl, wxWindow* parent,
                                    wxWindowID id,
                                    const wxPoint& pos,
                                    const wxSize& size,
                                    long style,
                                    const wxValidator& validator,
                                    const wxString& name)
    {
        IDispatch* pDispatch;
        if( ::CoCreateInstance(CLSID_Pdf, NULL,
                                CLSCTX_INPROC_SERVER,
                                DIID__DPdf, (void**)&pDispatch) != 0 )
            return false;
 
        m_PDF.SetDispatchPtr(pDispatch); // wxAutomationObject will release itself
 
        if ( !ctrl->wxControl::Create(parent, id, pos, size,
                                (style & ~wxBORDER_MASK) | wxBORDER_NONE,
                                validator, name) )
            return false;
 
        m_ctrl = wxStaticCast(ctrl, wxMediaCtrl);
        m_pAX = new wxActiveXContainer(ctrl,
                    DIID__DPdf,
                    pDispatch);
 
        wxPDFMediaBackend::ShowPlayerControls(wxMEDIACTRLPLAYERCONTROLS_NONE);
        return true;
    }
 
    virtual bool Play()
    {
        return true;
    }
    virtual bool Pause()
    {
        return true;
    }
    virtual bool Stop()
    {
        return true;
    }
 
    virtual bool Load(const wxString& fileName)
    {
        if(m_PDF.CallMethod("LoadFile", fileName).GetBool())
        {
            m_PDF.CallMethod("setCurrentPage", wxVariant((long)0));
            NotifyMovieLoaded(); // initial refresh
            wxSizeEvent event;
            m_pAX->OnSize(event);
            return true;
        }
 
        return false;
    }
    virtual bool Load(const wxURI& location)
    {
        return m_PDF.CallMethod("LoadFile", location.BuildUnescapedURI()).GetBool();
    }
    virtual bool Load(const wxURI& WXUNUSED(location),
                    const wxURI& WXUNUSED(proxy))
    {
        return false;
    }
 
    virtual wxMediaState GetState()
    {
        return wxMEDIASTATE_STOPPED;
    }
 
    virtual bool SetPosition(wxLongLong where)
    {
        m_PDF.CallMethod("setCurrentPage", wxVariant((long)where.GetValue()));
        return true;
    }
    virtual wxLongLong GetPosition()
    {
        return 0;
    }
    virtual wxLongLong GetDuration()
    {
        return 0;
    }
 
    virtual void Move(int WXUNUSED(x), int WXUNUSED(y),
                    int WXUNUSED(w), int WXUNUSED(h))
    {
    }
    wxSize GetVideoSize() const
    {
        return wxDefaultSize;
    }
 
    virtual double GetPlaybackRate()
    {
        return 0;
    }
    virtual bool SetPlaybackRate(double)
    {
        return false;
    }
 
    virtual double GetVolume()
    {
        return 0;
    }
    virtual bool SetVolume(double)
    {
        return false;
    }
 
    virtual bool ShowPlayerControls(wxMediaCtrlPlayerControls flags)
    {
        if(flags)
        {
            m_PDF.CallMethod("setShowToolbar", true);
            m_PDF.CallMethod("setShowScrollbars", true);
        }
        else
        {
            m_PDF.CallMethod("setShowToolbar", false);
            m_PDF.CallMethod("setShowScrollbars", false);
        }
 
        return true;
    }
 
    wxActiveXContainer* m_pAX;
    wxAutomationObject m_PDF;
 
    wxDECLARE_DYNAMIC_CLASS(wxPDFMediaBackend);
 
 
};
wxIMPLEMENT_DYNAMIC_CLASS(wxPDFMediaBackend, wxMediaBackend);
 
 
 

Dernière modification par ajm (13-05-2013 07:38:19)

13-05-2013 08:54:06  Re: Afficher un document PDF dans une frame. #7
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut.

Pour ma part, ça a marché en plaçant ton code dans le "cpp" de la frame (et non dans le header).
Il faut également y placer les 3 includes correspondants.

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
14-05-2013 10:36:36  Re: Afficher un document PDF dans une frame. #8
ajm (Membre)
Inscrit le : 16-03-2011
Messages: 82
Snippets: 0
Tutoriels: 0
Hors ligne
Maintenant j'arrive à compiler sans erreur mais quand je lance l'application il y a une message venant de Windows Media Player.

Le capture écran de cette message est dans le lien suivant:

http://s24.postimg.org/px1zpcfd1/View_Pdf1.jpg

Dernière modification par ajm (14-05-2013 10:40:34)

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Utilisation générale wxWidgets
» Afficher un document PDF dans une frame.