PDA

Показать полную графическую версию : [решено] Преобразовать *.html в *.mht


Страниц : [1] 2

gora
21-11-2009, 16:55
Имеется файл Help.html и папка misc к нему, нужно преобразовать их в файл Help.mht. Можно ли это сделать из бат файла? Доп. утилиты допустимы.

Iska
22-11-2009, 04:19
gora, категория «CMD/BAT», но на всякий случай осведомлюсь: нечто подобное на WSH (Серый форум / JScript: Пример сохранения web-страницы в TXT, HTML и MHT (веб-архив) (http://forum.script-coding.com/viewtopic.php?pid=6245#p6245)) или скомпилированный AutoIt ([решено] Сохранение загруженной html-страницы (http://forum.oszone.net/post-1124597-5.html)) [код, в принципе, тот же, и требование на наличие установленного CDO, либо из комплекта MS Office, либо отдельным компонентом, тоже остаётся] не подойдёт в Вашем случае?

amel27
22-11-2009, 12:07
есть вариант на AutoIT (http://www.autoitscript.com/forum/index.php?showtopic=77894) c использованием ADO, если перевести на VBS:

FileIn = Wscript.arguments.Item(0)
FileOut = Wscript.arguments.Item(1)

INetGetMHT FileIn, FileOut

Sub INetGetMHT (strURL, strFile)
Dim objMsg, objAdo

Set objMsg = CreateObject("CDO.Message")
Set objAdo = CreateObject("ADODB.Stream")

objAdo.Type = 2
objAdo.CharSet = "US-ASCII"
objAdo.Open

objMsg.CreateMHTMLBody strURL, 0
objMsg.DataSource.SaveToObject objAdo, "_Stream"

objAdo.SaveToFile strFile, 1
End Sub

CScript //NoLogo HTM2MHT.VBS C:\TEST\Test.htm C:\TEST\Test.mht

З.Ы. на sourceforge есть отличная утилита HTML to MHT converter (http://sourceforge.net/projects/html2mht/), но к сожалению, она не поддерживает командную строку... в принципе, несложно переделать исходник - достаточно переписать MAIN(), но увы - возможностей VC Express Edition для этого не хватает - требуется поддержка ATL, которая доступна только в Standard Edition... :(

Admiral
22-11-2009, 19:18
есть отличная утилита HTML to MHT converter, »
Кстати в коде есть ошибка
string locationFromPath(const char *file)
{
char *f=strdup(file);
char *p=f;
for(char *p=f; p<strlen(f)+f; p++)
for(p=f; p<strlen(f)+f; p++)
//...
}
возможностей VC Express Edition для этого не хватает »
А так запускается и в VC9EE.
P.S.
Если чего-то при переделки не будет хватать, можно ведь воспользоваться второй бетой профессиональной редакции VC2010 (http://forum.oszone.net/thread-153855.html).

amel27
23-11-2009, 09:14
А так запускается и в VC9EE »
странно, а у меня ругается на отсутствие "<atlenc.h>" (из stdafx.h), а при удалении сыпятся ошибки... :o
можно ведь воспользоваться второй бетой профессиональной редакции VC2010. »если только для себя, выкладывать скомпилированные EXE, наверное, уже будет нарушением

Admiral
23-11-2009, 23:16
amel27, виноват, нажал отрыть файл atlenc.h он мне открыл его из Microsoft Visual Studio 10.0\VC\atlmfc\include
Забыл что переменная include общее на компе. VC2010 Pro Beta2 наверное лучше снести, дабы не вводить людей в заблуждение.

Видимо да.
Кстати есть ATL Server Library and Tools (http://atlserver.codeplex.com/), да вот atlenc.h там не значится, он остаётся за MS.

AlexLev
02-04-2013, 16:33
Здравствуйте!
Я вот пробовал разные конвертеры из HTM в MHT, и все они не сохраняют картинки. Реально получается конвертировать только браузером Опера сохраняя файл в другом формате.
А не подскажет ли кто реально работающий конвертер, который бы при конвертации сохранял и картинки?
Спасибо.

Iska
02-04-2013, 17:26
AlexLev, скриптами — второй и третий посты этой темы.

Solder
02-04-2013, 20:33
AlexLev, а я вот никак не могу отучить ту же Оперу настойчиво предлагать сохранение в этот дурацкий (имхо, есс-но) формат! Ведь его размер БОЛЬШЕ суммарного размера всех сохраняемых файлов. Посему я сохраняю файл с картинками, вырубаю из HTМ ненужные счетчики, скрипты, рекламу и прочую гадость, привожу файл в читабельный вид и сохраняю (htm2chm рулит!) в компактном CHM или ITS формате. Даже .swf, если их правильно описать ;), htm2chm v.3.x сохраняет правильно.

AlexLev
03-04-2013, 10:09
Solder, благодарю за отклик! Если Вы сможете в тексте обойтись без плохих слов, то и Ваша голова будет чище, а это положительным образом скажется на Вашем здоровье и тех, кто читает Вами написанное...
Сейчас компьютеры стали уже мощнее и размер файлов не столь принципиален, зачастую важнее сколько времени потрачено на обработку. Я всегда сохраняю в MHT, мне это удобно.
Иной раз, как мне сейчас, требуется конвертация чужих файлов. Я попробовал VBS-скрипт, но он у меня не заработал, наверно надо ставить ADO?

AlexLev
03-04-2013, 11:10
Дальнейшие эксперименты с VBS-скриптом показали, что он может конвертировать интернет страницу, но не готовый файл...

Iska
03-04-2013, 15:57
Я попробовал VBS-скрипт, но он у меня не заработал, наверно надо ставить ADO? »
Есть подозрение, что у Вас нет CDO: Download Collaboration Data Objects, version 1.2.1 from Official Microsoft Download Center (http://www.microsoft.com/en-us/download/details.aspx?id=3671).

Дальнейшие эксперименты с VBS-скриптом показали, что он может конвертировать интернет страницу, но не готовый файл... »
Это как?

Поправил ссылку в сообщении (http://forum.oszone.net/post-1276964.html#post1276964), дабы она указывала на новый, правильный, домен.

AlexLev
04-04-2013, 09:05
Iska, я попробовал установить Download Collaboration Data Objects; но при попытке установки вывелась ошибка "Collaboration Data Objects 1.2.1 cannot be installed unless Microsoft Office Outlook 2007 is also installed.".
Надо сказать, что на компьютере стоит Windows XP и Microsoft Office 2003.

По поводу экспериментов, - модифицированный код скрипта (фрагмент, выделение типа PHP для наглядности):
objMsg.CreateMHTMLBody "http://www.yandex.ru", 0
objMsg.DataSource.SaveToObject objAdo, "_Stream"
objAdo.SaveToFile "2222.mht", 1
// работает


objMsg.CreateMHTMLBody "1111.html", 0
objMsg.DataSource.SaveToObject objAdo, "_Stream"
objAdo.SaveToFile "2222.mht", 1
// НЕ работает

Iska
04-04-2013, 17:13
Надо сказать, что на компьютере стоит … Microsoft Office 2003. »
Тогда библиотека CDO у Вас есть.

AlexLev, упакуйте в архив и выкладывайте «1111.html» сюда.

AlexLev
04-04-2013, 23:08
Вот сделал, только с другого компьютера: Windows 7, Microsoft Office 2003.

Ошибка: Указанный протокол неизвестен.
Код: 800C000D
Источник: CDO.Message!
ругается на строку objMsg.CreateMHTMLBody "1111.html", 0

Ссылка на файл вложения:
http://yadi.sk/d/JGTqFtay3nlW0

По ходу вопрос: Почему-то этот файл не удалось подключить через систему сайта, ошибка "Превышает выделенный вам объем вложений на 964.3 Kb.". Хотя для ZIP указан лимит 8 МБ...

Iska
05-04-2013, 03:42
AlexLev, никаких проблем:
Option Explicit

Const cdoSuppressNone = 0 ' загружать все
Const cdoSuppressImages = 1 ' не загружать картинки
Const cdoSuppressBGSounds = 2 ' не загружать фоновые звуки
Const cdoSuppressFrames = 4 ' не загружать фреймы
Const cdoSuppressObjects = 8 ' не загружать объекты
Const cdoSuppressStyleSheets = 16 ' не загружать таблицы стилей
Const cdoSuppressAll = 31 ' не загружать ничего из вышеперечисленного


With WScript.CreateObject("CDO.Message")
.AutoGenerateTextBody = True
.CreateMHTMLBody "file://E:\Песочница\0239\Вложение\1111.html", cdoSuppressNone
.BodyPart.GetStream().SaveToFile "E:\Песочница\0239\Вложение\1111.mht", 2
End With

WScript.Quit 0


Файл был создан:
╔══════════════ E:\Песочница\0239\Вложение ════════╤═════╗
║и Имя │Размер│ Дата │Время║
║⌂.. │ Вверх│05.04.13│03:40║
║├1111_files │ Папка│04.04.13│22:24║
║ 1111 html│150346│04.04.13│22:20║
║ 1111 mht│3962 К│05.04.13│03:40║
║ │ │ │ ║

AlexLev
05-04-2013, 08:17
Iska, благодарю!
Сама логика скрипта мне очень нравится, возможности его настройки.
Но вот почему-то на моём компьютере оно не работает как хотелось бы (в данном случае я опять на Windows XP).
Результат загружается очень быстро, но без картинок! Размер файла разнится с Вашим.

Попутно может кто ответит на вопрос, почему Zip-файл не могу на сайт положить?...

Вложение 2 (http://yadi.sk/d/dX9RUve33o1Wf)

Iska
05-04-2013, 18:08
Результат загружается очень быстро, но без картинок! »
У меня аналогично: из {background:url(…)} изображения не сохраняются.

AlexLev
05-04-2013, 21:26
Iska, я напомню, что 2-го числа на мой вопрос "... пробовал разные конвертеры из HTM в MHT, и все они не сохраняют картинки...", Вы ответили, что "... скриптами — второй и третий посты этой темы.".
Так что теперь получается, скрипты тоже не могут выполнить эту функцию?

Iska
05-04-2013, 21:37
AlexLev, эта ошибка (несохранение изображения, указанного в стиле в качестве подложки) содержится в самой функции сохранения в *.mht средствами IE/CDO. Не думаю, что опробованные Вами конвертеры реализуют какую-то свою функцию сохранения. Потому такой вот результат.

Вам просто следовало переместить акцент, вместо:
и все они не сохраняют картинки... »
сказать «они сохраняют не все изображения», тогда бы не возникло недопонимания.




© OSzone.net 2001-2012