Membres inscrits :2359
Membres en ligne : 0
Invités en ligne : 3


|
Conversation : Afficher un document PDF dans une frame. |
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)
|
|
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....
|
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....
|
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)
|
|
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....
|
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)
|
|
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....
|
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)
|
|
|