Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Un lecteur de Ebook... Mar 1 Déc 2015 - 3:43 | |
| Vous avez un lecteur de ebooks ? Il y en a des gratuits, et même plusieurs. Mais il est sympa de faire cela avec Panoramic, aussi. En réalité, c'est très simple ! Un ebook (extension *.epub) est essentiellement un fichier ZIP contenant une arborescence restreinte de dossiers et de fichiers. Certains donnent la liste des éléments (pour simplifier), et d'autres représentent les textes, sous forme de fichiers xhtml. Et ces fichiers sont affichables avec l'objet WebBrowser de KGF.dll. Donc, voici un lecteur très simple. Il permet de choisir le livre (un fichier *.epub), et de l'ouvrir. Il présentera la couverture du livre sous forme d'image à gauche, et la liste des textes disponibles à droite. Il n'y a pas encore les titres, mais ça viendra. Un clic sur une des lignes de la liste des textes affichera une fenêtre de lecture. C'est aussi simple que ça. Voici le code: - Code:
-
' KGF_ebook_reader.bas
labels() constantes() variables()
dll_on "KGF.dll"
form0() menu() GUI() invisibles()
end
exit: if OpnFlag%=1 end_if terminate open: if OpnFlag%=1 s$ = "Un ebook est actuellement ouvert:"+crlf$+Ebook$+crlf$+"Voulez-vous le fermer ?" if message_confirmation_yes_no(s$)<>1 then return gosub close end_if filter no_open%,"Ebook|*.epub" f$ = file_name$(no_open%) if f$="_" then return if lower$(right$(f$,5))<>".epub" then f$ = f$ + ".epub" if file_exists(f$)=0 message "Ebook non trouvé !" return end_if ' décompresser le ebook d$ = left$(f$,len(f$)-5) archiver_on archiver_extract f$,d$ archiver_off OpnFlag% = 1 Ebook$ = f$ EbookDossier$ = d$ ' chercher le nom du dossier des chapitres file_open_read 1,EbookDossier$+"\META-INF\Container.xml" while lower$(left$(trim$(s$),10))<>"<rootfile " file_readln 1,s$ end_while file_close 1 i% = instr(s$,"=") while mid$(s$,i%,1)<>chr$(34) i% = i% + 1 end_while s$ = mid$(s$,i%+1,len(s$)) s$ = left$(s$,instr(s$,"/")-1) EbookDetailDossier$ = EbookDossier$+""+s$
' analyser le dossier des chapitres file_open_read 1,EbookDetailDossier$+"\content.opf" while lower$(trim$(s$))<>"<manifest>" file_readln 1,s$ end_while file_readln 1,s$ while lower$(trim$(s$))<>"</manifest>" s$ = lower$(s$) if (instr(s$,"couverture.jpg")>0) or (instr(s$,"cover.jpg")>0) ExtraireHref(s$) FichierCouverture$ = EbookDetailDossier$+""+href$ end_if if instr(s$,".xhtml")>0 ExtraireHref(s$) item_add no_Chemins%,EbookDetailDossier$+""+href$ href$ = file_extract_name$(href$) item_add no_container_sommaire%+1,href$ end_if file_readln 1,s$ end_while file_close 1 ' montrer la couverture show no_container_couverture% file_load no_container_couverture%+1,FichierCouverture$
' charger le sommaire (liste des chapitres) show no_container_sommaire%
return
close: if OpnFlag0 then return : ' rien n'est ouvert ? if EbookDossier$="" message "Anomalie: pas de dossier connu !" return end_if if dir_exists(EbookDossier$)=0 message "Anomalie: le dossier n'existe pas:"+crlf$+EbookDossier$ return end_if if message_confirmation_yes_no("Voulez-vous vraiment effacer:"+crlf$+EbookDossier$+"\*.*")<>1 then return
hide no_container_couverture% hide no_container_sommaire% url$ = "about:blank" res% = dll_call2("WB_Url",WB%,adr(url$))
' ici, supprimer tout...
s$ = param_value$(0) s$ = file_extract_path$(s$) file_open_write 1,s$+"KGF_ebook_reader.vbs" file_writeln 1,"Set oShell = CreateObject("+chr$(34)+"WScript.Shell"+chr$(34)+")" file_writeln 1,"Set oFs = CreateObject ("+chr$(34)+"Scripting.FileSystemObject"+chr$(34)+")" file_writeln 1,"oFS.CreateTextFile ("+chr$(34)+"tmp.cmd"+chr$(34)+")" file_writeln 1,"Const ForReading = 1, ForWriting = 2" file_writeln 1,"Set oFile = oFs.OpenTextFile ("+chr$(34)+"tmp.cmd"+chr$(34)+", ForWriting)" file_writeln 1,"oFile.Writeline "+chr$(34)+"chcp 1252"+chr$(34) file_writeln 1,"oFile.Writeline "+chr$(34)+"del /s /q "+chr$(34)+"+"+chr$(34)+chr$(34)+chr$(34)+EbookDossier$+"\*.*"+chr$(34)+chr$(34)+chr$(34) file_writeln 1,"oFile.Writeline "+chr$(34)+"rd /s /q "+chr$(34)+"+"+chr$(34)+chr$(34)+chr$(34)+EbookDossier$+chr$(34)+chr$(34)+chr$(34) file_writeln 1,"oFile.Close" file_writeln 1,"oShell.Run "+chr$(34)+"tmp.cmd"+chr$(34)+",0,true" file_writeln 1,"oFS.DeleteFile ("+chr$(34)+"tmp.cmd"+chr$(34)+")" file_close 1 execute_wait s$+"KGF_ebook_reader.vbs" OpnFlag% = 0 Ebook$ = "" EbookDossier$ = "" clear no_Chemins% clear no_container_sommaire%+1 return
choix: i% = item_index(number_click) url$ = item_read$(no_Chemins%,i%) res% = dll_call2("WB_Url",WB%,adr(url$)) caption no_lecteur%,"Lecture: "+Ebook$+" - "+item_index$(number_click) show no_lecteur% return
' ===========================================================================
sub labels() label open, exit, close, choix
end_sub
sub constantes() dim EBRversion$ : EBRversion$ = "V0.01" dim crlf$ : crlf$ = chr$(13)+chr$(10) end_sub
sub variables() dim res%, no%, no1%, no2%, s$, f$, d$, i%, href$, url$ dim no_open% : ' numéro d'objet de open_dialog dim no_Chemins% : ' dlist contenant les chemins vers les chapitres dim no_lecteur% : ' fenêtre de lecture dim OpnFlag% : ' indique si un ebook est ouvert dim EbookDossier$ : ' dossier contenant le ebook dim Ebook$ : ' nom du fichier ebook dim EbookDetailDossier$ : ' dossier contenant les volumes individuels dim no_container_couverture% : ' numéro du container pour la couverture dim no_container_sommaire% : ' numéro du container pour le sommaire dim FichierCouverture$ : ' nom du fichier de couverture dim WB% : ' lecteur end_sub
sub form0() full_space 0 : on_close 0,close caption 0,"KGF_ebook_reader "+EBRversion$
end_sub
sub menu() no% = no% + 1 : main_menu no% : no1% = no% no% = no% + 1 : sub_menu no% : parent no%,no1% : no2% = no% : caption no%,"Fichiers" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir" : on_click no%,open no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer" : on_click no%,close
no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-" no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,exit end_sub
sub GUI() no% = no% + 1 : container no% : no_container_couverture% = no% hide no_container_couverture% : width no%,screen_x/2-15 : height no%,screen_y-100 caption no%,"Couverture" no% = no% + 1 : picture no% : parent no%,no_container_couverture% full_space no% : stretch_on no% no% = no% + 1 : container no% : no_container_sommaire% = no% hide no_container_sommaire% : width no%,screen_x/2-15 : height no%,screen_y-100 left no_container_sommaire%,width(no_container_couverture%)+3 caption no%,"Sommaire" no% = no% + 1 : list no% : parent no%,no_container_sommaire% full_space no% : on_click no%,choix no% = no% + 1 : form no% : no_lecteur% = no% : hide no% : top no%,50 : left no%,50 width no%,width(0)-100 : height no%,height(0)-100 WB% = dll_call1("WB_Create",handle(no_lecteur%)) res% = dll_call5("WB_Locate",WB%,0,0,width(no_lecteur%)-20,height(no_lecteur%)-20) end_sub
sub invisibles() no% = no% + 1 : open_dialog no% : no_open% = no% no% = no% + 1 : dlist no% : no_Chemins% = no% end_sub
sub ExtraireHref(s$) ' <item id="Couverture.jpg" href="Images/Couverture.jpg" media-type="image/jpeg"/> dim_local i%, j%,s1$ s1$ = trim$(s$) i% = instr(s1$,"href=") while mid$(s1$,i%,1)<>chr$(34) i% = i% + 1 end_while s1$ = mid$(s1$,i%+1,len(s1$)) j% = 1 while mid$(s1$,j%,1)<>chr$(34) j% = j% + 1 end_while href$ = left$(s1$,j%-1) i% = instr(href$,"/") while i%>0 href$ = left$(href$,i%-1)+""+mid$(href$,i%+1,len(href$)) i% = instr(href$,"/") end_while end_sub
Dernière édition par Klaus le Ven 4 Déc 2015 - 17:47, édité 3 fois | |
|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Un lecteur de Ebook... Mar 1 Déc 2015 - 7:34 | |
| Pas encore testé mais merci Klaus, c'est sympa d'avoir ça sous le coude. Il faudrait même que ça puisse passer sur la version Android (même si pour le moment ce n'est techniquement pas possible)
| |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un lecteur de Ebook... Mar 1 Déc 2015 - 11:09 | |
| Sous Android, j'utilise actuellement FBReader dans sa version gratuite - parfait. Sous Windows, j'utilise Calibre - très puissant.
Le présent programme est juste une étude de faisabilité, avec: - gestion du ZIP - analyse "brutale" de fichiers XML - affichage de fichiers HTML - suppression silencieuse d'une arborescence de dossiers avec ses fichiers | |
|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Un lecteur de Ebook... Mar 1 Déc 2015 - 13:49 | |
| oui, ça j'ai bien compris, je voulais juste dire qu'idéalement c'est le genre de programme qu'il serait bien de pouvoir porter sur la version Android de Panoramic car c'est typiquement le genre d'applications que l'on utilise sur cette plateforme (perso: musique, jeux, photos et ebook ) | |
|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 2 Déc 2015 - 18:47 | |
| Oups... | |
|
mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Un lecteur de Ebook... Mer 2 Déc 2015 - 20:14 | |
| Encore la preuve de la puissance de KGF merci Klaus | |
|