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