JasperReport在导出为PDF时缩放图像,从而导致质量下降

时间:2011-01-11 11:42:27

标签: jasper-reports ireport

我有一份使用iReport 1.3.0设计的报告。此报告包含多个动态加载的图像。然后我使用JasperRunManager.runReportToPdfFile创建PDF。除了显示缩放的图像外,PDF中的所有内容都很好。

谁能告诉我我做错了什么?

感谢。

3 个答案:

答案 0 :(得分:9)

关于图像

如果您将报告另存为HTML,您会发现徽标显示正确。

PNG等图像文件是光栅图像:存储为单个像素。

PDF文件主要是矢量化的:内部元素存储为如何绘制它们的描述。这使得PDF可以扩展并且在任何规模上都清晰可见。

使用矢量格式的光栅图像可能会导致像素化效果。

可能的解决方案

您可以选择使图像与文本质量相匹配,以便于:

  • 以1200 dpi创建徽标版本,缩放400%。
  • 创建徽标的SVG版本。
  • 将图像转换为矢量格式。
  • 将图像缩放300%并将分辨率更改为288 dpi。

1200 DPI版本

图像看起来很清晰,直到大约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后,您必须使用上面列出的代码来显示徽标。

分辨率和比例

请参阅:

答案 1 :(得分:2)

从版本4.0.1开始,应保留光栅图像分辨率,并且在使用其他导出选项(xls,rtf,html等)时也可以提高图表的分辨率。默认值只有非常低的72 dpi。

在iReport选项中&gt; JasperReport属性编辑

net.sf.jasperreports.image.dpi 300

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

答案 2 :(得分:0)

在较新的版本中,您需要通过在 net.sf.jasperreports.image.dpi 文件夹中定义一个 jasperreports.properties 文件来全局配置 WEB-INF/classes/ 属性:

net.sf.jasperreports.image.dpi=300

还需要重启服务器。