2012-04-03 18 views
8

Czy ktoś wie jak wygenerować plik .mht programowo w C#, z obrazy osadzone w nim? Chodzi o to, że zdałem sobie sprawę, że pliki .mht są w stanie osadzać w nich obrazy, a te osadzone obrazy przemieszczają się wraz z całym plikiem (mht) po zmianie jego lokalizacji. I plik ten można przeglądać w różnych przeglądarkach, w tym IE 6.wygenerować plik .mht programowo

Powiedziano mi, aby wypróbować technikę Data Url Scheme. Ale to nie mogło działać, ponieważ nie jest obsługiwane przez inne przeglądarki. np IE 6.

+0

Byłem tam - chociaż jest to bardzo możliwe, nawet samemu je pisząc - nie idź tam. MHT jest bardzo zastrzeżona i NIE jest obsługiwana przez większość nowoczesnych przeglądarek. Najpierw sprawdzałem alternatywy. – BrokenGlass

+1

Myślę, że najłatwiej byłoby zapisać kilka prostych stron internetowych jako .mht z IE i zobaczyć, jak to działa. –

+1

Próbowałem wyeksportować plik .mht na IE. Wydaje się, że implementuje technikę Data Url Scheme. Np jeśli stwierdzono następujący kod w eksportowanym pliku (MHT) –

Odpowiedz

5

Jest to możliwe i na pewno zostało zrobione przez innych - istotnych materialnych i biblioteki/kod źródłowy:

+0

Próbowałem powyższego. Wygląda na to, że są w stanie przekonwertować plik html na mht. Działa to, jeśli uzyskasz dostęp do pliku html z Internetu. Ale jeśli uzyskasz dostęp do pliku html z dysku lokalnego, konwersja nie będzie działać. Powyższe źródła wykorzystują tę metodę: CreateMHTMLBody (URL, CDO.CdoMHTMLFlags.cdoSuppressNone, "", ""); –

+0

Powodem, dla którego próbuję osadzić obraz w pliku html jest tworzenie aplikacji formularza Windows , która musi wyeksportować raport z obrazami. Czy istnieje sposób na wykonanie bez korzystania z komercyjnych bibliotek ? –

+0

@chosenOneThabs Jedynym sposobem na zrobienie tego bez korzystania z komercyjnych bibliotek jest zaimplementowanie kompletnego formatu (który jest tylko częściowo udokumentowany). – Yahia

1

zacząłbym z RFC 2557 tak, że miałem pewne podstawowe zrozumienie tego, co ja pracuje. Następnie spójrz na code/libraries, które sobie z tym poradzą.

Do mojej wiedzy nie istnieją żadne BCL klas do czynienia z MHTML.

+0

Próbowałem powyższego. Wygląda na to, że są w stanie przekonwertować plik html na mht. Działa to, jeśli uzyskasz dostęp do pliku html z Internetu. Ale jeśli uzyskasz dostęp do pliku html z dysku lokalnego, konwersja nie będzie działać. Powyższe źródła wykorzystują tę metodę: CreateMHTMLBody (URL, CDO.CdoMHTMLFlags.cdoSuppressNone, "", ""); –

+0

Powodem, dla którego próbuję osadzić obraz w pliku html jest to, że tworzę aplikację formularza okna , która musi wyeksportować raport ze zdjęciami. Czy istnieje sposób na wykonanie bez korzystania z komercyjnych bibliotek ? –

+0

Utwórz raport jako szablon. Eksportuj z np. przeszukuj/zamień, aby uzyskać treść raportu. –

5

W środowisku Windows można to zrobić bezpośrednio za pomocą CDO.Message komponentu COM, który naraża IMessage interface
nie wiem szczegóły importowania obiektów COM w C# więc dam ci krótki przykład w składni 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 

Clsid składników CDO.Message jest {CD000001-8B95-11D1-82DB-00C04FB1625D}

Należy pamiętać, że ten komponent służy do generowania wiadomości e-mail (rozszerzenie pliku .eml zamiast .mht), co oznacza, że ​​pliki JavaScript nie są uwzględniane. W przeciwnym razie są one mniej więcej równoważne.

+0

* dotyczy pliku html z dysku lokalnego? * – Kiquenet

+0

@Kiquenet, powinno działać. Wystarczy podać ścieżkę pliku zamiast adresu URL: – GetFree

1

MSDN has a great article (czerwiec 2011) o tym, jak utworzyć plik MHT przy użyciu zarówno CDO i System.Net.Mail. Kod źródłowy C# jest zawarty w całości. Używałbym tego powyżej wersji VB.Net lub Google Code.

+1

'Uwagi:' *** Główne wady używania CDO to: *** _COM Interop! _ I _Nie działa w systemach 64-bitowych (x64) _ – Kiquenet

+0

'Uwagi: '* Ten przykład (artykuł MSDN) nie zawiera kodu do obsługi obrazów tła w tle i elementów iframe * – Kiquenet

Powiązane problemy