ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Conversion HTML en MHT   



L'auteur

Christophe Chenavier
France France
Membre Simple
# 0000000023
enregistré le 14/10/2004
http://www.corwin.fr
53 ans
CHENAVIER Christophe
80440 BOVES
de la société Corwin
Fiche personnelle


Note des membres
pas de note

Contributions > 01 - PRG : Programmation > Conversions

Conversion HTML en MHT
# 0000000238
ajouté le 13/09/2005 11:23:34 et modifié le 13/09/2005
consulté 7216 fois
Niveau initié

Version(s) Foxpro :
VFP 9.0
VFP 8.0


Télécharger le ZIP (1.34 Ko)
Description

Permet d'inclure les images dans la page Html [ format Archive Web (.mht) d'Internet Explorer] et de l'afficher avec IE.
Cela simplifie l'export ou l'archivage car il n'y a plus à se soucier de fournir les images avec la page Html.

Note : Si le lien sur l'image dans la page HTML ne mentionne que son nom et pas son chemin, alors le module recherchera directement l'image dans le projet.

Code source :
*!* Objet : Connversion HTML en MHT
*!* Auteur : C.Chenavier
*!* Version : 1.00 - 18/04/2005
*!*
*!* oMHtml = CREATEOBJECT("MHTML", cSourceHtml)
*!* oMHtml.Value contient alors la page complète avec ses images.

#DEFINE LF          CHR(10)
#DEFINE CR          CHR(13)
#DEFINE CR_LF       CR+LF

DEFINE CLASS MHTML AS COLLECTION

       cFrom = ''
       cHtml = ''
       cSujet = ''
       value = ''

       PROCEDURE Init
           LPARAMETER cHtml

           LOCAL I, cImg, oImg
           IF ATC("<html>", M.cHtml) > 0
              THIS.cHtml = M.cHtml
              I = 1
              M.cImg = STREXTRACT(M.cHtml,'<img','>', I, 1)
              DO WHILE NOT EMPTY(M.cImg)
                 M.cImg = ALLTRIM(STRTRAN(STREXTRACT(M.cImg,'src','', 1, 1), '='))
                 M.cDelim = IIF(AT(CHR(39), M.cImg) > 0, CHR(39), CHR(34))
                 M.cImg = SUBSTR(M.cImg, 2, AT(M.cDelim, M.cImg, 2)-2)
                 IF FILE(M.cImg)
                    IF EMPTY(THIS.GetKey(M.cImg))
                       THIS.Add(M.cImg, M.cImg)
                    ENDIF
                 ELSE
                    TRY
                       oImg = LOADPICTURE(M.cImg)
                       IF EMPTY(THIS.GetKey(M.cImg))
                          THIS.Add(M.cImg, M.cImg)
                       ENDIF
                    CATCH
                    ENDTRY
                 ENDIF
                 I = I + 1
                 M.cImg = STREXTRACT(M.cHtml,'<img','>', I, 1)
              ENDDO
           ENDIF
       ENDPROC


       FUNCTION Value_access

           LOCAL cID, cMHtml, cImages, cPicture, cExt

           M.cID = SYS(2015)
           M.cMHtml = "From: " + THIS.cFrom + CR_LF + ;
                      "Subject: " + THIS.cSujet + CR_LF + ;
                      "Date: " + TTOC(DATETIME()) + CR_LF + ;
                      "MIME-Version: 1.0" + CR_LF + ;
                      "Content-Type: multipart/related;" + CR_LF + ;
                      [ type="text/html";] + CR_LF + ;
                      [ boundary="] + M.cID + ["] + CR_LF + CR_LF + ;
                      "--" + M.cID + CR_LF + ;
                      "Content-Type: text/html;" + CR_LF + ;
                      [ charset="Windows-1252"] + CR_LF + ;
                      "Content-Transfer-Encoding: quoted-printable" + CR_LF + CR_LF + ;
                      [<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">] + CR_LF + ;
                      STRTRAN(THIS.cHtml,"=","=3D") + CR_LF + CR_LF

           M.cImages = ''
           FOR EACH M.cPicture IN THIS
               M.cExt = LOWER(JUSTEXT(M.cPicture))
               IF M.cExt = "jpg"
                  M.cExt = "jpeg"
               ENDIF
               M.cImages = M.cImages  + ;
                           "--" + M.cID + CR_LF + ;
                           "Content-Type: image/" + M.cExt + CR_LF + ;
                           "Content-Transfer-Encoding: base64" + CR_LF + ;
                           "Content-Location: file:///" + M.cPicture + CR_LF + CR_LF + ;
                           Split(STRCONV(FILETOSTR(M.cPicture),13), 76) + CR_LF + CR_LF
           ENDFOR

           RETURN M.cMHtml + M.cImages + "--" + M.cID + "--"
       ENDFUNC
ENDDEFINE



*---------------------------------------------------------------- Split

FUNCTION Split

LPARAMETERS cString, nSize, cParseChar

LOCAL I, cRes

M.cRes = ''
IF PCOUNT() = 2
   M.cParseChar = CR_LF
ENDIF
FOR I = 1 TO CEILING(LEN(M.cString)/M.nSize)
    M.cRes = M.cRes + IIF(NOT EMPTY(M.cRes), M.cParseChar, '') + SUBSTR(M.cString, (I-1)*M.nSize + 1, M.nSize)
ENDFOR

RETURN M.cRes



Commentaires
le 13/09/2005, Francis Faure a écrit :
Bravo Christophe,
solution avec vfp !

en complément :
autre solution avec CDO :

v_adresse_fichier_page_html = "file://c:\temp\test.html"
v_fichier_mhtml = "c:\temp\test.mhtml"
IF FILE(v_fichier_mhtml)
ERASE (v_fichier_mhtml)
ENDIF

oCdo = Createobject("CDO.Message")
oCdo.CreateMHTMLBody(v_adresse_fichier_page_html)
oStream = oCdo.getstream()
oStream.SaveToFile(v_fichier_mhtml,1)
oStream=null
Ocdo=Null

a voir aussi la contribution de mike :
http://www.atoutfox.org/articles.asp?ACTION=FCONSULTER&ID=0000000041

le 08/06/2008, ybenam a écrit :
J'arrive bien en retard il est vrai,mais voici une solution semi automatique avec Automation IExplore:
////////////////////////////////////////////////////
xURL="http://www.atoutfox.org/"
_screen.visible=.f.
apIE=createObject('internetexplorer.application')
apIE.navigate(xURL)
apIE.visible=.f.

do while apIE.busy or apIE.readystate#4
enddo
inkey(1)
apIE.execWB(4,0) &&boite de dialogue avec tous les choix possibles yc MHT
_screen.visible=.t.
/////////////////////////////////////////////////////

Les commandes 'save(file,format)' directes n'existent pas chez IE ,à l'instar de word,excel,powerpoint,....Les seules commandes IE, si je ne me trompe,sont 'execWb' et 'execCommand' qui ouvrent des boites de dialogues 'SAVEAS',enregistrer sous !


Les collections n'existeront malheureusement jamais sous VFP6.0 !

le 13/11/2008, Olivier Hamou a écrit :
Salut Christophe,

Aurais tu réparé des bugs dans ta routine, car je n'arrive pas à afficher des images?

N'aurais tu pas oublié le content-id pour les images ?

Ca y est j'ai trouvé il faut remplacer,

"Content-Location: file:///" + M.cPicture + CR_LF + CR_LF + ;

par

"Content-Location: " + M.cPicture + CR_LF + CR_LF + ;

Et aussi ajouter un set path additive quand vos images sont dans un repertoire.


Cordialement Olivier,


Publicité

Les pubs en cours :

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2019.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3