我们希望生成报告,嵌入为Web应用程序中的html页面,或者作为pdf下载.因此我遇到了JasperReports,因为它认为它会满足这些要求.
目前我们假设我们的报告将有大约50-100页,几乎只包括直方图和一些表.我们的数据库中的一些昂贵查询会检索数据.
在对它进行评估之后,我对网络应用程序方面有几个疑问.
1)分页:当然我不想在一个网页中显示所有页面.我们需要像分页这样的东西.但JasperReports似乎不支持这种方法.与JasperReports一起提供的wepp演示概述了方法:我必须创建一个JasperPrint,它已经是完整的报告,分配了不需要的内存,并执行了昂贵的查询.然后我可以显示一个页面.但是对于每个页面一次又一次地这样做对我来说并不是一个合适的解决方案.
2)如上所述,我们的报告主要包括图表.在将JasperPrint导出为其输出格式期间生成图像.如果我理解一切正确,那么随JR一起提供的ImageServlet能够检索这些图像
i)从文件系统读取生成的图像
ii)导出器将它们存储在会话中(因此在存储器中).
因为我认为我们将有很多图像ii)不是一个选项,如果我们想要保持webapp的内存占用率低.但另一方面,文件系统充斥文件也不是我能想到的最好的主意.是什么时候删除文件?
我弄错了吗?我的理解是正确的吗?
我必须根据动态提供的各种参数生成报告.在某些上下文中,参数可以为空.例如,从表中的人与ID,姓名,年龄,性别和maritalStatus的领域,我会产生对报告的30岁已婚男性的人.在其他一些时候,可能需要在不考虑年龄的情况下结婚.如果我对这两种情况使用相同的jasper,则第二种情况下的年龄约束将为null.有没有办法管理这种情况?
此外,是否可以动态指定报告中应生成哪些字段?
我想用iReport for MS Excel创建一个报告.
我的报告包括两个子报告.我需要在单独的Excel工作表中的每个子报表,但生成的导出文件包含一个工作表中的所有数据.
我不知道这个选项需要哪些设置.
我正在使用Jaspersoft Studio 5.2,我使用Courier New字体进行了报告,当我将其导出为PDF时,它将字体更改为Arial.
我只使用Studio工具.当我预览报告是可以的,但是当我导出它时就会发生.
如何使用Courier New字体导出我的报告?
我在报告中使用的textField模型:
<textField pattern="dd/MM/yyyy HH:mm:ss">
<reportElement uuid="f50b279a-b480-498f-8af7-be7e23c4b80b" x="415" y="11" width="105" height="10"/>
<textElement>
<font fontName="Courier New" size="8"/>
</textElement>
<textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression>
</textField>
Run Code Online (Sandbox Code Playgroud) 我的 rreport 中有一个文本字段,我在 SpringBoot Maven 应用程序中使用它。文本字段已填充,内容大小可变,我想要一个动态大小的文本框。我正在使用 JasperSoft 设计器来构建报告,并且 JasperReports 版本是 6.11.0。
以下是文本框的代码段
<textField textAdjust="StretchHeight">
<reportElement x="160" y="92" width="330" height="18" uuid="3d60c5f2-9fca-4c15-af62-0753befg4ad6"/>
<textElement markup="rtf"/>
<textFieldExpression><![CDATA[$F{instructions}]]></textFieldExpression>
</textField>
Run Code Online (Sandbox Code Playgroud)
以下是 pom.xml
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.11.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
和错误
2020-01-03 14:16:20.403 INFO 11516 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat-1].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-01-03 14:16:20.403 INFO 11516 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2020-01-03 14:16:20.408 INFO 11516 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 5 ms
2020-01-03 14:16:20.450 ERROR 11516 --- [nio-8080-exec-1] org.apache.commons.digester.Digester : Parse Error at line …Run Code Online (Sandbox Code Playgroud) 我们即将使用Jasper Server Reports版本3.7.0 CE开始开发大量报告.
考虑到报表单元的结构是在数据库中管理iReport还是通过Web前端管理,有没有人对如何最好地管理版本控制有任何建议?
实际上,您可以使用js-import/js-export脚本导入/导出到目录结构,但是您无法直接编辑这些文件iReport.
有没有人有任何指针?
我在我的系统上安装了Cygwin.但是,当我尝试使用gcc命令时,它说:
bash: gcc: command not found
有人能为我提供解决方案吗?
在尝试根据元素字符串长度对数组进行排序时,我遇到了编译错误.我有一套开始,
Set<String> arraycat = new HashSet<String>();
//add contents to arraycat
String[] array = arraycat.toArray(new String[0]);
//array looks like this now:
//array=[cat,cataaaa,cataa,cata,cataaa]
Run Code Online (Sandbox Code Playgroud)
我理想的是要排序到
array=[cat,cata,cataa,cataaa,cataaaa]
Run Code Online (Sandbox Code Playgroud)
所以我有一个类型的比较器
class comp implements Comparator {
public int compare(String o1, String o2) {
if (o1.length() > o2.length()) {
return 1;
} else if (o1.length() < o2.length()) {
return -1;
} else {
return 0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我打电话给上课
Collections.sort(array, new comp());
Run Code Online (Sandbox Code Playgroud)
但是,它抛出了两个编译错误:
comp is not abstract and does not override abstract method compare(java.lang.Object,java.lang.Object) in java.util.Comparator
class comp …Run Code Online (Sandbox Code Playgroud) 我正在使用Jaspersoft Studio开发一些报告.
我有一个应该接受REST查询的Web应用程序,并将它们转换为已编译的报告.
所以我有一些JasperReports罐子包括:
问题是,当我编译我的报告并从Jaspersoft Studio运行时,它运行正常.
但是当我从我的Web应用程序编译并运行它时,它会抛出异常:
net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression :
Source text : CONCATENATE($V{startString}, " - ", $V{endString})
at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:244)
at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:591)
at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:559)
...
Caused by: net.sf.jasperreports.engine.JRRuntimeException: Function CONCATENATE not found
Run Code Online (Sandbox Code Playgroud)
当我CONCATENATE在报告中更改我的呼叫时,它工作正常.
所以这给我留下了一个解决方案,我错过了一个JasperReports罐子,但是哪个?
首先,我在iReport 5.1.0中创建一个R_D1.jrxml文件.
我执行报告的Java代码如下所示:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
public class DbReportFill{
Connection con;
public void generateReport() {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sentiment","root", "abcd");
System.out.println("Filling report...");
JasperFillManager.fillReportToFile("/home/abcd/report/R_D1.jrxml",new HashMap<String, Object> (), con);
System.out.println("Done!");
con.close();
} catch (JRException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new DbReportFill().generateReport();
}
}
Run Code Online (Sandbox Code Playgroud)
当我执行该类时,我得到以下异常:
Filling report...
net.sf.jasperreports.engine.JRException: Error loading object from file …Run Code Online (Sandbox Code Playgroud)