2012-04-03 15 views
8

Qualcuno sa come generare file .mht in modo programmatico in C#, con le immagini incorporate in esso? Il fatto è che ho capito che i file .mht sono in grado di incorporare immagini in essi, e queste immagini incorporate si spostano con l'intero file (mht) quando si cambia la sua posizione. E questo file può essere visualizzato su diversi browser, tra cui IE 6.genera il file .mht al livello di programmazione

Mi è stato detto di provare la tecnica Schema URL dati. Ma non potrebbe funzionare perché non è supportato da altri browser. Ad esempio, IE 6.

+0

Sono stato lì - mentre è proprio possibile farlo, anche scrivendolo da solo - non andare lì. MHT è molto proprietario e NON supportato dalla maggior parte dei browser moderni. Vorrei esaminare prima le alternative – BrokenGlass

+1

Penso che il modo più semplice sarebbe quello di salvare alcune semplici pagine web come .mht con IE e vedere come funziona. –

+1

Ho provato ad esportare file .mht su IE. Sembra implementare la tecnica dello schema dell'Url Data. Ad esempio se trovato il seguente codice nel file esportato (mht) –

risposta

5

E 'possibile ed è stato sicuramente fatto da altri - materiale pertinente e biblioteche/codice sorgente:

+0

Ho provato quanto sopra. Sembra che siano in grado di convertire un file html in mht. Funziona se si accede a un file html dal web. Ma se accedi al file html dall'unità locale, la conversione non funzionerà. Le origini precedenti utilizzano questo metodo: CreateMHTMLBody (URL, CDO.CdoMHTMLFlags.cdoSuppressNone, "", ""); –

+0

Il motivo per cui sto cercando di incorporare l'immagine nel file html è perché sto creando un'applicazione di modulo Windows che deve esportare un report con immagini. C'è un modo per realizzare senza usare le librerie commerciali ? –

+0

@chosenOneThabs l'unico modo per farlo senza usare le librerie commerciali è implementare il formato completo (che è solo parzialmente documentato) da solo. – Yahia

1

Avrei iniziato con RFC 2557 in modo che avessi alcune nozioni di base su cosa stavo lavorando. Quindi vai a cercare code/libraries che si occupano di esso.

A mia conoscenza non ci sono classi BCL per gestire MHTML.

+0

Ho provato quanto sopra. Sembra che siano in grado di convertire un file html in mht. Funziona se si accede a un file html dal web. Ma se accedi al file html dall'unità locale, la conversione non funzionerà. Le origini precedenti utilizzano questo metodo: CreateMHTMLBody (URL, CDO.CdoMHTMLFlags.cdoSuppressNone, "", ""); –

+0

Il motivo per cui sto cercando di incorporare l'immagine nel file html è perché sto creando un'applicazione di modulo Windows che deve esportare un report con immagini. C'è un modo per realizzare senza usare le librerie commerciali ? –

+0

Creare il report come modello. Esporta da ie. fare ricerca/sostituire per ottenere contenuto del report in. –

5

In un ambiente Windows è possibile farlo direttamente tramite il CDO.Message componente COM, che espone il IMessage interface
Non so i dettagli di importare oggetti COM in C# in modo ti darò un esempio veloce nella sintassi C-like:

IMsgObj = CreateObject("CDO.Message") // create the object 
IMsgObj.CreateMHTMLBody("http://www.example.com/") // convert the URL to MHTML 
IMsgObj.GetStream().SaveToFile("output.mht") // save it to a file 

Il CLSID dei componenti CDO.Message è {CD000001-8B95-11D1-82DB-00C04FB1625D}

Tuttavia, tenere presente che questo componente è pensato per generare messaggi di posta elettronica (estensione file .eml anziché .mht), il che significa che i file JavaScript non sono inclusi. Altrimenti sono approssimativamente equivalenti.

+0

* è valido per il file html dall'unità locale? * – Kiquenet

+0

@Kiquenet, dovrebbe funzionare. Basta passare un percorso file invece di un URL – GetFree

1

MSDN has a great article (giugno 2011) su come creare un file MHT utilizzando sia CDO che System.Net.Mail. Il codice sorgente C# è incluso nel pieno. Lo userei sopra la versione VB.Net o Google Code.

+1

'Note:' *** I principali svantaggi dell'utilizzo di CDO sono: *** _COM Interop! _ E _Non funziona in sistemi a 64 bit (x64) _ – Kiquenet

+0

'Note: '* Questo esempio (articolo MSDN) non include il codice per la gestione di immagini di sfondo css e iframe * – Kiquenet

Problemi correlati