Внешнее изображение SSRS не отображается, если значение задано выражением - PullRequest
11 голосов
/ 24 мая 2019

Я использую Microsoft.ReportViewer.WebForms версию 11 через страницу aspx, встроенную в приложение MVC. Отчет отображается в виде PDF-файла из средства просмотра отчетов.

Задача

У меня есть таблица, которая отображает внешние изображения. Изображения не отображаются, если URL-адрес изображения рассчитывается по выражению или задается из столбца в базе данных. Изображение отображается только в том случае, если я жестко закодировал URL непосредственно в отчете Очевидно, что это не решение, но оно показывает, что отчет может получить доступ к URL-адресу и отобразить изображение.

При выводе отчета я получаю следующие предупреждения:

ImageData для изображения ‘LinkedImage’ недействительно. Подробности: Неверный URI: Не удалось определить формат URI.

Значение свойства ImageData для изображения ‘LinkedImage’ равно «», что недопустимо для ImageData.

Что я пробовал

  1. Я дважды проверил созданный URL, и он правильный. Я даже сделал действие клика гиперссылкой на изображение, и оно корректно переходит на изображение.

  2. Изначально я объединял URL-адрес в выражении, но после того, как это не сработало, SQL-запрос собирал весь URL-адрес. Он по-прежнему не отображается.

  3. Я попытался установить флаг:

    reportViewer.LocalReport.EnableExternalImages = true;
    
  4. Использование .NET Reflector для генерации файлов PDB Мне удалось просмотреть код программы просмотра отчетов. На объекте-значении есть флаг IsExpression, который устанавливается в значение false при отображении отчета. Я не очень разбираюсь во внутренней работе средства просмотра отчетов, поэтому не знаю, красная ли это сельдь.

  5. Я изменил формат вывода на HTML, и он все еще не отображается. Разметка изображения (как видно из инструментов разработчика Chrome) выглядит так:

    <img onload="this.fitproportional=true;this.pv=0;this.ph=0;" height="5px" width="1px" src=(unknown)>
    
  6. Я попытался установить MIMEType на правильное значение для каждого изображения. (Спасибо Майку Хани за предложение)

  7. Я пробовал разные Размеры значения Авторазмер , Fit , FitProportional и Clip .

  8. Я восстановил и полностью переустановил установку среды выполнения ReportViewer с помощью установщика здесь: https://www.microsoft.com/en-gb/download/details.aspx?id=35747

  9. Я запустил веб-сайт из локального экземпляра Visual Studio и развернутой версии на веб-сайте на другом сервере (такая же установленная версия ReportViewer), и проблема сохраняется.

Я хотел бы обратить внимание на номер 4. Может ли существовать конфигурация, из-за которой код ReportViewer не видит значение как выражение?

Код

Вот разметка в RDL:

<Image Name="LinkedImage">
    <Source>External</Source>
    <Value>=Fields!imageUrl.Value</Value>
    <Sizing>FitProportional</Sizing>                               
    <Style>
        <Border>
            <Style>None</Style>
        </Border>
    </Style>
</Image>

Вот пример URL (хост удален из примера):

http://---------/images/FEE40608-0457-E511-A17F-00155D145C00/FFE40608-0457-E511-A17F-00155D145C00.jpg

Я что-то упустил? Спасибо!

Ответы [ 2 ]

3 голосов
/ 06 июня 2019

Я наконец дошел до сути.Эта проблема, как оказалось, была вызвана сделанным на заказ классом ReportProcessor, который был добавлен в приложение MVC, которое манипулирует RDL еще до того, как рендеринг имеет место.В частности, он удаляет символ = из узла Value узлов Image в RDL.Мне не пришло в голову, что отчет не достиг стадии визуализации в своем первоначальном состоянии.Я заплачу за это с Репутацией, которую я потратил!

Эта проблема будет уникальной для людей, которые представили другой ReportProcessor, который выполняет манипуляции с RDL таким образом, поэтому я не знаю, какЭто будет полезно для людей, которые находят этот вопрос на SO.Я оставлю это здесь, так как он может быть использован как список вещей для проверки.

Извините за трату времени всех.Спасибо Mike-Honey, user1429080 и AndrewE за их время и усилия.

0 голосов
/ 03 июня 2019

В свойствах объекта Image я бы проверил, что свойство MIMEType установлено правильно, например, image / jpeg .

Насколько я понимаю,Ваш веб-браузер достаточно умен, чтобы правильно угадывать без этой информации, но механизм рендеринга SSRS не настолько умен.

...