Как стать автором
Обновить
554.1
OTUS
Цифровые навыки от ведущих экспертов

Генерация штрих-кодов QR Code в отчете SSRS с помощью библиотеки QRCoder

Время на прочтение5 мин
Количество просмотров1.2K
Автор оригинала: Stan Kulp

Хотя библиотека с открытым исходным кодом QRCode4CS, использованная в статье "Генерация двумерных штрих-кодов QR Code® в отчете SSRS", позволяет отображать QR-коды в отчетах SSRS, оказалось, что она поддерживает только стандарт Micro QR Code, который ограничивает строку ввода до 34 символов.

В отличие от этого, библиотека QRCoder с открытым исходным кодом может поддерживать строку ввода до 2952 символов.

Атрибуция

В этой статье используется код, извлеченный из архива проекта QRCoder: https://github.com/codebude/QRCoder/archive/master.zip >> QRCoder-master.zip.

Обзор

Вот шаги, необходимые для создания отчета SSRS, который отображает символы QR-кода с помощью библиотеки QRCoder

  1. Получите существующие или скомпилируйте две сборки QRCoder со строгими именами и атрибутом PartiallyTrustedCallers*.

  2. Установите их в глобальный кэш сборок (GAC) с помощью утилиты gacutil.exe

  3. Создайте новый отчет SSRS, который запрашивает таблицу тестовых данных.

  4. Добавьте ссылку на сборку QRCoderImageToByteArray в GAC 

  5. Добавьте функцию пользовательского кода, которая отправляет строку в сборку QRCoderImageToByteArray и принимает в ответ массив байтов

  6. Добавьте поле в отчет и увеличьте его физические размеры для размещения развернутого символа QR-кода

  7. Перетащите компонент изображения в новое поле, чтобы появился диалоговое окно свойств изображения.

  8. Измените источник изображения на Database (база данных), добавьте функцию, ссылающуюся на функцию пользовательского кода, и измените тип MIME на image/png (изображение/png).

  9. Установите свойство размера компонента изображения, чтобы заполнить доступное пространство поля, сохраняя при этом исходное соотношение сторон.

  10. Выполните отчет, чтобы отобразить данные и QR-код, сгенерированный на их основе.

* Для вставки сборки в GAC требуется сильное имя. SSRS требует, чтобы сборки, на которые он ссылается, включали атрибут PartiallyTrustedCallers.

Содержимое файла ресурсов

Распакуйте приаттаченный файл QRCoderResources.zip и перейдите к извлеченной папке QRCoderResources в File Explorer.

Папка QRCodeDemoExe содержит исполняемый файл, который можно использовать для тестирования выходных данных библиотеки QRcode.

Папки QRCoderDemoSln, QRCoderImageToByteArraySln и QRCodeSln содержат проекты C#, используемые для компиляции демонстрационного приложения QR Coder и сборок. (При желании вы можете загрузить эти проекты в Visual Studio или SharpDevelop и скомпилировать их самостоятельно).

Папка StronglyNamedPartiallyTrustedCallersDLLs содержит сборки, которые будут использоваться для генерации QR-кодов в отчете SSRS.

Файл QRCoder-master.zip - это оригинальный архив QRCoder, загруженный с github.

Протестируйте библиотеку QRCoder

Перейдите в папку QRCoderDemoExe, чтобы отобразить сборку QRCoder.dll и приложение QRCoderDemo, которое использует ее для генерации QRC-кодов.

Дважды кликните по приложению QRCodeDemo, чтобы сгенерировать символ QRCode.

По умолчанию приложение генерирует QR-код для строки 1234567890. Но вы можете ввести любые значения в текстовое поле, чтобы сгенерировать символ для данного ряда.

Протестируйте приложение с типичными строками из знаков, которые вы хотите преобразовать в символы QR-кода. Считайте полученные символы с помощью выбранного вами устройства для чтения QR-кодов, чтобы убедиться, что библиотека подходит для ваших целей.

Сборки, используемые для генерации символов QR-кода в отчетах SSRS

Перейдите в папку StronglyNamedPartiallyTrustedCallersDLLs.

Сборка QRCoder.dll может генерировать символы QR-кода из входной строки в различных форматах изображений, включая растровые.

Однако SQL Server Reporting Services не может отображать изображения напрямую, а требует, чтобы они передавались в виде массивов байтов. Для решения этой проблемы сборка QRCoderImageToByteArray.dll передает входную строку в функцию BitmapByteQRCode() сборки QRCoder.dll и направляет возвращаемое растровое изображение в виде массива байтов в SSRS.

Инсталлируйте сборки в глобальный кэш сборок (GAC)

Найдите файл gacutil.exe с помощью Agent Ransack или File Explorer.

Скопируйте путь к соответствующей 32- или 64-битной версии gacutil.exe:

C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\gacutil.exe

Откройте командную консоль от имени администратора и перейдите в папку StronglyNamedPartiallyTrustedCallersDLLs.

Установите сборки в GAC с помощью следующих команд:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\gacutil.exe" -i QRCoder.dll

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\gacutil.exe" -i QRCoderImageToByteArray.dll

Убедитесь, что сборки были добавлены в папку C:\Windows\Microsoft.NET\assembly\GAC_MSIL.

Сформируйте тестовые данные для отчета

Откройте новое окно запроса в SQL Server Management Studio и вставьте в него следующий SQL-код.

BEGIN TRY
    DROP DATABASE TestDB
END TRY
BEGIN CATCH
END CATCH
GO
BEGIN TRY
    CREATE DATABASE TestDB
END TRY
BEGIN CATCH
END CATCH
GO
USE TestDB
BEGIN TRY
    DROP TABLE TestData
END TRY
BEGIN CATCH
END CATCH
GO
CREATE TABLE [dbo].[TestData](
    [City] [nvarchar](50) NULL,
    [Zip] [nvarchar](50) NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[TestData] (City,Zip) VALUES ('Seattle','98101')
INSERT INTO [dbo].[TestData] (City,Zip) VALUES ('Bangor','04402')
INSERT INTO [dbo].[TestData] (City,Zip) VALUES ('Miami','33133')
INSERT INTO [dbo].[TestData] (City,Zip) VALUES ('Houston','77001')
INSERT INTO [dbo].[TestData] (City,Zip) VALUES ('Boston','02201')
SELECT * FROM [dbo].[TestData]

Выполните запрос чтобы создать базу данных TestDB и таблицу TestData, которая содержит определенную информацию о почтовом индексе.

Создание и выполнение демонстрационного отчета QRCoder Demo SSRS

Запустите мастер создания нового проекта Report Server Project в Visual Studio.

Вставьте соответствующую информацию о строке подключения.

Вставьте следующий код в текстовое поле Query string (Строка запроса).

SELECT city,zip FROM dbo.TestData

Выберите табличный тип отчета.

Переместите поля "city" (город) и "zip" (почтовый индекс) в текстовое поле "Details" (подробности).

Кликните на кнопку Finish (Завершение).

Выберите Report Properties (Свойства Отчета) в меню Report (Отчет).

Кликните на вкладку References (Ссылки), затем кнопку add (Добавить),  потом вкладку browse (Обзор) и найдите сборку QRCoderImgeToByteArray.dll в GAC.

Кликните на вкладку Code (Код) и добавьте следующую функцию в текстовое поле пользовательского кода:

Public Function QRCoderByteArray(ByVal inputString As String) as Byte()
     Return QRCoderImageToByteArray.QRCoderImageToByteArrayClass.renderBmpToByteArray(inputString)
End Function

Кликните правой кнопкой мыши в верхней части столбца zip (почтовый индекс) и вставьте новый столбец справа.

Увеличьте высоту строки данных и ширину нового столбца, чтобы освободить место для развернутого символа QRCode.

Перетащите компонент изображения в новое поле, чтобы открыть окно свойств изображения.

Выберите Database (База данных) в качестве источника изображения и кликните на функциональную кнопку Use this field (Использовать это поле).

Введите следующий код в текстовое поле выражения:

=Code.QRCoderByteArray(Fields!city.Value + " " + Fields!zip.Value)

Выберите image/png (изображение/png) в качестве MIME-типа:

Кликните по узлу size (размер), выберите радиокнопку fit proportional (вписать в пропорции) и нажмите OK.

Кликните на вкладку Preview (Предварительный просмотр) консоли отчета.

В отчете отображаются city (город), zip (почтовый индекс) и QR-код для скомпонованных города и почтового индекса.

Приложение для сканирования штрихкодов на моем телефоне правильно расшифровывает стоящий первым в списке символ QR-кода.

Заключение

В предыдущей статье об отображении символов QR-кода в отчетах SSRS использовалась библиотека с открытым исходным кодом. В то время она еще мне была неизвестна и поддерживала только стандарт Micro QR Code.standard, что приводило к ограничению входной строки в 34 символа.

Библиотека QRCoder является более строгой имплементацией стандарта ISO/IEC 18004 QR Code. Она кодирует до 2952 буквенно-цифровых символов, что является максимальным значением для стандарта в двоичном формате/байтах.

Ресурсы


Материал подготовлен в рамках курса "MS SQL Server Developer".

Теги:
Хабы:
Всего голосов 5: ↑3 и ↓2+1
Комментарии0

Публикации

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS