Изображение 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
Ответы
Ответ 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). (Хотя в моем случае я думаю, что это не помогло бы, поскольку этот сайт все еще работает даже с этим префиксом.)