При разработке интерфейсов на платформе 1С:Предприятие часто возникает задача вывода графических данных непосредственно в форму. Если с форматами JPG, PNG или GIF проблем обычно не возникает, то формат TIFF вызывает затруднения. Разберемся, почему это происходит и как решить данную задачу программными средствами.
Основная причина кроется в движке, который использует Поле HTML документа. В операционной системе Windows этот элемент управления опирается на компоненты Internet Explorer или, в более современных реализациях, на Edge/WebView2. Эти браузерные движки ориентированы на веб-стандарты, к которым формат TIFF не относится. По умолчанию браузеры не имеют встроенных средств для рендеринга TIFF-файлов.
Так как браузер не понимает формат напрямую, нам необходимо использовать промежуточный слой — клиентские библиотеки на языке JavaScript. Одной из наиболее эффективных является библиотека tiff.js. Суть работы заключается в том, что JavaScript считывает бинарные данные файла, конвертирует их во внутреннее представление, а затем отрисовывает на элементе canvas, который уже понятен браузеру.
Рассмотрим, как правильно внедрить этот механизм в вашу конфигурацию. Для того чтобы избежать проблем с безопасностью и доступом к файловой системе, мы встроим код библиотеки непосредственно в макет.
tiff.min.js.Приведем пример структуры HTML-кода, который необходимо передать в Поле HTML документа:
<html>
<meta charset="utf8"/>
<head>
<script>
/* Здесь располагается содержимое вашего макета tiff.min.js */
</script>
</head>
<body>
<input type="file" id="fileInput" />
<img id="image" />
<script type="text/javascript">
(function(){
var processTiff = function(buffer) {
var tiff = new Tiff({buffer: buffer});
var canvas = tiff.toCanvas();
var img = document.getElementById('image');
img.src = canvas.toDataURL();
img.style.transform = 'rotate(45deg)';
};
var readImageFile = function(e) {
var file = e.target.files[0];
if (!file) return;
var reader = new FileReader();
reader.onload = function(e) {
processTiff(e.target.result);
};
reader.readAsArrayBuffer(file);
};
document.getElementById('fileInput').addEventListener('change', readImageFile, false);
})();
</script>
</body>
</html>
Чтобы избежать ошибок с подключением внешних файлов, лучше всего собирать строку HTML динамически в коде 1С. Рассмотрим, как это делается:
// Получаем текст библиотеки из макета обработки или справочника
tiff_min_js = РеквизитФормыВЗначение("Объект").ПолучитьМакет("МакетБиблиотеки").ПолучитьТекст();
ТекстHTML = "
|<html>
| <meta charset=""utf8""/>
|<head>
| <script>
|" + tiff_min_js + "
| </script>
|</head>
|<body>
| <!-- Дальнейший код HTML -->
|</body>
|</html>";
Элементы.ВашеПолеHTML.УстановитьТекст(ТекстHTML);
Хотя использование tiff.js решает поставленную задачу, важно учитывать следующие аспекты:
ImageMagick через ЗапуститьПриложение, чтобы заранее преобразовать TIFF в формат JPG или PNG. Это даст максимально быстрый результат при отображении.WebView2. Это откроет доступ к современным веб-технологиям и сделает работу с HTML-полями более стабильной.Таким образом, комбинируя возможности JavaScript и серверную обработку 1С, вы сможете реализовать гибкий инструмент для просмотра сложных графических форматов, обеспечивая при этом высокую функциональность вашего приложения.