Home | Chi sono | Contattami
 

Progr. lineare

Delphi
 
Componenti
  Database
 
Miei articoli

Windows

Miei articoli 

 

Salvare una pagina internet in formato MHT
 

Per salvare una pagina internet nel formato mht (tutto incluso in un unico file) si può ricorrere ad una delle funzionalità incluse in CDO.
Bene CDO = Collaborative Data Objects, e non è che ho chiarito tanto le cose ... In sostanza si tratta di un insieme di oggetti COM che consentono la creazione la manipolazione e l' invio di messaggi internet; basta dire che è in qualche modo l' evoluzione delle MAPI (Messaging API) che vengono da anni utilizzate fondamentalmente per l' invio di messaggi di posta elettronica. Bene, quando creiamo un messaggio di posta elettronica possiamo inserire, oltre al testo, immagini, html, allegati, etc... Il tutto viene ingabbiato in un unico file. La tecnica per la creazione di tale file è la stessa che porta al salvataggio di pagine internet nel formato mht da Internet Explorer. CDO prevede naturalmente dei metodi per la creazione di messaggi email composti da immagini allegati, etc...  Utilizzeremo quindi CDO per salvare una pagina internet nel formato mht. Incominciamo creando la unit pascal di import di CDO:

Project
Import type library
selezionare "Microsoft CDO for Windows 2000 Library (Version 1.0)


togliamo la spunta a "Generate Component Wrapper" e vai col "Create Unit"

otteniamo la unit CDO_TLB.pas e la unit ADODB_TLB.pas

la interface principale che dovremo usare è IMessage che consente appunto la manipolazione di messaggi.

La cosa migliore è passare subito alla definizione della procedura di salvataggio di una pagina internet nel formato mht:
 

procedure Indirizzo2MHT(Indirizzo: String; NomeFile: string); var Messaggio: IMessage; ConfigurazioneMessaggio: IConfiguration; CorpoMessaggio: _Stream; //_Stream è un tipo definito in ADO_TLB. Per questo che la unit CDO_TLB include //la unit ADO_TLB begin //creo un messaggio Messaggio := CoMessage.Create; //creo la configurazione del messaggio ConfigurazioneMessaggio := CoConfiguration.Create; try //assegno al messaggio la sua configurazione (fondamentale) Messaggio.Configuration := ConfigurazioneMessaggio; //vado a definire il CORPO del messaggio utilizzando il contenuto della pagina //all' url Indirizzo: vengono aggregte tra loro le varie risorse a cui si fa //riferimento nella pagina (immagini, etc...). Il CORPO del messaggio viene //salvato in uno stream; vogliamo includere tutte le risorse a cui si fa //riferimento nella pagina e quindi il 2° parametro del metodo IMessage.CreateMHTMLBody //(tipo enumerativo Flags) va settato a CdoSuppressNone; //gli ultimi 2 parametri sono rispettivamente utenza e password eventuali previste //per l' accesso alla pagina; //I valori che può assumere il tipo enumerativo CdoMHTMLFlags sono i seguenti //CdoSuppressNone //Valore = 0 //Inserisci nel file qualsiasi elemento (immagini, etc...) trovato nell' html //dell' indirizzo (naturlamente non in maniera ricorsiva) //CdoSuppressImages //Valore = 1 //Non inserisce risorse nel tag IMG //CdoSuppressBGSounds //Valore = 2 //Non inserisce risorse nel tag BGSOUND. //CdoSuppressFrames //Valore = 4 //Non inserisce risorse nel tag FRAME. //CdoSuppressObjects //Valore = 8 //Non inserisce risorse nel tag OBJECT. //CdoSuppressStyleSheets //Valore = 16 //Non inserisce risorse nel tag LINK //CdoSuppressAll //Valore 31 //Non inserisce risorse (in pratica scarica solo l' html della pagina) Messaggio.CreateMHTMLBody(Indirizzo, CdoSuppressNone, '', ''); //Ottengo lo stream che contiene il CORPO del messaggio CorpoMessaggio := Messaggio.GetStream; //salviamo lo stream su un file utilizzando il metodo SaveToFile della interface //_Stream definita in ADO_TLB; adSaveCreateOverWrite significa che se il file è //già esistente verrà sovrascritto CorpoMessaggio.SaveToFile(NomeFile, adSaveCreateOverWrite); finally Messaggio := nil; ConfigurazioneMessaggio := nil; CorpoMessaggio := nil; end; end;

A questo punto si possono fare delle prove variando il valore del tipo enumerativo CdoHtmlFlags. Su www.codeproject.com viene descritto un altro metodo per il salvataggio in mht: è una vera e propria genialata; non è tanto utile in sè per il salvataggio in formato mht (l' esempio appena fatto è semplicissimo e rapidissimo) quanto per l' idea che può in effetti aprire il varco a tante soluzioni. Uno di questi giorni voglio trovare il tempo per descriverlo dettagliatamente e per farne una versione in Delphi; per chi se lo volesse guardare subito l' url è Automated IE SaveAs MHTML


 

 
 
Your Ad Here