gpt4 book ai didi

java - 如何在将现有模板加载到 JasperDesign 中然后更改它时更改页面大小/格式?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:39:27 25 4
gpt4 key购买 nike

我从这个 post 提出这个问题.我不确定是否应该创建一个新问题,因为我似乎已经在创建一个新主题了?预先为此道歉。

所以这是我的问题:

我正在尝试动态更改报告的格式(读书报告,有多个页面或部分或子报告)。我正在做的是首先将它从现有模板加载到 JasperDesign Object holder 中。然后,修改页面本身的大小和其他参数。稍后,我将编译并尝试使用编译文件打印PDF格式的报告。最终,我想用我可以指定的格式为每个单独的页面打印一个包含不同页面和不同模板的漏洞报告。

这是我所做的。我能够将主报告指向其他单独的页面格式。所以,当我将报告导出为 PDF 时,一切看起来都很好(就像你可能想象的那样,到达那里并不那么简单。但现在正在工作)。所以现在我想在运行时为读书报告的每一页参数化格式(A4、LETTER 等)。

这可能吗?我的意思是动态地执行此操作,而不是为每个页面和格式创建一个新的静态模板,然后创建维护问题?如果是这样,这样做的方式是什么?

这是我用于检索 JasperDesing 对象模板的代码:

private static JasperDesign getTemplateDesign(String templatePath) throws JRException{

JasperDesign design = JRXmlLoader.load(templatePath);

logger.info("Setting Page Dimessions Format to: " + pageFormat);
if(JRDriver.pageFormat.equals("A3")){
JRDriver.pageWidth=842;
JRDriver.pageHeight=1190;
JRDriver.columnCount=1;
JRDriver.columnWidth=802;
JRDriver.columnSpacing=0;
JRDriver.leftMargin=20;
JRDriver.rightMargin=20;
JRDriver.topMargin=30;
JRDriver.bottomMargin=30;
}
else if (JRDriver.pageFormat.equals("A4")) {
JRDriver.pageWidth=842;
JRDriver.pageHeight=1190;
JRDriver.columnCount=1;
JRDriver.columnWidth=555;
JRDriver.columnSpacing=0;
JRDriver.leftMargin=20;
JRDriver.rightMargin=20;
JRDriver.topMargin=30;
JRDriver.bottomMargin=30;
}
else if (JRDriver.pageFormat.equals("LETTER")) {
JRDriver.pageWidth=612;
JRDriver.pageHeight=792;
JRDriver.columnCount=1;
JRDriver.columnWidth=517;
JRDriver.columnSpacing=0;
JRDriver.leftMargin=20;
JRDriver.rightMargin=20;
JRDriver.topMargin=30;
JRDriver.bottomMargin=30;
}
//Setting twmplate dimesions
design.setPageWidth(JRDriver.pageWidth);
design.setPageHeight(JRDriver.pageHeight);

design.setColumnCount(JRDriver.columnCount);
design.setColumnWidth(JRDriver.columnWidth);
design.setColumnSpacing(JRDriver.columnSpacing);

design.setLeftMargin(JRDriver.leftMargin);
design.setRightMargin(JRDriver.rightMargin);
design.setTopMargin(JRDriver.topMargin);
design.setBottomMargin(JRDriver.bottomMargin);

return design;
}

这是我生成 PDF 报告的代码片段:

...

logger.info("Retrieving Design Template..." + reportTemplatePath);
JasperDesign design= getTemplateDesign(reportTemplatePath);

//jasperReport = JasperCompileManager.compileReport(reportTemplatePath);
jasperReport = JasperCompileManager.compileReport(design);

logger.info("Filling Report...");
jasperPrint = JasperFillManager.fillReport(jasperReport, jasperParameter,new JREmptyDataSource() );//new JREmptyDataSource()


jasperPrint.setPageWidth(JRDriver.pageWidth);
jasperPrint.setPageHeight(JRDriver.pageHeight);

//Create the file dir
File file = new File(reportOuputPath);
file.getParentFile().mkdirs();
//file.delete();

logger.info("Writing PDF..." + reportOuputPath);
JasperExportManager.exportReportToPdfFile(jasperPrint, reportOuputPath);

...

我可以包含我的 JRXML 静态模板文件的信息。但我认为目前没有必要。如果您不这么认为,也可以这样做

请帮助我并提前致谢

最佳答案

您好,感谢您的快速回答。我找不到如何对您的回答发表评论,所以我想我必须将其包含在这篇文章中。

首先,您关于不保证整个页面布局调整大小的说法是正确的,只需更改页面尺寸即可。但是,我要更改的格式非常相似(A4 和 LETTER),因此对组件和字段大小本身的影响并不大。

此外,我必须做的是,要实际更改书籍格式的每个单独的页面,首先将每个单独的页面加载到 JasperDesing Object holder 中,然后将其保存,并将修改后的大小保存到 jasper 字段中,即将在填充过程中使用。而不是仅仅为报告书页面本身这样做。

代码如下:

    private static JasperDesign getPageTemplateDesign(String templatePath) throws JRException{

logger.info("Setting format page desing for Template: " + templatePath);

JasperDesign design = JRXmlLoader.load(templatePath);

logger.info("Setting Page Dimessions Format to: " + pageFormat);
if (JRDriver.pageFormat.equals("A4")) {
JRDriver.pageWidth=595;
JRDriver.pageHeight=842;
JRDriver.columnCount=1;
JRDriver.columnWidth=555;
JRDriver.columnSpacing=0;
JRDriver.leftMargin=20;
JRDriver.rightMargin=20;
JRDriver.topMargin=20;
JRDriver.bottomMargin=20;
}
else if (JRDriver.pageFormat.equals("LETTER")) {
JRDriver.pageWidth=612;
JRDriver.pageHeight=792;
JRDriver.columnCount=1;
JRDriver.columnWidth=517;
JRDriver.columnSpacing=0;
JRDriver.leftMargin=20;
JRDriver.rightMargin=20;
JRDriver.topMargin=20;
JRDriver.bottomMargin=20;
}
//Setting twmplate dimesions
design.setPageWidth(JRDriver.pageWidth);
design.setPageHeight(JRDriver.pageHeight);

design.setColumnCount(JRDriver.columnCount);
design.setColumnWidth(JRDriver.columnWidth);
design.setColumnSpacing(JRDriver.columnSpacing);

design.setLeftMargin(JRDriver.leftMargin);
design.setRightMargin(JRDriver.rightMargin);
design.setTopMargin(JRDriver.topMargin);
design.setBottomMargin(JRDriver.bottomMargin);

return design;
}

private static void reformattingPageTemplate(String path) throws JRException{

logger.info("Getting Design Template from: " + path);
JasperDesign design= getPageTemplateDesign(path);

String destFile=path.replaceAll("jrxml", "jasper");
logger.info("Compiling Re-formated Design Template to: " + destFile);
JasperCompileManager.compileReportToFile(design, destFile);
}

private static void formattingALLPage() throws JRException{

reformattingPageTemplate(reportBookPagesDir + "/FrontCover.jrxml");
reformattingPageTemplate(reportBookPagesDir + "/Copyright.jrxml");
reformattingPageTemplate(reportBookPagesDir + "/TableOfContent.jrxml");
reformattingPageTemplate(reportBookPagesDir + "/Summary.jrxml");
reformattingPageTemplate(reportBookPagesDir + "/Content.jrxml");
reformattingPageTemplate(reportBookPagesDir + "/AppendixWarnings.jrxml");
reformattingPageTemplate(reportBookPagesDir + "/Index.jrxml");
reformattingPageTemplate(reportBookPagesDir + "/BackCover.jrxml");
//reformattingPageTemplate(reportTemplatePath);
}

感谢帮助

关于java - 如何在将现有模板加载到 JasperDesign 中然后更改它时更改页面大小/格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35805339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com