Форум программистов, компьютерный форум, киберфорум
bedvit
Войти
Регистрация
Восстановить пароль
Рейтинг: 3.40. Голосов: 5.

Печать QR-кода в COM/ActiveX и в Excel

Запись от bedvit размещена 22.04.2020 в 23:56. Обновил(-а) bedvit 26.06.2024 в 08:55
Показов 30880 Комментарии 0

Печать QR-кода в Excel, Word, 1С и проч. приложениях с поддержкой COM/ActiveX.
Часть библиотеки BedvitCOM
Использованы: libqrencode + GDI+
Функционал:
1. Сохранение изображения в форматы: bmp, jpeg, gif, tiff, png.
2. QR-кода сохраняется в монохромное изображение, где формат позволяет, т.е. до 1 бита на пиксель. В любом цвете RGB. К примеру размер .PNG 1140*1140 пикселей (1 бит на пиксель) - 2КБ.
3. Возможность задавать размер модуля (пикселя QR).
4. Возможность задавать цвет в RGB.
5. Возможность задавать версию QR кода.
6. Возможность задавать уровень коррекции ошибок.
7. Возможность изменить толщину рамки - quiet zone (начиная с v1.0.4.8)
8. Емкость QR-кода составляет до 7000 цифр или 4000 символов
9. (Отдельно) Конвертации вышеперечисленных форматов из одного в другой

Параметры/Аргументы функции QRcodePrint :
1. QRcodeText - что печатаем, строка(обязательное).
2. FileOut - куда печатаем, полное имя файла (обязательное). Начиная с версии библ. v1.0.4.0 - не обязательное, по умолчанию используется пользовательский "TEMP" + уникальное имя файла (GUID). Расширение теперь добавляется автоматически, если оно не указано. Если указан файл без папок - файл помещается в ту же папку, где располагается зарегистрированная библиотека.
3. FormatImageOut - формат изображения (код в функции/формат):0 (bmp), 1 (jpeg), 2 (gif), 3 (tiff), 4 (png)-по умолчанию. (этот и остальные аргументы не обязательны)
4. SizePixel - размер пикселя (модуля), по умолчанию 4 (минимально рекомендуемый)
5. PixelColorR =0 цвет RGB если хотим цветную картинку (по умолчанию черный)
6. PixelColorG = 0
7. PixelColorB =0
8. VersionSymbol - версия QR кода (1-40) (по умолчанию = 0-выбор автоматом)
9. LevelErrCorrect - уровень коррекции ошибок (0-3, по умолчанию = 1 ~15%)
10. QuietZone - Размер в модулях зоны тишины (>=0, по умолчанию = 4). Quiet zone — это область, отделяющая границу штрих-кода от фона и других изображений. Начиная с v1.0.4.8
11. Возвращает код ошибки, 0 - все штатно. Начиная с версии библ. v1.0.4.0 - при удаче, возвращается полное имя файла созданного изображения, при неудаче выводится ошибка и возвращается "Empty"

Добавил отдельный метод (ConvertFormatImage) конвертации вышеперечисленных форматов из одного в другой.
В случаях конвертации сторонних изображений.
Параметры/Аргументы метода ConvertFormatImage :
1. FileIn - полное имя файла (обязательное).
2. FileOut - полное имя файла (обязательное).
3. FormatImageOut - нужный формат (обязательное). Код в функции/формат:0 (bmp), 1 (jpeg), 2 (gif), 3 (tiff), 4 (png)

Пример использования:
1. Excel
- открываем или устанавливаем xll как надстройку нужной разрядности (Excel), пишем код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Option Explicit
 
Sub QR_Generate()
    Dim bVBA As Object: Set bVBA = CreateObject("BedvitCOM.VBA")  'позднее связывание
    Dim fileName As String: fileName = Environ("Temp") & "\QR.png" 'печать QR в файл (в пользовательский Temp)
    Dim convertToFile As String: convertToFile = Environ("Temp") & "\QR.tif"
    Dim QRcodeText As String: QRcodeText = "https://www.cyberforum.ru/blogs/829006/blog6514.html"
 
    Dim resultFileName As String
 
    'печать QR в файл (в пользовательский Temp) и вывести на лист Excel
    resultFileName = bVBA.QRcodePrint(QRcodeText, fileName)  'с аргументами по умолчанию
    ActiveSheet.Shapes.AddPicture resultFileName, False, True, 0, 0, -1, -1
 
    resultFileName = bVBA.QRcodePrint(QRcodeText, fileName, 4, 4, 255, 0, 0, 0, 1, 4) 'с нужными аргументами
    ActiveSheet.Shapes.AddPicture resultFileName, False, True, 200, 0, -1, -1
 
     'Конвертировать формат изображения
    bVBA.ConvertFormatImage fileName, convertToFile, 3  'формат (tiff), см. в описании
End Sub
В одну строку:
Visual Basic
1
2
3
Sub QR_Generate_Fast()
    ActiveSheet.Shapes.AddPicture CreateObject("BedvitCOM.VBA").QRcodePrint("Здесь инфо для печати", Environ("Temp") & "\QR.png"), False, True, 0, 0, -1, -1
End Sub
2. 1C - регистрируем COM нужной разрядности (можно под пользователем), далее код (по аналогии с Excel)

Последние версии библиотек.


UPD: 20/04/2021
Теперь и как функция Excel - QRcodePrint


Параметры/Аргументы функции QRcodePrint :
1. QRcodeText - что печатаем, строка(обязательное).
2. SizePixel - размер пикселя (не картинки, а квадратика в QR), по умолчанию 4 (минимально рекомендуемый)
3. PixelColorR =0 цвет RGB (0-255) если хотим цветную картинку (по умолчанию черный)
4. PixelColorG = 0
5. PixelColorB =0
6. VersionSymbol - версия QR кода (1-40) (по умолчанию = 0-выбор автоматом), см. ниже
7. LevelErrCorrect - уровень коррекции ошибок (0-3, по умолчанию = 1 ~15%), см. ниже
8.WidthImage - постоянная ширина (т.к. при кодировании разного размера данных размер QR меняется). Если хотим постоянный размер - проставляем. По умолчанию "-1" (размер фактический)
9.HeightImage - постоянная высота, тоже, что и п.8
10. QuietZone - Размер в модулях зоны тишины (>=0, по умолчанию = 4). Quiet zone — это область, отделяющая границу штрих-кода от фона и других изображений. Начиная с версии xll - v2.0.1.6
11.Left - отступ от левого верхнего угла ячейки с функцией (рекомендуется оставлять значение по умолчанию = 0)
12.Top - тоже, что и п.11 (рекомендуется оставлять значение по умолчанию = 0)
п.11,12 рекомендовано использовать, только тогда, когда есть понимание, как это все работает (см.ниже). В обратном случае может быть ситуация, когда изменили размер ячейки или изменили 11 и/или 12 параметр, и теперь QR - печатается в другой ячейке, а в предыдущей он уже не удалится, останется до ручного удаления.
Результат: При удаче, возвращается закодированная в QR-коде строка, при ошибке - "#ЧИСЛО!"
Важно: Ячейка в которую помещается QR-код предварительно очищается от старых версий QR.
Если QR-код больше не нужен можно удалить вручную или задать пустую строку для первого параметра функции (старый QR-код удалится, новый не создастся). Важно! QR-код при этом должен находится (его левый верхний угол) в рамках ячейки, в которой находится функция QRcodePrint(), в противном случай картинка не удалится.
Изображения
 
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Из чего и как собрать свой домашний кинотеатр
bt_guru 21.01.2025
Создание домашнего кинотеатра: от идеи до реализации В современном мире домашний кинотеатр стал неотъемлемой частью комфортного жилого пространства, предоставляя возможность наслаждаться. . .
Ошибки стиральных машин
bt_guru 21.01.2025
Современные стиральные машины представляют собой сложные электронные устройства, оснащенные множеством датчиков и систем контроля. Они способны самостоятельно определять вес загруженного белья,. . .
Копирование (маппинг) объектов в JavaScript
bytestream 21.01.2025
В современной разработке программного обеспечения копирование объектов представляет собой фундаментальную операцию, которая требует особого внимания и понимания. Маппинг объектов в JavaScript – это. . .
Как работать с Apache Kafka в C# .NET
bytestream 21.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки больших объемов информации в реальном времени. Эта система,. . .
Как использовать RabbitMQ в C# .NET
bytestream 21.01.2025
RabbitMQ представляет собой мощный брокер сообщений, который эффективно решает эту задачу, обеспечивая надежную передачу данных между множеством приложений. Этот инструмент реализует протокол AMQP. . .
Как объединить последние коммиты в Git
bytestream 21.01.2025
В мире разработки программного обеспечения система контроля версий Git стала незаменимым инструментом для управления исходным кодом. Одной из наиболее полезных, но порой сложных для освоения функций. . .
Как запушить новую локальную ветку (branch) в удалённый репозиторий Git и отслеживать её
bytestream 21.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемым инструментом для эффективного управления кодом и организации командной работы. Одной из ключевых. . .
Как создать директорию и все родительские директории, указанные в пути, с помощью Python
bytestream 21.01.2025
Python предоставляет мощные инструменты для работы с файловой системой через встроенные модули os и pathlib, которые значительно упрощают процесс манипуляции директориями. Эти модули содержат. . .
Как работать с массивами в JavaScript
bytestream 21.01.2025
Массивы в JavaScript представляют собой один из фундаментальных типов данных, который позволяет хранить упорядоченные коллекции различных элементов в одной переменной. Эта структура данных является. . .
Какая максимальная длина адреса (URL) в различных браузерах и стандартах
bytestream 21.01.2025
В современном мире интернет-технологий URL-адреса (Uniform Resource Locator) играют фундаментальную роль в функционировании веб-пространства. Эти уникальные идентификаторы ресурсов стали неотъемлемой. . .
Как сбросить локальный репозиторий до состояния удалённого репозитория Git
bytestream 21.01.2025
При разработке программного обеспечения с использованием системы контроля версий Git разработчики часто сталкиваются с необходимостью синхронизации локального и удаленного репозиториев. Данная задача. . .
Как запретить подсветку выделенного текста с помощью CSS
bytestream 20.01.2025
Подсветка текста при выделении является стандартным поведением браузера, которое не всегда соответствует дизайнерским решениям или функциональным требованиям веб-приложения. Выделение текста может. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru