5つの異なるSQLクエリを使用してレポートを作成する必要があります。各クエリは1つのレポートテーブルを提供します。
そこで、上記のクエリの1つにそれぞれ対応する5つのjrxmlファイルを、独自の見出し、タイトル設定、フッター、ページ番号などで作成しました。
これで、上記の各jrxmlをコンパイル、印刷、および5つの異なるPDFにエクスポートすることができます。
ただし、クライアントは、すべてのレポートを1つのPDFにまとめることを望んでいます。これは最終的なPDFにあり、最初の4ページはレポート1、次の5ページはレポート2、次にレポート3というようになります。
1)これを達成する方法は?
2)各レポートのページ番号は1/4、2/4、3/4などです。2番目の部分、つまり完全なページ番号は、レポートとしての評価時間で評価されます。したがって、すべてのレポートを単一のpdfで照合する場合(可能な場合)、最終的なpdfに正当化するためにページの番号を付け直すこともできますか?
以下の答えに基づいて、私はJavaクラスで次のことを行い、それは機能します:
try
{
JasperReport jreport1 = JasperCompileManager.compileReport(input1);
JasperPrint jprint1 = JasperFillManager.fillReport(jreport1, new HashMap(), new JREmptyDataSource());
//JasperExportManager.exportReportToPdfFile(jprint, "/home/ashutosh/Desktop/desktop/nikunj/JasperTestApp/output/mytest.pdf");
JasperReport jreport2 = JasperCompileManager.compileReport(input2);
JasperPrint jprint2 = JasperFillManager.fillReport(jreport2, new HashMap(), new JREmptyDataSource());
JasperReport jreport3 = JasperCompileManager.compileReport(input3);
JasperPrint jprint3 = JasperFillManager.fillReport(jreport3, new HashMap(), new JREmptyDataSource());
List<JasperPrint> jprintlist = new ArrayList<JasperPrint>();
jprintlist.add(jprint1);
jprintlist.add(jprint2);
jprintlist.add(jprint3);
JRExporter exporter = new JRPdfExporter();
exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT_LIST, jprintlist);
OutputStream output = new FileOutputStream(new File("/home/ashutosh/Desktop/desktop/nikunj/JasperTestApp/output/mytestbatch.pdf"));
exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, output);
exporter.exportReport();
}catch(Exception e)
{
e.printStackTrace();
}
上:input1、input2、input3は入力jrxmlへの文字列パスです
JRXMLファイルが3つのメッセージを出力する場合:Hello World 1、Hello World 2、Hello World3。
<?xml version="1.0"?>
<!DOCTYPE jasperReport
PUBLIC "-//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport name="Simple_Report">
<detail>
<band height="20">
<staticText>
<reportElement x="180" y="0" width="200" height="20"/>
<text><![CDATA[Hello World One!]]></text>
</staticText>
</band>
</detail>
</jasperReport>
読んでくれてありがとう!
Jasperprintリスト全体をエクスポートすることを利用できます。
List jpList = new ArrayList();
jpList.add(JRLoader.loadObjectFromFile("build/reports/Report1.jrprint"));
...
JRExporter exporter = new JRPdfExporter();
exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT_LIST, jpList);
exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, stream);
exporter.exportReport();
この回答は、JASPER REPORT VERSION> 5.6(最新バージョン)のユーザーを支援するためのものであり、非推奨のコードを削除します。
Jasper-report5.6以降JRPdfExporterParameter.JASPER_PRINT_LIST
is 非推奨 Wojtek Owczarczykの現在のコード answer は:
List<JasperPrint> jpList = new ArrayList<>();
//add your JasperPrint's from loading jrprint or more
//commonly filling report with JasperFillManager.fillReport
JRPdfExporter exporter = new JRPdfExporter();
exporter.setExporterInput(SimpleExporterInput.getInstance(jpList)); //Set as export input
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(stream)); //Set output stream
SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
//set your configuration
exporter.setConfiguration(configuration);
exporter.exportReport();
Itextのないページ番号...
private void drawPageNumbers(List<JasperPrint> listJasperPrint, int totalPages) throws JRException {
int pageCount = 0;
int posY = 0;
int posX = 0;
for (JasperPrint jasperPrint : listJasperPrint) {
if (jasperPrint.getOrientation() == JRReport.ORIENTATION_PORTRAIT) {
posY = 805;
posX = 472;
}
if (jasperPrint.getOrientation() == JRReport.ORIENTATION_LANDSCAPE) {
posY = 558;
posX = 717;
}
for (Object obj : jasperPrint.getPages()) {
pageCount++;
JRPrintPage page = (JRPrintPage) obj;
JRPrintText textTotalPages = new JRTemplatePrintText(new JRTemplateText(
jasperPrint.getOrigins()[0], jasperPrint.getDefaultStyleProvider()));
textTotalPages.setX(posX + 54);
textTotalPages.setY(posY);
textTotalPages.setWidth(40);
textTotalPages.setHeight(16);
textTotalPages.setText(" " + totalPages);
page.addElement(textTotalPages);
JRPrintText textPageNumber = new JRTemplatePrintText(new JRTemplateText(
jasperPrint.getOrigins()[0], jasperPrint.getDefaultStyleProvider()));
textPageNumber.setX(posX);
textPageNumber.setY(posY);
textPageNumber.setWidth(80);
textPageNumber.setHeight(16);
textPageNumber.setText("Página " + pageCount + " de");
page.addElement(textPageNumber);
}
}
return;
}
あなたはこれを試すことができます
JasperPrint jp1 = JasperFillManager.fillReport(reportFile1,reportParams,Connection);
JasperPrint jp2 = JasperFillManager.fillReport(reportFile2,reportParams,Connection);
for (int j = 0; j < jp1.getPages().size(); j++) {
//Add First report to second report
jp2.addPage((JRPrintPage) jp1.getPages().get(j));
}
(iReportの例)
パートI:
パート2)
この概念は私のために働きます。もちろん、パラメータに応じて、さまざまなバンドのオンとオフを切り替えることができます。