Страница 1 из 2

Вопрос по HTML

СообщениеДобавлено: 10.04.2006 (Пн) 22:00
alibek
Вот что хотелось бы узнать :)
Есть некоторая система документооборота. В ней есть возможность печатать документы. Печатью занимается браузер (IE); система формирует HTML для него на основе XSLT-преобразования.

Возможно ли встроить в HTML изображение? В документе должно быть две картинки, небольшой логотип и фотография, причем нельзя использовать внешние файлы.
Возможно ли как-то исхитрится и указать изображение непосредственно в коде HTML? Или единственное, что мне поможет, это использовать RTF?

СообщениеДобавлено: 10.04.2006 (Пн) 22:03
Amed
Ага, DV. :)

У меня очень стойкое ощущение, что где-то я видел забитую в html картинку. Сейчас буду вспоминать.

СообщениеДобавлено: 10.04.2006 (Пн) 22:14
Amed
Возможно, я видел картинку, забитую через js. :?

СообщениеДобавлено: 10.04.2006 (Пн) 22:45
alibek
Нет, скрипты исключены. Однопиксельные таблицы тоже :)
В принципе, есть оказывается что-то подобное: <img src="data:image/gif;base64,R0lGODdhMAAw... (RFC2397), но IE не поддерживает data scheme.

СообщениеДобавлено: 11.04.2006 (Вт) 0:16
Ennor
А если data island организовать - не поможет?
Вообще же, .mhtml - то, что нужно в данном случае, это типа CHM - компиляция в один файл. Но его ты из XSLT, конечно, не вытянешь...
Да, не вижу никаких проблем с использованием клиентских скриптов - разве что затянутая до упора скриптовая секурность в настройках конкретного компьютера.

Кстати, ты по привычке ошибся разделом, как мне кажется ;).

СообщениеДобавлено: 11.04.2006 (Вт) 6:22
tyomitch
А я вон чё нашёл: http://www.bennherrera.com/EmbeddedImage/

СообщениеДобавлено: 11.04.2006 (Вт) 6:50
GSerg
Енто скрипты.

СообщениеДобавлено: 11.04.2006 (Вт) 6:51
tyomitch
И не только. Ещё и пиксельные таблицы ;-)

Зато совместимо со всем подряд.

Там ещё есть вариант с анимацией в пиксельной таблице: http://www.bennherrera.com/EmbeddedImag ... ation.html

СообщениеДобавлено: 11.04.2006 (Вт) 11:05
alibek
Вообщем, все печально.
Ладно, тогда что лучше, RTF-шаблон, в который будут подставляться значения? Или лучше документ генерировать в Word?

СообщениеДобавлено: 11.04.2006 (Вт) 11:36
tyomitch
Если у клиентов IE, то проще всего MHT.

СообщениеДобавлено: 11.04.2006 (Вт) 11:48
alibek
Если ты мне объяснишь, какой должен быть XSL, чтобы на выходе получить MHT/CHM, то запросто :)

СообщениеДобавлено: 11.04.2006 (Вт) 12:00
Andrey Fedorov
alibek писал(а):Если ты мне объяснишь, какой должен быть XSL, чтобы на выходе получить MHT/CHM, то запросто :)


Делаешь обычный HTML (где рисунок-файл). Потом сохраняешь его в MHT/CHM и удаляешь все исходники.

СообщениеДобавлено: 11.04.2006 (Вт) 12:14
RayShade
Andrey Fedorov

Ты хоть понял, что сказал? И к чему ты это сказал?

СообщениеДобавлено: 11.04.2006 (Вт) 12:27
Andrey Fedorov
RayShade писал(а):Andrey Fedorov
Ты хоть понял, что сказал? И к чему ты это сказал?


Я - понял. А ты, видимо, нет.
Я исходники HTML имел ввиду.
В результате юзер видит один MHT/CHM-файл и распечатывает его. Правда развернуть их назад в HTML никакой проблемы нет...

СообщениеДобавлено: 11.04.2006 (Вт) 12:32
alibek
Юзер не видит MHT файл.
Юзер выбирает документ, нажимает кнопку на панели инструментов, система извлекает из БД данные, соответствующие этому документу (XML), применяет их к XSL, результат выводит в окошко Preview на основе браузера (причем я даже точно не знаю, выводит через файл или напрямую в объектную модель заливает).
Все, на что я могу повлиять -- редактировать XSL.
В некоторых случаях я могу знать, когда юзер нажимает кнопку "Печать" и, соответственно, извлечь картинки в заранее известное место (C:\TEMP\photo.jpg), но в общем случае я этого не знаю и рассчитывать на это не могу. Поэтому мне нужен автономный HTML-файл с изображениями.
Если это невозможно, я лучше буду экспорт в RTF делать, чем в MHT.

СообщениеДобавлено: 11.04.2006 (Вт) 12:33
alibek
И вообще, я форумом промахнулся :)

СообщениеДобавлено: 11.04.2006 (Вт) 12:39
RayShade
Andrey Fedorov

Так что по всему выходит, что все таки, ты мимо кассы сказанул :)

СообщениеДобавлено: 11.04.2006 (Вт) 12:42
Andrey Fedorov
RayShade писал(а):Andrey Fedorov
Так что по всему выходит, что все таки, ты мимо кассы сказанул :)


Ну кто-ж знает всю постановку конкретной задачи окромя автора ;)
Мы в любом случае можем дать лишь версии.

У меня подобных ситуаций нет - CHM-ки на автомате создаются без проблем, картинки в письмах и моих отчетах тоже.

СообщениеДобавлено: 11.04.2006 (Вт) 12:44
RayShade
Andrey Fedorov

Счастливый ты человек :)

СообщениеДобавлено: 11.04.2006 (Вт) 13:28
Andrey Fedorov
RayShade писал(а):Andrey Fedorov
Счастливый ты человек :)


Разве что в том что отчетов как у alibek-а у меня нет.
А у него, как я понял какая-то сторонняя программа их создает.
Тут сложнее.

СообщениеДобавлено: 11.04.2006 (Вт) 13:32
alibek
Да.
Есть система электронного документооборота.
В ней есть разные типы документов. Для каждого документа есть XML-описание, в котором указываются атрибуты документа, список, назначение и типы полей, шаблоны XSL-преобразований и т.п.
Когда юзер нажимает кнопку "Печать", из БД извлекаются данные (в XML), применяются к XSL (который также берется из БД), результат выводится в окно Preview на основе IE и юзер может распечатать показанный ему документ.
Все, что я могу сделать -- это создать произвольный XSL, который будет загружен в БД. На то, как выполняется XSLT и куда выводится, я повлиять не могу.

СообщениеДобавлено: 11.04.2006 (Вт) 13:47
Ennor
Признаться, не вижу ничего крамольного в том, чтобы включить в код ссылки на внешние ресурсы. Если это будет папка на корпоративном сервере (том же, где и сама БД, например), то указание UNC-имени будет вполне корректно работать. Могут быть проблемы, если человек на работу через VPN зацепился, но в любом случае путь вида "\\192.168.0.100\ReportPics\Logo.gif" разрулится без проблем.

В худшем случае, вынос картинок на внешний сервер и указание полного URL гарантированно решает проблему.

Учитывая, что XSL-код тебе полностью подконтролен, это можно сделать абсолютно прозрачно для системы.

СообщениеДобавлено: 11.04.2006 (Вт) 14:18
alibek
Это не будет папка на сервере.
Это будет файл в БД, причем я не знаю, где и в каком виде, т.к. доступ к этому файлу я получаю через COM-интерфейсы, предоставляемые системой. Я могу выгрузить этот файл куда-нибудь на диск, в произвольную папку, да. Но не всегда.

СообщениеДобавлено: 11.04.2006 (Вт) 14:29
Ennor
Т.е. система по отношению к тебе является враждебной. Так бы сразу и сказал.

Не знаю, можно ли вытащить картинку из embedded XML, но у меня на большее фантазии не хватает, признаться...

СообщениеДобавлено: 11.04.2006 (Вт) 14:35
alibek
Система предоставляет только то, что считает необходимым.
Т.е. все данные мне передаются в объектной модели (коллекции), в эту же коллекцию я сохраняю новые значения и вызываю метод Update.
Где эти данные лежат реально и как они организованы (а организованы они страшно, я БД смотрел) я знать не знаю.

СообщениеДобавлено: 11.04.2006 (Вт) 14:45
Antonariy
А есть возможность организовать на том же или другом сервере IIS? Если да, то можно в качестве src рисунка использовать какой-нибудь запрос типа //server/getpicture.asp?id=99999. Если нет, то можно и на локальном компе, но это уже изврат :D

СообщениеДобавлено: 11.04.2006 (Вт) 14:52
alibek
А кто будет писать этот getpicture.asp? И как в нем заполучить доступ к файлу изображения?
Можно, конечно, методом научного тыка найти. Пока новая версия системы не будет выпущена и не придется переделывать все.
Нет, нужно исходить из того, что никаких уловок вроде хитрой ссылки применять нельзя. Нужно просто встроить изображение в HTML. Если есть способ, как из XSL сформировать MHT, то это тоже подойдет.

СообщениеДобавлено: 11.04.2006 (Вт) 15:11
Antonariy
А кто будет писать этот getpicture.asp?
Допустим ты.
И как в нем заполучить доступ к файлу изображения?
доступ к этому файлу я получаю через COM-интерфейсы, предоставляемые системой
Примерно так:
Код: Выделить всё
<%
set obj = Server.CreateObject("ObjectModel.PictureClass")
'допустим GetPicture возвращает байтовый массив
r=obj.GetPicture(Request.QueryString("id"))
Response.ContentType = "image/gif"
Response.BinaryWrite r
%>

Скрипты нельзя, ссылки нельзя, mht невозможно... Остается Word. Или убить себя :) А лучше заказчика :)

СообщениеДобавлено: 11.04.2006 (Вт) 15:27
alibek
Заказчика убить нельзя, он деньги дает :)
Тот код, что ты мне показал, тоже не подойдет.
Непосредственного доступа к картинке у меня вообще нет.
Картинку мне возвращает система в объектах (коллекции полей), когда я открываю свой документ (ActiveX Control, расширяющий функциональность системы).
Но при печати мне управление не передается, печатью занимается исключительно система, извлекая данные из БД и применяя к ним XSL, я не могу знать, ни когда эта печать начинается, ни что печатается.

СообщениеДобавлено: 11.04.2006 (Вт) 15:30
alibek
Antonariy писал(а):set obj = Server.CreateObject("ObjectModel.PictureClass")

Если было бы так просто :)
Во-первых, нужно имплементить минимум два интерфейса и правильно инициализировать документ. При инициализации мне передается сессия, которую нужно запомнить в переменную и в дальнейшем все общение с системой ведется через эту сессию.
И даже после этого, чтобы добраться до картинки, нужно довольно много кода, т.к. мне передается только идентификатор на файл в файловой библиотеке. Надо открыть эту библиотеку, найти нужную запись и извлечь файл.