在ant中,如何编译.jrxml文件以获取.jasper?
两者都是可视化设计报告的工具,两者都来自同一供应商.
为什么Jaspersoft推出两种类似的技术?
根据向Jaspersoft Studio添加自定义数据源,能够将java bean中的自定义数据源添加到报表之后,我将使用jasper进入报表的第二点.
我有一个主报告,它使用数据库作为其数据源.然后我将一个bean.xml数据源添加到报表中,并将一个表添加到主报表中,该报表使用此bean.xml数据源来获取java bean.
我的目标是从主报表中获取字段值并操纵其值,然后用这些值填充bean,最后用bean填充表.
为此,我编写了3个类,我在表数据集中用作Scriptlet:
问题出在FillTable类中,当我说我String kNFormelGG = (String) this.getParameterValue("gg");创建的bean.xml与测试连接失败时java.lang.reflect.InvocationTargetException
Caused by: java.lang.NullPointerException
at net.sf.jasperreports.engine.JRAbstractScriptlet.getParameterValue(JRAbstractScriptlet.java:95)
at net.sf.jasperreports.engine.JRAbstractScriptlet.getParameterValue(JRAbstractScriptlet.java:86)
at org.iqtig.reporting.dataSource.bean.dataSourceXML.FillTable.fillTable(FillTable.java:45)
at org.iqtig.reporting.dataSource.bean.dataSourceXML.JRDataSourceFactory.createCollection(JRDataSourceFactory.java:27)
... 34 more
Run Code Online (Sandbox Code Playgroud)
如果我分配一个修复值,如String kNFormelGG ="Test me"bean连接遇到没有错误,并在将bean.xml指定为Dataset1中的默认数据适配器的值后,它将使用静态值填充表.如何从主报表数据源动态获取参数或值中的数据并在bean中使用它?我有这样的假设:在从我的适配器调用静态工厂类时,字段仍然是空的.也许我错了,但我没有找到任何其他声明来解决这个问题.
BeanFactory类
import java.util.Collection;
import net.sf.jasperreports.engine.JRDefaultScriptlet;
import net.sf.jasperreports.engine.JRScriptletException;
/**
* Factory for TableCellsBean Klasse
*
* @author iman.gharib
*/
public class JRDataSourceFactory extends JRDefaultScriptlet {
/**
* @return collection der TableCellsBean Objekten
* @throws JRScriptletException
*/
public …Run Code Online (Sandbox Code Playgroud) 我试图通过传递自定义数据源来填充表.我创建了一个包含表格的简单报告.报告它自己从ms sql数据库获取数据.我编写了一个类似于本例中的类的java类.但我在桌上没有任何价值.在该示例中没有scriptlet.我检查了(String) this.getFieldValue("KN_FormelGG"); 代码行.它从字段中获取数据并可以在报告中显示.所以我猜bean数据源没有填充.我在a中调用了填充表方法afterGroupInit.如何在jasper中使用java中的数据集合?我也尝试在数据集和查询对话框中添加java bean ,但它也没有帮助我.我应该将scriptlet添加到子报表/表吗?我的问题的主要重点是在scriptlet中具有自定义数据源.我解决了另一个问题,但我仍然没有得到答案.我添加$P{FieldDataSource}.getData()了检查数据,但它提供了null.
java class 1:
package testProjektIman.scriptlets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.jasperreports.engine.JRDefaultScriptlet;
import net.sf.jasperreports.engine.JRScriptletException;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class FillTable extends JRDefaultScriptlet {
@Override
public void afterGroupInit(final String id)
throws JRScriptletException {
fillTable();
}
public ArrayList<String> splitGGArray(final String kNFormelGG) {
ArrayList<String> fieldNames = new ArrayList<>();
String[] array = (kNFormelGG.split(" "));
for (String sub : array) {
fieldNames.add(sub);
}
return …Run Code Online (Sandbox Code Playgroud) 我正在使用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) 我想在TextField表达式中使用lambda表达式,如下所示:
Arrays.asList($F{field1}, $F{field2}, $F{field3}).stream().filter(i -> i != null).collect(java.util.stream.Collectors.joining(" / "))
Run Code Online (Sandbox Code Playgroud)
假设这些字段的值:
$F{field1} = 1
$F{field2} = null
$F{field3} = 2
Run Code Online (Sandbox Code Playgroud)
TextField评估的预期结果是:
1 / 2
Run Code Online (Sandbox Code Playgroud)
而不是我在IDE中收到错误:
Lambda expressions are allowed only at source level 1.8 or above
Run Code Online (Sandbox Code Playgroud)
这是编译期间IDE内部的异常:
net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file:
1. Lambda expressions are allowed only at source level 1.8 or above
value = "Contato: " + Arrays.asList(((java.lang.String)field_c_telefone.getValue()), ((java.lang.String)field_c_celular.getValue()), ((java.lang.String)field_c_fax.getValue()), ((java.lang.String)field_c_email.getValue())).stream().filter(i -> i != null).collect(java.util.stream.Collectors.joining(" / ")); //$JR_EXPR_ID=22$
<------------>
2. Lambda expressions are …Run Code Online (Sandbox Code Playgroud) 场景:
我有两个报告:主报告(让我们称之为A)和子报告(让我们称之为B).
报告A在详细信息带中包含子报告B,因此在报告A数据源中为每个元素显示子报告B. 子报告B还将一个变量返回到主报告A.
我想要的是将子报告B中的返回值相加并在主报告摘要中对它们进行总计.
为此,我尝试创建一个新的报表变量,将这些返回值相加...这样的事情:

但是,我发现在渲染波段细节之前总会评估这样的变量表达式,所以我总是会错过第一个子报表返回值...
可悲的是,评估时间(正如这个链接所说)不能在这些变量上改变,所以我被卡住了......
背景:Jaspersoft studio 6.2
如何根据表达式更改文本字段的前景色。
如何应用表达式以使字体颜色(前景色)基于该字段中的值?我找不到任何地方可以设置 forecolor 属性的表达式。
我需要添加 commons-lang3 和 commons-math3 以便我可以在报告中生成中位数。我已经下载了这些文件,但是如何将它们添加到类路径中以便 jaspersoft studio 可以引用它?
我正在使用 Jaspersoft Studio Professional 5.6.1
我尝试进入项目资源管理器并右键单击该项目,但没有类路径选项。
这不是在 jaspersoft studio 中使用外部 JAR 文件的重复,因为解决方案建议:right click on project folder > properties > java build path > libraries > add External JARs..对我来说似乎不是一个选项。
谢谢!
我正在构建一个依赖于各种模块的复杂项目.为了导出为PDF,我使用JasperReport API并开发报告,我使用的是Jaspersoft Studio,版本6.4.0.
在避免重复查询的方法中,我通过参数将所有数据发送到报表,此参数的类型是自定义bean.那些bean包含在另一个项目中(必须如此,因为这些bean正在另一个应用程序的视图层中使用).当我直接在Jaspersoft Studio项目中将这些bean作为".jar"文件中包含的jar库依赖项导入时,报表编译完美.
现在我正在尝试使用Maven来包含这些依赖项,但Jaspersoft Studio不包含Maven库,我不能这样做.
我已经尝试从存储库安装maven(http://download.eclipse.org/technology/m2e/releases),但这不起作用:
帮助>安装新软件> ...
它告诉我需要更多捆绑,我手动安装了很多捆绑但总是需要更多,我不知道这是否可行.
有人在Jaspersoft Studio中完成了Maven配置吗?如果是这样,我将很高兴知道如何.我还可以在使用Maven管理依赖项时使用其他选项