Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Преобразовать *.html в *.mht (http://forum.oszone.net/showthread.php?t=157830)

gora 21-11-2009 16:55 1276536

Преобразовать *.html в *.mht
 
Имеется файл Help.html и папка misc к нему, нужно преобразовать их в файл Help.mht. Можно ли это сделать из бат файла? Доп. утилиты допустимы.

Iska 22-11-2009 04:19 1276964

gora, категория «CMD/BAT», но на всякий случай осведомлюсь: нечто подобное на WSH (Серый форум / JScript: Пример сохранения web-страницы в TXT, HTML и MHT (веб-архив)) или скомпилированный AutoIt ([решено] Сохранение загруженной html-страницы) [код, в принципе, тот же, и требование на наличие установленного CDO, либо из комплекта MS Office, либо отдельным компонентом, тоже остаётся] не подойдёт в Вашем случае?

amel27 22-11-2009 12:07 1277061

есть вариант на AutoIT 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, но к сожалению, она не поддерживает командную строку... в принципе, несложно переделать исходник - достаточно переписать MAIN(), но увы - возможностей VC Express Edition для этого не хватает - требуется поддержка ATL, которая доступна только в Standard Edition... :(

Admiral 22-11-2009 19:18 1277400

Цитата:

Цитата amel27
есть отличная утилита 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++)
//...
}

Цитата:

Цитата amel27
возможностей VC Express Edition для этого не хватает »

А так запускается и в VC9EE.
P.S.
Если чего-то при переделки не будет хватать, можно ведь воспользоваться второй бетой профессиональной редакции VC2010.

amel27 23-11-2009 09:14 1277763

Цитата:

Цитата Admiral
А так запускается и в VC9EE »

странно, а у меня ругается на отсутствие "<atlenc.h>" (из stdafx.h), а при удалении сыпятся ошибки... :o
Цитата:

Цитата Admiral
можно ведь воспользоваться второй бетой профессиональной редакции VC2010. »

если только для себя, выкладывать скомпилированные EXE, наверное, уже будет нарушением

Admiral 23-11-2009 23:16 1278478

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

Видимо да.
Кстати есть ATL Server Library and Tools, да вот atlenc.h там не значится, он остаётся за MS.

AlexLev 02-04-2013 16:33 2124357

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

Iska 02-04-2013 17:26 2124389

AlexLev, скриптами — второй и третий посты этой темы.

Solder 02-04-2013 20:33 2124499

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

AlexLev 03-04-2013 10:09 2124800

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

AlexLev 03-04-2013 11:10 2124826

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

Iska 03-04-2013 15:57 2125022

Цитата:

Цитата AlexLev
Я попробовал VBS-скрипт, но он у меня не заработал, наверно надо ставить ADO? »

Есть подозрение, что у Вас нет CDO: Download Collaboration Data Objects, version 1.2.1 from Official Microsoft Download Center.

Цитата:

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

Это как?

Поправил ссылку в сообщении, дабы она указывала на новый, правильный, домен.

AlexLev 04-04-2013 09:05 2125467

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 для наглядности):
PHP код:

objMsg.CreateMHTMLBody "http://www.yandex.ru"
objMsg
.DataSource.SaveToObject objAdo"_Stream"
objAdo.SaveToFile "2222.mht"

// работает


PHP код:

objMsg.CreateMHTMLBody "1111.html"
objMsg
.DataSource.SaveToObject objAdo"_Stream"
objAdo.SaveToFile "2222.mht"

// НЕ работает

Iska 04-04-2013 17:13 2125705

Цитата:

Цитата AlexLev
Надо сказать, что на компьютере стоит … Microsoft Office 2003. »

Тогда библиотека CDO у Вас есть.

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

AlexLev 04-04-2013 23:08 2125933

Вот сделал, только с другого компьютера: 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 2126019

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 2126058

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

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

Вложение 2

Iska 05-04-2013 18:08 2126398

Цитата:

Цитата AlexLev
Результат загружается очень быстро, но без картинок! »

У меня аналогично: из {background:url(…)} изображения не сохраняются.

AlexLev 05-04-2013 21:26 2126535

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

Iska 05-04-2013 21:37 2126542

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

Вам просто следовало переместить акцент, вместо:
Цитата:

Цитата AlexLev
и все они не сохраняют картинки... »

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

AlexLev 05-04-2013 23:47 2126599

Iska, благодарю за разъяснение и проделанную работу!
Честно говоря, я просто не замечал, не обращал внимания, что «они сохраняют не все изображения»...

Stanner 06-04-2013 00:39 2126624

Скрипты - скриптами, но ничего не мешает открыть html в браузере с установленным дополнением UnMHT и сохранить - у меня картинки сохраняются. Собственно, для сохранения страниц с наполнением я и пользуюсь (уже очень давно) данным дополнением.

Iska 06-04-2013 03:01 2126653

Stanner, дело за малым — сделать возможность автоматизации сего извне.

AlexLev 09-04-2013 20:36 2129230

Solder, я заценил рекомендованную Вами htm2chm. Дельная вещь, позволяет сохранять даже сложные интернет страницы!

Iska 10-04-2013 03:45 2129424

Тогда Вам понравится и: SaveChm - Поиск в Google.

AlexLev 11-04-2013 10:00 2130228

Плавно отходим от главной темы...
Iska, я попробовал в работе SaveChm 1.2.
На Windows 7 и Internet Explorer 10 - он вообще не работает,
на Windows XP и Internet Explorer 8 - пытается сохранить в неподходящей кодировке и без картинок...
На форумах нашёл рекомендацию "... дело в IE8, его нужно просто "заземлить через окно"...", - но я не понял, что человек имел под этим ввиду...

А по основной теме - я бы не поставил признак "Решено"...

Iska 11-04-2013 10:53 2130267

Цитата:

Цитата AlexLev
А по основной теме - я бы не поставил признак "Решено"... »

AlexLev, автора темы решение устраивало. Меня тоже.


Время: 03:41.

Время: 03:41.
© OSzone.net 2001-