Как отобразить изображение формата TIFF в поле HTML документа в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке интерфейсов на платформе 1С:Предприятие часто возникает задача вывода графических данных непосредственно в форму. Если с форматами JPG, PNG или GIF проблем обычно не возникает, то формат TIFF вызывает затруднения. Разберемся, почему это происходит и как решить данную задачу программными средствами.

Почему 1С не отображает TIFF «из коробки»

Основная причина кроется в движке, который использует Поле HTML документа. В операционной системе Windows этот элемент управления опирается на компоненты Internet Explorer или, в более современных реализациях, на Edge/WebView2. Эти браузерные движки ориентированы на веб-стандарты, к которым формат TIFF не относится. По умолчанию браузеры не имеют встроенных средств для рендеринга TIFF-файлов.

Решение через JavaScript-библиотеки

Так как браузер не понимает формат напрямую, нам необходимо использовать промежуточный слой — клиентские библиотеки на языке JavaScript. Одной из наиболее эффективных является библиотека tiff.js. Суть работы заключается в том, что JavaScript считывает бинарные данные файла, конвертирует их во внутреннее представление, а затем отрисовывает на элементе canvas, который уже понятен браузеру.

Пошаговая реализация в 1С

Рассмотрим, как правильно внедрить этот механизм в вашу конфигурацию. Для того чтобы избежать проблем с безопасностью и доступом к файловой системе, мы встроим код библиотеки непосредственно в макет.

  1. Создайте текстовый макет в объекте 1С, куда скопируйте минифицированный код библиотеки tiff.min.js.
  2. В модуле формы, где планируется отображение, реализуйте получение текста макета.
  3. Сформируйте итоговый HTML-код, объединив верстку и логику работы с данными.

Приведем пример структуры 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>

Как правильно подключить скрипт в 1С

Чтобы избежать ошибок с подключением внешних файлов, лучше всего собирать строку 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 решает поставленную задачу, важно учитывать следующие аспекты:

Таким образом, комбинируя возможности JavaScript и серверную обработку 1С, вы сможете реализовать гибкий инструмент для просмотра сложных графических форматов, обеспечивая при этом высокую функциональность вашего приложения.

← На главную