При сохранении файла из Microsoft Visio в формате веб-страницы (векторный рисунок в формате VML) создаваемая страница выглядит так:
Потребовалось выделять фрагмент рисунка в правом фрейме и распечатывать его на принтере. Эта возможность изначально не реализована, распечатывается весь рисунок целиком. Я добавил такую возможность. Опишу по шагам. Все изменения проводятся в папке <Имя_файла>.files.1. В файле widgets.htm между строками
<script src="find.js" type="text/jscript" language="jscript"></script>
и<script type="text/jscript" language="jscript">
вставляю строку<script src="vml_print.js" type="text/jscript" language="jscript"></script>
2. В том же файле между строками <td><p class="p1"><a href="javascript:ToggleNav();" title="Свернуть область переходов" class="a1">Скрыть</a></p></td>
и<td align="right"><p class="p1"><a href="javascript:widgets.ToggleAll()" id="textExp" class="a1">Свернуть все</a></p></td>
вставляю строку<td><p class="p1"><a href="javascript:print_fragment();" title="Печать" id="PrintVML" class="a1">Печать</a></p></td>
Теперь в заголовке левой панели между элементами "Скрыть" и "Свернуть все" добавлена ссылка "Печать", при нажатии на которую будет выполняться функция print_fragment().3. Создаю в той же папке файл vml_print.htm, содержащий заготовку окна с фрагментом VML. Содержимое этого файла:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<style type="text/css">
v\:* { behavior: url(#default#VML); }
</style>
</head>
<body>
<h1 id="title1" align="center">Название схемы</h1>
<center>
<v:rect id="container" strokecolor="gray" strokeweight="1pt"
style="position:relative; height:500px; width:800px">
<v:imagedata id="content" croptop="0" cropbottom="0" cropleft="0" cropright="0"
src="vml_1.emz" />
</v:rect>
</center>
</body>
</html>
Важно, чтобы кодировка этого файла была в ANSI. Если будет UNICODE, то VML не отобразится в окне.4. И, наконец, создаю в той же папке файл vml_print.js, содержащий функцию print_fragment(), которая изменяет заголовок и размеры окна, обрезает изображение по краям и вызывает печать окна.
function print_fragment() {
var image = parent.frmDrawing.document.all['ConvertedImage'];
var pixelWidth = image.style.pixelWidth;
var pixelHeight = image.style.pixelHeight;
var winWidth = parent.frmDrawing.document.body.clientWidth;
var winHeight = parent.frmDrawing.document.body.clientHeight;
var winScrollLeft = parent.frmDrawing.document.body.scrollLeft;
var winScrollTop = parent.frmDrawing.document.body.scrollTop;
var newWidth = winWidth / pixelWidth;
var newHeight = winHeight / pixelHeight;
var newXOffset = winScrollLeft / pixelWidth;
var newYOffset = winScrollTop / pixelHeight;
var win = window.open('vml_print.htm','vml_prin','width='+winWidth+',height='+winHeight+',scrollbars=yes');
win.document.all["title1"].innerText = parent.document.title;
win.document.all["container"].style.height = winHeight+"px";
win.document.all["container"].style.width = winWidth+"px";
win.document.all["content"].setAttribute("croptop", newYOffset);
win.document.all["content"].setAttribute("cropbottom", 1-newHeight-newYOffset);
win.document.all["content"].setAttribute("cropleft", newXOffset);
win.document.all["content"].setAttribute("cropright", 1-newWidth-newXOffset);
win.print();
win.close();
}
Всё. Задача решена. Спасибо за внимание.