Comment compiler plusieurs rapports JRXML jasper dans un seul fichier pdf

je dois préparer des rapports en utilisant cinq requêtes sql différentes. Chaque requête donnera une table de rapport.

J'ai donc écrit 5 fichiers jrxml correspondant chacun à l'une des requêtes ci-dessus avec leurs propres titres, Paramètres de titre, pieds de page, numéros de page, etc.

maintenant, je suis capable de compiler, imprimer et exporter chacun des jrxmls ci-dessus dans 5 pdf différents.

cependant, le client veut que tous les rapports soient collationnés en un seul pdf. C'est dans le pdf final, première quatre pages sera-dire un rapport, cinq prochaines pages, deux, puis trois et ainsi de suite et ainsi de suite.

1) Comment faire ?

2) chaque rapport porte le numéro de page 1/4, 2/4, 3/4, etc. Où la deuxième partie, c'est-à-dire le numéro complet de la page, est évaluée avec le temps d'évaluation comme rapport. Ainsi, lorsque je rassemblerai tous les rapports en pdf unique (si possible), sera-t-il également possible de numéroter les pages de justification en pdf final ?

sur la Base de la réponse ci-dessous, j'ai fait ce qui suit dans ma classe de java et cela fonctionne:

 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();
            }

ci-dessus: input1, input2, input3 sont des chemins de chaîne pour entrer jrxmls

où mes fichiers JRXML viennent d'imprimer trois messages: Hello World 1, Hello World 2, Hello World 3.

 <?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>

Merci d'avoir lu!

17
demandé sur Alex K 2011-12-19 20:17:04

4 réponses

Vous pouvez profiter de l'exportation de toute la liste 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();
13
répondu Wojtek Owczarczyk 2013-03-29 12:01:50

Cette réponse est d'aider les utilisateurs avec JASPER REPORT VERSION > 5.6 (dernière versions), donc supprimer le code déprécié.

Depuis jasper-rapport 5.6 JRPdfExporterParameter.JASPER_PRINT_LIST deprecated le code actuel de Wojtek Owczarczyk réponse est:

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();
5
répondu Petter Friberg 2017-05-23 10:29:59

numéros de Page sans 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;
}
1
répondu Eduardo Beninca 2014-12-11 15:34:32

(iReport exemple)

Partie I:

  • créer un nouveau vide jasper rapport de l'enveloppe de rapports pour les différents rapports
  • adaptateur de données = Un enregistrement vide - Lignes Vides
  • cliquez sur "Nouveau..."
  • choisir "lignes vides"
  • cliquez sur "suivant"
  • nombre d'enregistrements vides = 1 (donc vous simulerez sur l'enregistrement et une seule bande de détail sera imprimée)
  • ainsi le rapport vierge est prêt Quand vous appelez ce rapport à partir de votre programme JAVA, ouvrez d'abord une connexion de données à la base de données et échangez cette connexion en arrière-plan. Les sous-rapports de notre rapport wrapper peuvent hériter de cette connexion via des paramètres!

Partie 2)

  • ajouter pour chaque rapport que vous souhaitez intégrer une nouvelle bande de détail.
  • chaque bande de détail contient un sous-rapport (lien vers l'autre rapport autonome bien sûr)
  • définir la propriété "exécuter en bas" à "True" dans le sous-état définition de notre rapport wrapper

ce concept fonctionne pour moi. en fonction des paramètres, vous pouvez bien sûr activer ou désactiver différentes bandes.

0
répondu Vanden 2015-09-12 20:05:32