Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在跨多个页面的动态报告中添加多个图像_Java_Dynamic Reports - Fatal编程技术网

Java 如何在跨多个页面的动态报告中添加多个图像

Java 如何在跨多个页面的动态报告中添加多个图像,java,dynamic-reports,Java,Dynamic Reports,我正在使用DynamicReports为我的Java Tomcat web应用程序创建PDF报告。我需要生成的报告包括几个静态图像。我已成功地将图像添加到页眉和摘要栏中。但是,如果图像的数量超过了一个页面上可以显示的数量,应用程序将抛出JRValidateException,report design not valid:摘要部分和页边距与页面高度不匹配 以下是我的代码导入语句: import java.util.ArrayList; import java.util.Iterator; imp

我正在使用DynamicReports为我的Java Tomcat web应用程序创建PDF报告。我需要生成的报告包括几个静态图像。我已成功地将图像添加到页眉和摘要栏中。但是,如果图像的数量超过了一个页面上可以显示的数量,应用程序将抛出JRValidateException,report design not valid:摘要部分和页边距与页面高度不匹配

以下是我的代码导入语句:

import java.util.ArrayList;
import java.util.Iterator;
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths;

import static net.sf.dynamicreports.report.builder.DynamicReports.*;
import net.sf.dynamicreports.examples.Templates;
import net.sf.dynamicreports.jasper.builder.JasperReportBuilder;
import net.sf.dynamicreports.jasper.builder.export.JasperXlsExporterBuilder;
import net.sf.dynamicreports.jasper.constant.JasperProperty;
import net.sf.dynamicreports.report.base.expression.AbstractSimpleExpression;
import net.sf.dynamicreports.report.builder.column.TextColumnBuilder;
import net.sf.dynamicreports.report.builder.component.ComponentBuilder;
import net.sf.dynamicreports.report.builder.component.HorizontalListBuilder;
import net.sf.dynamicreports.report.builder.component.HorizontalListCellBuilder;
import net.sf.dynamicreports.report.builder.component.ImageBuilder;
import net.sf.dynamicreports.report.builder.component.SubreportBuilder;
import net.sf.dynamicreports.report.builder.component.VerticalListBuilder;
import net.sf.dynamicreports.report.builder.style.FontBuilder;
import net.sf.dynamicreports.report.builder.style.StyleBuilder;
import net.sf.dynamicreports.report.constant.PageOrientation;
import net.sf.dynamicreports.report.constant.PageType;
import net.sf.dynamicreports.report.datasource.DRDataSource;
import net.sf.dynamicreports.report.definition.ReportParameters;
import net.sf.dynamicreports.report.definition.component.DRIListCell;
import net.sf.dynamicreports.report.exception.DRException;
import net.sf.jasperreports.renderers.Renderable;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.renderers.Renderable;
import net.sf.jasperreports.renderers.SimpleDataRenderer;
以下代码适用于适合一页的一些图像:

// Initialize a vertical list of images components.
VerticalListBuilder displayImages = cmp.verticalList();
for (int i = 0; i < imagePaths.size(); i++) {
    displayImages.add(createImageComponent("/path/to/image.jpg"));
}

// Create the body of the report.
jasperReportBuilderPdf = net.sf.dynamicreports.report.builder.DynamicReports.report();
jasperReportBuilderPdf
    .setTemplate(Templates.reportTemplate)
    .setTextStyle(stl.style())
    .setPageFormat(PageType.A4, PageOrientation.LANDSCAPE)
    .pageFooter(Templates.footerComponent)
    .summary( displayImages)
    //  .show()
;

// Create the image component with some other text.
private ComponentBuilder<?, ?> createImageComponent(String imagePath) {
    
    Path currentRelativePath = Paths.get("");
    String s = currentRelativePath.toAbsolutePath().toString();
    
    HorizontalListBuilder imageComponent = cmp.horizontalList();
    StyleBuilder imageStyle = stl.style(stl.pen1Point()).setPadding(10);
    imageComponent.setStyle(imageStyle);
    
    try {
        URL url = new URL("file://" + imagePath);
        byte[] bytes = JRLoader.loadBytes(url);
        Renderable imageRender = new SimpleDataRenderer(bytes, null);
        
        ImageBuilder image = cmp.image(imageRender).setFixedWidth(120);
        imageComponent.add(cmp.hListCell(image));
        imageComponent.add(cmp.horizontalGap(10));

        StyleBuilder boldStyle = stl.style().bold();
        VerticalListBuilder content = cmp.verticalList(
            cmp.text("Path:").setStyle(boldStyle)
            ,cmp.text(imagePath)
            )
        ;

        imageComponent.add(content);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return imageComponent;
}
//初始化图像组件的垂直列表。
VerticalListBuilder displayImages=cmp.verticalList();
对于(int i=0;i
我还尝试添加图像作为数据源。但是,PDF文件中只显示处理图像的Java对象的类名。这是代码:

// Initialize the report.
jasperReportBuilderPdf.setColumnTitleStyle(Templates.columnTitleStyle)
    .title(spreadsheetHeaderBuilder)
    .setTemplate(Templates.reportTemplate)
    .setPageFormat(PageType.A4, PageOrientation.LANDSCAPE)  
;

// Create the columns.
TextColumnBuilder<String>[] columns = new TextColumnBuilder[2];
columns[0] = col.column("Label", "Label", type.stringType());
columns[1] = col.column("Label", "Value", type.stringType());

// Add the columns and images to the report.
jasperReportBuilder.columns(columns);
jasperReportBuilder.setDataSource(createDataSource());
jasperReportBuilderPdf.pageFooter(Templates.footerComponent);

// Create the list of images to show.
private JRDataSource createDataSource() {
    dataSource = new DRDataSource("Label", "Value");

    String absoluteFilePath = "/path/to/file.jpg";
    try {
        java.net.URL myResource = new java.net.URL("file://" + absoluteFilePath);
        byte[] myBytes = JRLoader.loadBytes(myResource);
        Renderable image = new SimpleDataRenderer(myBytes, null);

        ImageBuilder cmpImage = cmp.image(image).setHeight(500);
        HorizontalListCellBuilder cell = cmp.hListCell(cmpImage).heightFixedOnMiddle();
        DRIListCell listCell = cell.build();

        // This is where I am trying to add the image but get a class name instead.
        dataSource.add(createDataRow("caption that displays properly", listCell));
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    return dataSource;
}
//初始化报告。
jasperReportBuilderPdf.setColumnTitleStyle(Templates.columnTitleStyle)
.标题(电子表格表头生成器)
.setTemplate(Templates.reportTemplate)
.setPageFormat(PageType.A4,PageOrientation.横向)
;
//创建列。
TextColumnBuilder[]columns=新建TextColumnBuilder[2];
columns[0]=col.column(“Label”,“Label”,type.stringType());
columns[1]=col.column(“Label”,“Value”,type.stringType());
//将列和图像添加到报告中。
jasperReportBuilder.columns(columns);
setDataSource(createDataSource());
jasperReportBuilderPdf.pageFooter(Templates.footerComponent);
//创建要显示的图像列表。
私有JRDataSource createDataSource(){
数据源=新的DRDataSource(“标签”、“值”);
字符串absoluteFilePath=“/path/to/file.jpg”;
试一试{
java.net.URL myResource=新的java.net.URL(“文件:/”+绝对文件路径);
byte[]myBytes=JRLoader.loadBytes(myResource);
可渲染图像=新的SimpleDataRenderer(myBytes,null);
ImageBuilder cmpImage=cmp.image(image).setHeight(500);
HorizontaListCellBuilder单元格=cmp.hListCell(cmpImage).heightFixedOnMiddle();
DRIListCell-listCell=cell.build();
//这就是我试图添加图像的地方,但是得到了一个类名。
add(createDataRow(“正确显示的标题”,listCell));
}捕获(例外情况除外){
例如printStackTrace();
}
返回数据源;
}
我没有成功地将图像添加到报告的详细栏中

有没有一种方法可以使用DynamicReports在PDF文件中显示多页图像