Как растянуть QR код на всю картинку

1. starjevschik 20.02.23 12:15 Сейчас в теме
УТ 10.3. Платформы разные, результат одинаковый.
Есть печать QR кодов (для линейного ШК впрочем ситуация аналогичная и тоже неплохо бы исправить). Процедуры получения картинки стандартные 1с, вырезаны из какой-то конфигурации не очень давней вместе с компонентой.
На шаблоне картинка занимает весь шаблон, а в итоге только небольшую часть. Не растягивается никак. Как ее заставить растянуться полностью?
	ПараметрыШтрихкода = Новый Структура;
		
		ПараметрыШтрихкода.Вставить("Высота",Окр(Рисунок.Ширина / КоличествоМиллиметровВПикселе) *5);
		ПараметрыШтрихкода.Вставить("Ширина",Окр(Рисунок.Высота / КоличествоМиллиметровВПикселе) *5); 
		
		ПараметрыШтрихкода.Вставить("ТипКода"           , 16); 
		ПараметрыШтрихкода.Вставить("ОтображатьТекст"   , Истина);
		ПараметрыШтрихкода.Вставить("РазмерШрифта"      , 150);
		ПараметрыШтрихкода.Вставить("Штрихкод"          , СокрЛП(ТекстШК));
		ПараметрыШтрихкода.Вставить("ПрозрачныйФон"     , Истина);
		ПараметрыШтрихкода.Вставить("УровеньКоррекцииQR", 1);
		ПараметрыШтрихкода.Вставить("Масштабировать"          ,  Истина);
		ПараметрыШтрихкода.Вставить("СохранятьПропорции"     ,  Ложь);
		ПараметрыШтрихкода.Вставить("ВертикальноеВыравнивание",  2);//1 - по верхнему краю, 2 - по центру, 3 - по нижнему краю. 
		ПараметрыШтрихкода.Вставить("GS1DatabarКоличествоСтрок", 2);
 		ПараметрыШтрихкода.Вставить("УбратьЛишнийФон", Истина);
		
		Картинка = ПечатьШК.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);

// Функция выполняет подключение внешней компоненты и ее первоначальную настройку.
// Возвращаемое значение: НЕОПРЕДЕЛЕНО - компоненту не удалось загрузить.
Функция ПодключитьВнешнююКомпонентуПечатиШтрихкода() Экспорт
	ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
	
	// Создадим объект внешней компоненты.
	Если ПодключениеВыполнено Тогда
		ВнешняяКомпонента = Новый("AddIn.КартинкаШтрихкода.Barcode");
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	
	// Если нет возможности рисовать.
	Если НЕ ВнешняяКомпонента.ГрафикаУстановлена Тогда
		// То картинку сформировать не сможем.
		Возврат Неопределено;
	Иначе
		// Установим основные параметры компоненты.
		// Если в системе установлен шрифт Tahoma.
		Если ВнешняяКомпонента.НайтиШрифт("Tahoma") Тогда
			// Выбираем его как шрифт для формирования картинки.
			ВнешняяКомпонента.Шрифт = "Tahoma";
		Иначе
			// Шрифт Tahoma в системе отсутствует.
			// Обойдем все доступные компоненте шрифты.
			Для Сч = 0 По ВнешняяКомпонента.КоличествоШрифтов -1 Цикл
				// Получим очередной шрифт, доступный компоненте.
				ТекущийШрифт = ВнешняяКомпонента.ШрифтПоИндексу(Сч);
				// Если шрифт доступен
				Если ТекущийШрифт <> Неопределено Тогда
					// Они и будет шрифтом для формирования штрихкода.
					ВнешняяКомпонента.Шрифт = ТекущийШрифт;
					Прервать;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
		// Установим размер шрифта
		ВнешняяКомпонента.РазмерШрифта = 12;
		
		Возврат ВнешняяКомпонента;
	КонецЕсли;
	
КонецФункции



// Функция выполняет формирование изображения штрихкода.
// Параметры: 
//   ПараметрыШтрихкода 
// Возвращаемое значение: 
//   Картинка - Картинка со сформированным штрихкодом или НЕОПРЕДЕЛЕНО.
Функция ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода) Экспорт
	
	ВнешняяКомпонента = ПодключитьВнешнююКомпонентуПечатиШтрихкода();
	
	Если ВнешняяКомпонента = Неопределено Тогда
		ВызватьИсключение НСтр("ru = 'Ошибка подключения внешней компоненты печати штрихкода.'");
	КонецЕсли;
	
	// Зададим размер формируемой картинки.
	ВнешняяКомпонента.Ширина = Окр(ПараметрыШтрихкода.Ширина);
	ВнешняяКомпонента.Высота = Окр(ПараметрыШтрихкода.Высота);
	
	ВнешняяКомпонента.АвтоТип = Ложь;
	
	Если ПараметрыШтрихкода.ТипКода = 99 Тогда
		ТипШтрихкодаВрем = ОпределитьТипШтрихкода(ПараметрыШтрихкода.Штрихкод);
		Если ТипШтрихкодаВрем = "EAN8" Тогда
			ВнешняяКомпонента.ТипКода = 0;
		ИначеЕсли ТипШтрихкодаВрем = "EAN13" Тогда
			ВнешняяКомпонента.ТипКода = 1;
			// Если код содержит контрольный символ, обязательно указываем.
			ВнешняяКомпонента.СодержитКС = СтрДлина(ПараметрыШтрихкода.Штрихкод) = 13;
		ИначеЕсли ТипШтрихкодаВрем = "EAN128" Тогда
			ВнешняяКомпонента.ТипКода = 2;
		ИначеЕсли ТипШтрихкодаВрем = "CODE39" Тогда
			ВнешняяКомпонента.ТипКода = 3;
		ИначеЕсли ТипШтрихкодаВрем = "CODE128" Тогда
			ВнешняяКомпонента.ТипКода = 4;
		ИначеЕсли ТипШтрихкодаВрем = "ITF14" Тогда
			ВнешняяКомпонента.ТипКода = 11;
		ИначеЕсли ТипШтрихкодаВрем = "QR" Тогда
			ВнешняяКомпонента.ТипКода = 16;
		ИначеЕсли ТипШтрихкодаВрем = "EAN13Addon2" Тогда
			ВнешняяКомпонента.ТипКода = 14;
		ИначеЕсли ТипШтрихкодаВрем = "EAN13Addon5" Тогда
			ВнешняяКомпонента.ТипКода = 15;
		Иначе
			ВнешняяКомпонента.АвтоТип = Истина;
		КонецЕсли;
	Иначе
		ВнешняяКомпонента.АвтоТип = Ложь;
		ВнешняяКомпонента.ТипКода = ПараметрыШтрихкода.ТипКода;
	КонецЕсли;
	
	Если ПараметрыШтрихкода.Свойство("ПрозрачныйФон") Тогда
		ВнешняяКомпонента.ПрозрачныйФон = ПараметрыШтрихкода.ПрозрачныйФон;
	КонецЕсли;
	
	Если ПараметрыШтрихкода.Свойство("GS1DatabarКоличествоСтрок") Тогда
		ВнешняяКомпонента.GS1DatabarКоличествоСтрок = ПараметрыШтрихкода.GS1DatabarКоличествоСтрок;
	КонецЕсли;
	
	ВнешняяКомпонента.ОтображатьТекст = ПараметрыШтрихкода.ОтображатьТекст;
	
	// Формируем картинку штрихкода.
	ВнешняяКомпонента.ЗначениеКода = ПараметрыШтрихкода.Штрихкод;
	// Угол поворота штрихкода.
	ВнешняяКомпонента.УголПоворота = ?(ПараметрыШтрихкода.Свойство("УголПоворота"), ПараметрыШтрихкода.УголПоворота, 0);
	// Уровень коррекции QR кода (L=0, M=1, Q=2, H=3).
	ВнешняяКомпонента.УровеньКоррекцииQR = ?(ПараметрыШтрихкода.Свойство("УровеньКоррекцииQR"), ПараметрыШтрихкода.УровеньКоррекцииQR, 1);
	
	// Для обеспечения совместимости с предыдущими версиями БПО.
	Если Не ПараметрыШтрихкода.Свойство("Масштабировать")
		Или (ПараметрыШтрихкода.Свойство("Масштабировать") И ПараметрыШтрихкода.Масштабировать) Тогда
		
		Если Не ПараметрыШтрихкода.Свойство("СохранятьПропорции")
				Или (ПараметрыШтрихкода.Свойство("СохранятьПропорции") И Не ПараметрыШтрихкода.СохранятьПропорции) Тогда
			
			// Если установленная нами ширина меньше минимально допустимой для этого штрихкода.
			Если ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода Тогда
				ВнешняяКомпонента.Ширина = ВнешняяКомпонента.МинимальнаяШиринаКода;
			КонецЕсли;
			
			// Если установленная нами высота меньше минимально допустимой для этого штрихкода.
			Если ВнешняяКомпонента.Высота < ВнешняяКомпонента.МинимальнаяВысотаКода Тогда
				ВнешняяКомпонента.Высота = ВнешняяКомпонента.МинимальнаяВысотаКода;
			КонецЕсли;
			
		ИначеЕсли ПараметрыШтрихкода.Свойство("СохранятьПропорции") И ПараметрыШтрихкода.СохранятьПропорции Тогда
			
			Пока ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода 
				Или ВнешняяКомпонента.Высота < ВнешняяКомпонента.МинимальнаяВысотаКода Цикл
				
				// Если установленная нами ширина меньше минимально допустимой для этого штрихкода.
				Если ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода Тогда
					ВнешняяКомпонента.Ширина = ВнешняяКомпонента.МинимальнаяШиринаКода;
					ВнешняяКомпонента.Высота = (ВнешняяКомпонента.МинимальнаяШиринаКода / Окр(ПараметрыШтрихкода.Ширина)) * Окр(ПараметрыШтрихкода.Высота);
				КонецЕсли;
				
				// Если установленная нами высота меньше минимально допустимой для этого штрихкода.
				Если ВнешняяКомпонента.Высота < ВнешняяКомпонента.МинимальнаяВысотаКода Тогда
					ВнешняяКомпонента.Высота = ВнешняяКомпонента.МинимальнаяВысотаКода;
					ВнешняяКомпонента.Ширина = (ВнешняяКомпонента.МинимальнаяВысотаКода / Окр(ПараметрыШтрихкода.Высота)) * Окр(ПараметрыШтрихкода.Ширина);
				КонецЕсли;
				
			КонецЦикла;
			
		КонецЕсли;
	КонецЕсли;
	
	// ВертикальноеВыравниваниеКода: 1 - по верхнему краю, 2 - по центру, 3 - по нижнему краю.
	Если ПараметрыШтрихкода.Свойство("ВертикальноеВыравнивание") И (ПараметрыШтрихкода.ВертикальноеВыравнивание > 0) Тогда
		ВнешняяКомпонента.ВертикальноеВыравниваниеКода = ПараметрыШтрихкода.ВертикальноеВыравнивание;
	КонецЕсли;

	Если ПараметрыШтрихкода.Свойство("РазмерШрифта") И (ПараметрыШтрихкода.РазмерШрифта > 0) 
		И (ПараметрыШтрихкода.ОтображатьТекст) И (ВнешняяКомпонента.РазмерШрифта <> ПараметрыШтрихкода.РазмерШрифта) Тогда
		ВнешняяКомпонента.РазмерШрифта = ПараметрыШтрихкода.РазмерШрифта;
	КонецЕсли;
	
	Если ПараметрыШтрихкода.Свойство("РазмерШрифта") И ПараметрыШтрихкода.РазмерШрифта > 0
		И ПараметрыШтрихкода.Свойство("МонохромныйШрифт") Тогда
		
		Если ПараметрыШтрихкода.МонохромныйШрифт Тогда
			ВнешняяКомпонента.МаксимальныйРазмерШрифтаДляПринтеровНизкогоРазрешения = ПараметрыШтрихкода.РазмерШрифта + 1;
		Иначе
			ВнешняяКомпонента.МаксимальныйРазмерШрифтаДляПринтеровНизкогоРазрешения = -1;
		КонецЕсли;
		
	КонецЕсли;
	
	// Сформируем картинку
	ДвоичныеДанныеКартинки = ВнешняяКомпонента.ПолучитьШтрихкод();
	
	// Если картинка сформировалась.
	Если ДвоичныеДанныеКартинки <> Неопределено Тогда
		// Формируем из двоичных данных.
		Возврат Новый Картинка(ДвоичныеДанныеКартинки);
	КонецЕсли;
	
	Возврат Неопределено;

КонецФункции
Показать
Прикрепленные файлы:
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user5300 1076 20.02.23 12:30 Сейчас в теме
//ПараметрыШтрихкода.Вставить("Высота",Окр(Рисунок.Ширина / КоличествоМиллиметровВПикселе) *5); 
//ПараметрыШтрихкода.Вставить("Ширина",Окр(Рисунок.Высота / КоличествоМиллиметровВПикселе) *5);

ПараметрыШтрихкода.Вставить("Высота",250);
ПараметрыШтрихкода.Вставить("Ширина",250);
3. starjevschik 20.02.23 12:48 Сейчас в теме
(2) Так высоту и ширину я и так задаю в пять раз больше размера области. Я так понял, потом картинка сжимается и четкость изображения лучше становится. Для линейных ШК это заметно, они иначе печатаются пунктиром... А на реальный размер изображения этот параметр не влияет никак. Размер задается размером табличного документа.
4. user5300 1076 20.02.23 12:56 Сейчас в теме
Похоже на то что сам макет уменьшается ...
Размеры этикетки(В настройках принтера) правильно установлены ?
6. starjevschik 20.02.23 13:28 Сейчас в теме
(4) размеры везде правильные. Такое впечатление, что компонента печати возвращает картинку с большими полями. В макете нет полей, в табличном документе они все 0.
5. THEBESTolo4b 10 20.02.23 13:12 Сейчас в теме
Что на предварительном просмотре? какие настройки принтера? возможно там АвтоМасштаб. или неправильно выставлены настройки принтера?
7. starjevschik 20.02.23 13:29 Сейчас в теме
(5) в предварительном просмотре так же маленькая картинка, от принтера не зависит, я ее вообще в ПДФ записываю без всякого принтера (см на картинке) и там уже неправильно.
8. THEBESTolo4b 10 20.02.23 13:31 Сейчас в теме
(7) а если поиграть с масштабом? 120% и т.д.

ПараметрыШтрихкода.Вставить("Масштабировать"          ,  Истина);
9. starjevschik 20.02.23 13:35 Сейчас в теме
(8) в генерации ШК масштаба нет, а размеры табличного документа уже не влияют на растяжение картинки ШК...
10. Sashares 33 20.02.23 14:12 Сейчас в теме
1. А какая версия компоненты печати штрихкода?
В одной из относительно старых версиях была проблема в компоненте - QR код печатался маленький, но потом это было исправлено. В версии Barcode_9.0.10.5 уже работало нормально.

2. В свойствах картинки в табличном документе стоит Размер картинки = Пропорционально?
11. starjevschik 20.02.23 14:20 Сейчас в теме
(10) версию не знаю даже, как узнать.
Размер картинки "Растянуть".
Вот думаю, может компоненту где-нибудь достать более другую. Может там что-то не так, вроде больше негде...
12. Sashares 33 20.02.23 14:22 Сейчас в теме
(11)Нельзя растягивать Qr код, он не будет считываться. Только Пропорционально.

версию не знаю даже, как узнать.


Сохранить из макета компоненту в файл - это zip архив, откройте его, там будет инфа.
13. Sashares 33 20.02.23 14:23 Сейчас в теме
(11)Попробуйте эту версию, для теста.
Прикрепленные файлы:
Barcode_9.0.10.5.zip
14. starjevschik 20.02.23 14:36 Сейчас в теме
(13) поставил, ничего не поменялось. Сделал "Пропорционально", но тоже ничего не изменилось.
15. starjevschik 20.02.23 20:32 Сейчас в теме
В общем так и не понял фокуса. Сделал у табличного документа отрицательные поля и размеры более-менее пропорциональные на глаз - стало немного лучше. Но почему картинка ШК возвращается с большими полями, так и не понял.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот