2013-04-24 4 views
13

कई टूल में एमएचटी फ़ाइल निर्यात करने का एक तरीका है। मैं उस फ़ाइल को फ़ाइलों के संग्रह, एक HTML फ़ाइल, प्रासंगिक छवियों और सीएसएस फ़ाइलों में परिवर्तित करने का एक तरीका चाहता हूं, जिसे मैं फिर वेबहोस्ट पर अपलोड कर सकता हूं और सभी ब्राउज़रों द्वारा उपभोग योग्य हो सकता हूं। क्या ऐसा करने के लिए कोई भी उपकरण या पुस्तकालय या एल्गोरिदम जानता है।आप प्रोग्रामेटिक रूप से (या किसी टूल के साथ) कैसे परिवर्तित कर सकते हैं .MHT mhtml फ़ाइलों को नियमित HTML और CSS फ़ाइलों में कनवर्ट करें?

+0

आप किस प्रोग्रामिंग भाषा का उपयोग करना चाहते थे? –

उत्तर

10

ठीक है, आप आईई में एमएचटी फ़ाइल खोल सकते हैं और इसे एक वेब पेज के रूप में सहेज सकते हैं। मैंने इस पृष्ठ के साथ इसका परीक्षण किया, और भले ही यह आईई में अजीब लग रहा था (यह सब के बाद आईई है), यह सहेजा गया और फिर क्रोम में ठीक खोला गया (जैसा कि, ऐसा लगता है)।

उस विधि को छोड़कर, फ़ाइल को स्वयं देखकर, पाठ ब्लॉक फ़ाइल में सहेजे जाते हैं, और अन्य सभी सामग्री बेस 64 में सहेजी जाती है। सामग्री के प्रत्येक आइटम से पहले किया जाता है:

[Boundary] 
Content-Type: [Mime Type] 
Content-Transfer-Encoding: [Encoding Type] 
Content-Location: [Full path of content] 

कहाँ [माइम प्रकार], [एन्कोडिंग प्रकार], और [सामग्री की पूर्ण पथ] चर रहे हैं। [एन्कोडिंग प्रकार] या तो बेस 64 या उद्धृत-प्रिंट करने योग्य प्रतीत होता है। [सीमा] तो जैसे .mht फ़ाइल की शुरुआत में परिभाषित किया गया है:

From: <Saved by WebKit> 
Subject: converter - How can you programmatically (or with a tool) convert .MHT mhtml  files to regular HTML and CSS files? - Stack Overflow 
Date: Fri, 9 May 2013 13:53:36 -0400 
MIME-Version: 1.0 
Content-Type: multipart/related; 
    type="text/html"; 
    boundary="----=_NextPart_000_0C08_58653ABB.B67612B7" 

कि का उपयोग करना, आप अपने खुद के फ़ाइल पार्सर यदि आवश्यक हो तो बना सकता है।

+0

तो आईई फिर एक फ़ोल्डर बनायेगा और छवियों को अलग से सहेज देगा आदि? मुझे आश्चर्य है कि क्या आप COM ऑब्जेक्ट के साथ ऐसा करने के लिए IE स्वचालित कर सकते हैं? – klumsy

+0

हाँ, आईई सभी छवियों और क्या नहीं के साथ एक फ़ोल्डर बनाता है। COM ऑब्जेक्ट एक 'नेविगेट 2' फ़ंक्शन और ईवेंट हैंडलर (पूर्ण होने और इस तरह के लिए) दिखाता है, लेकिन मुझे इसके संदर्भ में एक सेव फ़ंक्शन नहीं मिला। इसका मतलब यह नहीं है कि यह वहां नहीं है, बस मुझे यह नहीं मिला। – XGundam05

+0

मैंने इसके साथ खेला, और मैं इसे लोड कर सकता हूं, और इसे सहेजने के लिए स्वचालित कीप्रेस को हैक के रूप में सहेज सकता हूं, जो हैकी और नाजुक है। हालांकि यह इसे एमएचटी के रूप में सहेजना चाहता है और पूर्ण एचटीएमएल (पूरी साइट के रूप में ऑनलाइन साइट को सहेजना ठीक नहीं करता है), और मुझे विशिष्टता का कोई तरीका नहीं मिल रहा है जो ExecWB का उपयोग करके विकल्प के रूप में सहेजता है, तो शायद सबसे अच्छा काम करना होगा कोड के साथ एमएचटी को प्रोसेस करने पर काम करें, या सेलेनियम, या फोरफॉक्स या क्रोम स्वचालन या एक्सटेंशन या कुछ के साथ किसी अन्य प्रकार के स्वचालन की कोशिश करें .. – klumsy

0

मुझे लगता है कि @ XGundam05 सही है। यह है कि मैंने इसे काम करने के लिए क्या किया।

मैंने विजुअल स्टूडियो में एक विंडोज फॉर्म प्रोजेक्ट के साथ शुरुआत की। वेब ब्राउजर को फॉर्म में जोड़ा गया और फिर दो बटन जोड़े। फिर इस कोड:

private void button1_Click(object sender, EventArgs e) 
    { 
     webBrowser1.ShowSaveAsDialog(); 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     webBrowser1.Url = new Uri("localfile.mht"); 
    } 

आप इस कोड लेने के लिए और फ़ाइलों की एक सूची में जोड़ सकते हैं और एक foreach साथ हर एक कार्रवाई करने के लिए सक्षम होना चाहिए। webBrowser में ShowSaveAsDialog() नामक एक विधि शामिल है; और यह किसी को .mht या केवल HTML या पूर्ण पृष्ठ के रूप में सहेजने की अनुमति देगा।

संपादित करें: आप वेब ब्राउजर दस्तावेज़ का उपयोग कर सकते हैं और इस बिंदु पर जानकारी को स्क्रैप कर सकते हैं। एक RichTextBox और प्रति यहाँ एमएस के रूप में एक सार्वजनिक चर जोड़ कर: http://msdn.microsoft.com/en-us/library/ms171713.aspx

public string Code 
    { 
     get 
     { 
      if (richTextBox1.Text != null) 
      { 
       return (richTextBox1.Text); 
      } 
      else 
      { 
       return (""); 
      } 
     } 
     set 
     { 
      richTextBox1.Text = value; 
     } 
    } 


    private void button2_Click(object sender, EventArgs e) 
    { 
     webBrowser1.Url = new Uri("localfile.mht"); 
     HtmlElement elem; 

     if (webBrowser1.Document != null) 
     { 

      HtmlElementCollection elems = webBrowser1.Document.GetElementsByTagName("HTML"); 
      if (elems.Count == 1) 
      { 
       elem = elems[0]; 
       Code = elem.OuterHtml; 
       foreach (HtmlElement elem1 in elems) 
       { 
        //look for pictures to save 
       } 

      } 
     } 
    } 
+0

पर आपके छोटे समाधानों के बारे में एक छोटा LINQ कथन और यह http://stackoverflow.com/questions/872750/saving-a- वेब पेज-से-यानी-उपयोग-शक्तियां ऐसा लगता है कि सहेजने वाले संवाद के बिना यह संभव नहीं लगता है। मैं इस enmasse – klumsy

+0

को स्वचालित करने में सक्षम होने की उम्मीद कर रहा था संपादन के साथ आप एचटीएमएल और छवियों को स्क्रैप और सहेजने की प्रक्रिया के साथ आ सकते हैं। – CaptainBli

0

तो स्वचालित आईई कठिन और अंत करने के लिए नहीं प्रयोग करने योग्य अंत था, तो मैं है कि यह जाने का रास्ता हो जाएगा कोड किसी प्रकार का निर्माण लगता है । GitHub पर मैं इस अजगर एक जो अच्छा

https://github.com/Modified/MHTifier http://decodecode.net/elitist/2013/01/mhtifier/

हो सकता है अगर मैं समय मैं PowerShell में इसी तरह कुछ करने के लिए कोशिश करता हूँ मिल गया।

http://sourceforge.net/projects/mht2htm/:

1

IE और एमएस वर्ड के अलावा, वहाँ इस खुले स्रोत पार मंच कार्यक्रम SourceForge.net पर अधिक 'mht2html' कहा जाता है।

मैंने अभी तक इसका परीक्षण नहीं किया है, लेकिन ऐसा लगता है कि अच्छी समीक्षा मिली है।

पी।एस। ऐसे पुराने प्रश्न का उत्तर देने के लिए क्षमा करें।

0

एमएचटी फ़ाइल अनिवार्य रूप से एमआईएमई है। तो, चिलकट का उपयोग करना संभव है। माइम या पूरी तरह से मुक्त System.Net.Mime घटक इसकी आंतरिक संरचना तक पहुंचने के लिए। यदि, उदाहरण के लिए, एमएचटी में छवियां होती हैं, तो उन्हें आउटपुट एचटीएमएल में बेस 64 स्ट्रिंग्स के साथ प्रतिस्थापित किया जा सकता है।

Imports HtmlAgilityPack 
Imports Fizzler.Systems.HtmlAgilityPack 
Imports Chilkat 
Public Function ConvertMhtToHtml(ByVal mhtFile As String) As String 
    Dim chilkatWholeMime As New Chilkat.Mime 
    'Load mime' 
    chilkatWholeMime.LoadMimeFile(mhtFile) 
    'Get html string, which is 1-st part of mime' 
    Dim html As String = chilkatWholeMime.GetPart(0).GetBodyDecoded 
    'Create collection for storing url of images and theirs base64 representations' 
    Dim allImages As New Specialized.NameValueCollection 
    'Iterate through mime parts' 
    For i = 1 To chilkatWholeMime.NumParts - 1 
     Dim m As Chilkat.Mime = chilkatWholeMime.GetPart(i) 
     'See if it is image' 
     If m.IsImage AndAlso m.Encoding = "base64" Then 
      allImages.Add(m.GetHeaderField("Content-Location"), "data:" + m.ContentType + ";base64," + m.GetBodyEncoded) 
     End If : m.Dispose() 
    Next : chilkatWholeMime.Dispose() 
    'Now it is time to replace the source attribute of all images in HTML with dataURI' 
    Dim htmlDoc As New HtmlDocument : htmlDoc.LoadHtml(html) : Dim docNode As HtmlNode = htmlDoc.DocumentNode 
    For i = 0 To allImages.Count - 1 
     'Select all images, whose src attribute is equal to saved URL' 
     Dim keyURL As String = allImages.GetKey(i) 'Saved url from MHT' 
     Dim elementsWithPics() As HtmlNode = docNode.QuerySelectorAll("img[src='" + keyURL + "']").ToArray 
     Dim imgsrc As String = allImages.GetValues(i)(0) 'dataURI as base64 string' 
     For j = 0 To elementsWithPics.Length - 1 
      elementsWithPics(j).SetAttributeValue("src", imgsrc) 
     Next 
     'Select all elements, whose style attribute contains saved URL' 
     elementsWithPics = docNode.QuerySelectorAll("[style~='" + keyURL + "']").ToArray 
     For j = 0 To elementsWithPics.Length - 1 
      'Get and modify style' 
      Dim modStyle As String = Strings.Replace(elementsWithPics(j).GetAttributeValue("style", String.Empty), keyURL, imgsrc, 1, 1, 1) 
      elementsWithPics(j).SetAttributeValue("style", modStyle) 
     Next : Erase elementsWithPics 
    Next 
    'Get final html' 
    Dim tw As New StringWriter() 
    htmlDoc.Save(tw) : html = tw.ToString : tw.Close() : tw.Dispose() 
    Return html 
End Function 
+0

यह प्रोग्रामिंग भाषा क्या है? –

+1

यह वीबी.Net है। यह ओपन सोर्स पैकेज "फिजलर। सिस्टम। एचटीएमएलएगिलिटीपैक" और वाणिज्यिक पैकेज "चिलकट.मेम" का उपयोग करता है। लेकिन चिलकट को "System.Net.Mime" वर्ग द्वारा प्रतिस्थापित किया जा सकता है। – Zagavarr

-1

फ़ायरफ़ॉक्स उपकरण एम्बेडेड गया है। मेनू पर जाएं (छिपा हुआ Alt दबाएं) File->Convert saved pages

-1

चरण 1: ब्राउज़र में .MHT/.MHTML फ़ाइल खोलें।

चरण 2: स्रोत कोड देखने के लिए चयन करने के लिए राइट क्लिक करें।

चरण 3: स्रोत कोड कॉपी करें और इसे एक नई पर चिपकाएं .XT फ़ाइल, फिर फ़ाइल एक्सटेंशन को HTML में बदलें।

संबंधित मुद्दे