powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Отображение фото в отчете JasperReports
18 сообщений из 18, страница 1 из 1
Отображение фото в отчете JasperReports
    #40122068
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Имеется отчет, нужно добавить поле с фото.
Нашел в интернете такое решение:
В шаблоне отчета:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<field name="photo" class="java.io.ByteArrayInputStream"/>
...
<image scaleImage="FillFrame" onErrorType="Blank">
	<reportElement x="1404" y="0" width="101" height="210" uuid="1144d1c3-4053-4f34-a63b-e30144395ea1"/>
		<box>
          		<topPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
			<leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
			<bottomPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
			<rightPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
		</box>
	<imageExpression><![CDATA["$F{checkOutPhoto}"]]></imageExpression>
</image>


Фото получается из БД, там оно хранится байтовым массивом
Запросом из БД получаю массив объектов, далее получаю и обрабатываю каждый элемент
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
InputStream photo = null;
if (obj[13] != null) {
      try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
            ObjectOutputStream out = new ObjectOutputStream(bos)) {
            out.writeObject(obj[13]);
            photo = new ByteArrayInputStream(bos.toByteArray());
      }
}


В отчете в нужном поле пусто. Попробовал добавить текстовое поле, и в нем прописал photo, там есть ByteArrayInputStream, т.е. в отчет нужные данные передаются, а вот в шаблоне не отображаются.
Подскажите, как можно сделать в отчете отображение изображения?
...
Рейтинг: 0 / 0
Отображение фото в отчете JasperReports
    #40122079
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов,
Найди hello world отображение картинки из файла.
Как заработает, подключи базу
...
Рейтинг: 0 / 0
Отображение фото в отчете JasperReports
    #40122091
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если указать путь к файлу, то картинка отображается без проблем
...
Рейтинг: 0 / 0
Отображение фото в отчете JasperReports
    #40122100
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов
если указать путь к файлу, то картинка отображается без проблем
тот же код и тот же шаблон буква в букву?
...
Рейтинг: 0 / 0
Отображение фото в отчете JasperReports
    #40122101
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов,
Код покажи. Рабочий и нет
...
Рейтинг: 0 / 0
Отображение фото в отчете JasperReports
    #40122102
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов,
А также логирование. Кто отладку делает как не прогер?
...
Рейтинг: 0 / 0
Отображение фото в отчете JasperReports
    #40122144
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

Не работает:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<field name="photo" class="java.io.ByteArrayInputStream"/>
...
<image scaleImage="FillFrame" onErrorType="Blank">
	<reportElement x="1404" y="0" width="101" height="210" uuid="1144d1c3-4053-4f34-a63b-e30144395ea1"/>
		<box>
          		<topPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
			<leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
			<bottomPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
			<rightPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
		</box>
	<imageExpression><![CDATA["$F{photo}"]]></imageExpression>
</image>



Работает
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<image scaleImage="FillFrame" onErrorType="Blank">
	<reportElement x="1404" y="0" width="101" height="210" uuid="1144d1c3-4053-4f34-a63b-e30144395ea1"/>
		<box>
          		<topPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
			<leftPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
			<bottomPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
			<rightPen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/>
		</box>
	<imageExpression><<![CDATA["logo.jpg"]]>></imageExpression>
</image>


В поле photo точно приходит java.io.ByteArrayInputStream
В первом сообщении у меня неправильно указано имя поля в imageExpression
...
Рейтинг: 0 / 0
Отображение фото в отчете JasperReports
    #40122157
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов,
Теперь выгрузи из бд в файл logo.jpg
И сюда ответ что показало.
...
Рейтинг: 0 / 0
Отображение фото в отчете JasperReports
    #40122159
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов,
Ну или наоборот. Из файла возьми стрим в первый не рабочий код
...
Рейтинг: 0 / 0
Отображение фото в отчете JasperReports
    #40122201
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов

Код: xml
1.
	<imageExpression><![CDATA["$F{checkOutPhoto}"]]></imageExpression>


Судя по коду у imageExpression нужно указать что туда передается, а по умолчанию вроде как строка

Павел Гужанов

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
InputStream photo = null;
if (obj[13] != null) {
      try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
            ObjectOutputStream out = new ObjectOutputStream(bos)) {
            out.writeObject(obj[13]);
            photo = new ByteArrayInputStream(bos.toByteArray());
      }
}




этот код в поток пишет сериализованное представление obj[13] - чет есть сомнения, что оно делает то что нужно
...
Рейтинг: 0 / 0
Отображение фото в отчете JasperReports
    #40122352
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень сильно поизвращался и получил следующее:
Код: xml
1.
2.
3.
<field name="photo" class="java.lang.String"/>
...
<imageExpression><![CDATA[javax.imageio.ImageIO.read(new java.io.ByteArrayInputStream(Base64.getDecoder().decode($F{photo})))]]></imageExpression>



Передаю в это поле Base64:
Код: java
1.
photo = Base64.getEncoder().encodeToString((byte[]) obj[13]);



Если отчет выгружается в Excel, то все нормально, фотография отображается
А вот если отчет выгружается в html, то это поле пустое, я вижу
Код: html
1.
<img src="" style="width: 100px; height: 210px" alt="">



Понятно, что картинка не показывается из-за того, что пустой src. Также понятно, что он пустой из-за того, что нет файла.
Можно ли как-то настройками в JasperReports сделать, чтобы картинка отображалась и в html?
...
Рейтинг: 0 / 0
Отображение фото в отчете JasperReports
    #40122356
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов,

Дык файл то создай или укажи в теге html сервлет который подсунет из бд картинку
...
Рейтинг: 0 / 0
Отображение фото в отчете JasperReports
    #40122361
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне надо это сделать без создания файла
...
Рейтинг: 0 / 0
Отображение фото в отчете JasperReports
    #40122393
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов
Мне надо это сделать без создания файла
блин, написал же - сервлет! Он выдаст фальшивый файл в виде бинарного потока из бд
...
Рейтинг: 0 / 0
Отображение фото в отчете JasperReports
    #40122394
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов,

src=имясервлета
...
Рейтинг: 0 / 0
Отображение фото в отчете JasperReports
    #40122735
Павел Гужанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совершенно не могу понять, как тут прикрутить сервлет.
У меня в отчете таблица, и в одном из столбцов надо вставить изображение. Изображение хранится в БД в байтовом массиве. Выше я написал, что пкодирую этот массив в Base64, передаю в отчет, если отчет выгружается в файл (например excel), то изображение есть. Если же выгружается в html, то изображения нет, создается <image src=""></image>
Выше мне написали, что надо использовать сервлет, тогда он подсунет нужный файл в image.
В интернете нашел только как передать в отчет только картинку, т.е создается map с ид картинки и ее содержимым, далее переопределенный метод getResourcePath(String id) получает из нее содержимое картинки. Но у меня нет такой мапы, у меня в отчет передается datasource, в котором уже есть эти Base64 картинки. Что в таком случае надо делать в переопределеннных методах?
В коде сделал следующее:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
        JasperPrint prt = getMyReportPrint(params, templateName, reportName, isR);
        if (prt == null) {
            logger.info(String.format("Нет данных для отчета "));
            return null;
        }
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        HtmlExporter exporter = new HtmlExporter();
        SimpleHtmlExporterOutput exporterOutput = new SimpleHtmlExporterOutput(out);
        exporterOutput.setImageHandler(new HtmlResourceHandler() {
            @Override
            public String getResourcePath(String id) {
                return null;
            }

            @Override
            public void handleResource(String id, byte[] data) {
            }
        });
        exporter.setExporterInput(new SimpleExporterInput(prt));
        exporter.setExporterOutput(exporterOutput);
        exporter.exportReport();
        logger.debug(String.format("Report %s success", templateName));
        return out.toByteArray();
...
Рейтинг: 0 / 0
Отображение фото в отчете JasperReports
    #40122741
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Гужанов,
Отчет отчету рознь.
Есть отчеты в котором все внутри. Например шрифты в pdf.
Есть отчеты которые подгружают что то снаружи.
Например html
Ты спросил про него?
Там строка src= это при запуске подтянуть инфу по сети.
ЭТО ПОНЯТНО?
Тогда почему не понял про сервлет?
Павел Гужанов
В интернете нашел только как передать в отчет только картинку,
из сервлета картинку ЭТО НЕ ОТЧЕТ.
Это любой прогер должен уметь без всяких отчетов.
Понятно?
...
Рейтинг: 0 / 0
Отображение фото в отчете JasperReports
    #40122742
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты передаешь отчет html, а он сам при клике юзверя или в окне эксплорера подтянет иконки в таблице.
Или из кеша.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Отображение фото в отчете JasperReports
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]