Однажды решал задачу формирования прайс-листа с картинками из УТ 11.
Все делалось совершенно типовыми средствами. Внешняя печатная форма, с последующим сохранением в excel. Сохранение также типовое, пользовательское, из формы печати. Изображения для вставки в прайс брались также из стандартного хранилища в базе. Странность обнаружилась на прайсах больших объемов (несколько десятков картинок).
Оказалось, что изображения, попав в excel, меняют размер. И не в лучшую сторону. Если в УТ jpg был размером 20 кб, то, оказавшись в excel, он увеличивается до 80-150кб. В этом можно было убедиться, разархивировав xlsx. Все изображения находятся в \xl\media\. В результате файл вырастал до мегабайтных масштабов, вместо расчетных 200-400 кб.
Поиски решения в гугле не увенчались ничем, поэтому стал экспериментировать, пытаясь понять, где же суть проблемы. Со стороны excel ничего не нарыл. Сжатие его средствами или не давало никагого эффекта, или он был незначителен. Да, и, кроме того, использование инструментария excel требовало доработок механизма сохранения, чего мне делать совсем не хотелось.
Решение обнаружилось случайно, в процессе эксперимента с атрибутом рисунка табличного документа "РазмерКартинки". Почему-то мне раньше казалось, что этот атрибут, несмотря на название, прямого отношения к размеру в байтах не имеет и нужен только для определения того, как будет вписана картинка в область. Однако это оказалось не так. Напомню возможные значения этого атрибута:
- Авторазмер
- Пропорционально
- Растянуть
- РеальныйРазмер
- Черепица
Оказалось, что только значение "Растянуть" позволяет сохранить исходный размер картинки. Все остальные приводят к проблеме, которую я и решал. Последние два значения, правда, в формировании прайс-листа вообще слабо применимы.
В целом, проблема оказалась решена, с единственным "но". Значение "Растянуть" может "съесть" часть картинки, если она изначально имеет неверные пропорции. Но это уже проблема других специалистов.
Дополнительно могу сказать, что эксперименты проводились на платформе 8.3.8.2027.