我读过没有办法使用 iReport 本地处理混合方向,但是阅读文档我想知道是否可以通过使用JRDefaultScriptlet 的 beforePageInit()以某种方式完成。在我的例子中,有一个纵向首页,与填充它们的数据一样多的横向页面,以及最后一个首页。
另一方面,有人知道:
- 如果这是在不久的将来支持的功能
- 如果有替代方案可以按要求执行并生成符合 jasper 的 xml 文件
提前致谢。
我读过没有办法使用 iReport 本地处理混合方向,但是阅读文档我想知道是否可以通过使用JRDefaultScriptlet 的 beforePageInit()以某种方式完成。在我的例子中,有一个纵向首页,与填充它们的数据一样多的横向页面,以及最后一个首页。
另一方面,有人知道:
提前致谢。
所以我决定玩弄 iReport 看看有什么选择。事实证明,通过一些努力和想象力,这是有可能实现的。这是假设您的第一页在标题部分,最后一页在摘要部分。
以横向模式创建您的报告。
在 iReport 中的 Report Properties 下设置Title on New Page
并设置Summary on New Page
为 true。
假设您使用的是标准 8.5" X 11" Letter 大小的页面,所有边距都设置为 20,请将 Title 和 Summary 部分的高度设置为 572。
将您的静态文本字段添加到适当的部分。
现在对于每个静态文本字段,您需要将Rotate
属性设置为Left
(实际上可能是Right
,关键是它们都需要相同。
当然,将您想要的所有其他字段添加到页眉、数据等的相应区域中。
导出您的报告。
注意:如果您有任何图像需要进入标题或摘要部分,您需要在 iReport 之外适当地旋转它们并保存。然后将旋转后的图像设置为报表中的图像。不幸的是,图像标签似乎没有旋转属性,因为这会使生活变得轻松。
此外,如果您不设置步骤 2 中列出的属性,您将无法将标题和摘要带的高度设置为适当的宽度。如果您使用不同尺寸的纸张和/或边距,计算最大尺寸(这是您需要的)的简单方法是将带的高度设置为一个非常大的数字。然后它会弹出并告诉你它太大了,以及实际的最大尺寸是多少。
不支持横向和纵向混合子报表,将来他们将添加一个对象调用 JasperBook 或类似的东西,您可以在其中添加不同方向的不同子报表而不会出现问题,但目前您可以通过执行不同的报表来模拟它和在展示它们之前加入它们。
IE
//分别创建报表
InputStream report1 = (InputStream) getClass().getResourceAsStream("/com/app/jasper/reportPortrait.jasper");
InputStream report2 = (InputStream) getClass().getResourceAsStream("/com/app/jasper/reportLandscape.jasper");
InputStream report3 = (InputStream) getClass().getResourceAsStream("/com/app/jasper/reportPortrait.jasper");
JasperPrint jasperPrint = JasperFillManager.fillReport(report, map, conn);
JasperPrint jasperPrint2 = JasperFillManager.fillReport(report2, map, conn);
JasperPrint jasperPrint3 = JasperFillManager.fillReport(report3, map, conn);
JRPdfExporter exp = new JRPdfExporter();
//将 JasperPrint 对象添加到 ArrayList
List list = new ArrayList();
list.add(jasperPrint);
list.add( jasperPrint2 );
list.add(jasperPrint3);
//并告诉出口商加入报告列表。
exp.setParameter(JRPdfExporterParameter.JASPER_PRINT_LIST, list);
exp.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
exp.exportReport();
我在我的报告中这样做并且它有效。祝你好运!