JasperReport масштабирует изображения при экспорте в PDF, теряя при этом качество

У меня есть отчет, созданный с помощью iReport 1.3.0. Этот отчет включает в себя несколько изображений, которые загружаются динамически. Затем я использую JasperRunManager.runReportToPdfFile для создания PDF. Все в PDF выглядит нормально, за исключением изображений, которые кажутся масштабированными.

Может ли кто-нибудь сказать мне, что я делаю неправильно?

Спасибо.


person Alan    schedule 11.01.2011    source источник
comment
Я только что скачал и установил самую новую версию (4.0.0). Я попробовал предварительный просмотр отчета, и изображения по-прежнему отображаются в масштабе. Должен быть какой-то параметр конфигурации, который мне не хватает, но я не могу понять, какой именно. Пожалуйста помоги!   -  person Alan    schedule 12.01.2011


Ответы (3)


Об изображениях

Если вы сохраните отчет в формате HTML, вы заметите, что логотип отображается правильно.

Файлы изображений, такие как PNG, представляют собой растровые изображения: они хранятся в виде отдельных пикселей.

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

Использование растрового изображения в векторном формате, скорее всего, приведет к эффекту пикселизации.

Возможные решения

У вас есть несколько вариантов, чтобы изображения соответствовали качеству текста, в порядке удобства:

  • Создайте версию логотипа с разрешением 1200 dpi и увеличением на 400 %.
  • Создайте SVG-версию логотипа.
  • Преобразуйте изображение в векторный формат.
  • Масштабируйте изображение на 300% и измените разрешение на 288 dpi.

Версия с разрешением 1200 точек на дюйм

Изображение будет выглядеть четким примерно до 400% увеличения.

SVG-версия

Изображение будет выглядеть четким при любом разрешении. Замените обычный <image...> XML следующим кодом (не забудьте соответствующим образом настроить ширину и высоту):

<image hAlign="Center" vAlign="Middle">
 <reportElement x="0" y="0" width="179" height="66"/>
 <imageExpression class="net.sf.jasperreports.engine.JRRenderable"><![CDATA[net.sf.jasperreports.renderers.BatikRenderer.getInstance(new java.io.File("/path/to/logo.svg"))]]></imageExpression>
</image>

Конвертировать GIF в SVG

Чтобы преобразовать GIF в SVG, сначала попробуйте быстрый веб-инструмент, например: http://vectormagic.com.

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

Разрешение и масштаб

Видеть:

person Dave Jarvis    schedule 13.01.2011
comment
Нет необходимости устанавливать свойство class в более поздних версиях JasperReports (если вам интересно, как установить это для JRDesignExpression). - person tsauerwein; 06.05.2014
comment
Разрешение - это то, что исправило меня. Я сделал изображение огромным, и это сработало. - person Nicholas DiPiazza; 09.01.2015

Начиная с версии 4.0.1 разрешение растровых изображений должно быть сохранено, а также вы можете улучшить разрешение графиков при использовании других параметров экспорта (xls, rtf, html и т.д.). По умолчанию установлено очень низкое разрешение 72 dpi.

В параметрах iReport > свойства JasperReport изменить

net.sf.jasperreports.image.dpi 300

http://jasperforge.org/projects/jasperreports/tracker/view.php?id=3411

person KCD    schedule 07.12.2011

В более новых версиях вам необходимо настроить свойство net.sf.jasperreports.image.dpi глобально, определив файл jasperreports.properties внутри папки WEB-INF/classes/ с этой строкой в ​​нем:

net.sf.jasperreports.image.dpi=300

Также требуется перезагрузка сервера.

person Paco Abato    schedule 11.07.2021