Подтвердить что ты не робот

Изображение Base64 не отображается в Render PDF из отчета RDLC

Я пытаюсь отобразить изображение (base64 string), используя параметр (@CustomerSign) в отчете RDLC (я отрисовываю PDF файл из отчета и вижу файл PDF)

Я настроил свойство изображения, как показано ниже:

Выберите источник изображения: Database
Используйте это поле:

=Convert.FromBase64String(Parameters!CustomerSign.Value)

Используйте этот тип MIME: image/png

И передавая параметр:

ReportParameter CustomerSign = new ReportParameter("CustomerSign", obj.SignImage);
rptvw.LocalReport.SetParameters(CustomerSign);

Но изображение, показывающее красный крест [X] вместо изображения, и не дает ошибки!

В чем может быть проблема?

Я также пробовал: Как я могу визуализировать PNG-изображение (как поток памяти) на поверхности отчета .NET ReportViewer

4b9b3361

Ответ 1

Поддержка изображений довольно ограничена, эта статья MSDN обсуждает, что вы можете сделать.

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

Ответ 2

Сначала проверьте окно вывода Visual Studio. Любые ошибки RDLC, которые вы получаете, должны появляться там при отладке.

Например, я получал сообщение о том, что передал недопустимую строку base64.

Если вы видите:

Предупреждение. Значение свойства ImageData для изображения "Изображение есть" = Convert.From... ", которое не является допустимым ImageData. (RsInvalidDatabaseImageProperty)

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

В моем случае, следуя шаблону, который вы используете (спасибо), моя проблема закончилась тем, что мой base64 в базе данных был префикс data:image/png;base64,, поскольку он извлекался из и записывался в элемент изображения html.

Чтобы удалить этот префикс, мое выражение RDLC превратилось в:

=Convert.FromBase64String(CStr(Parameters!Base64.Value).Substring(22))

Что бы я предложил, вытащить базовую 64 строку из базы данных и подтвердить, что она действительно работает как изображение. Попробуйте поместить его в средство просмотра изображений base64 (например: https://codebeautify.org/base64-to-image-converter). (Хотя в моем случае я думаю, что это не помогло бы, поскольку этот сайт все еще работает даже с этим префиксом.)