2011-12-19 13 views
17

मैं पाँच अलग अलग एसक्यूएल प्रश्नों का उपयोग करके रिपोर्ट तैयार करना है में कई jrxml Jasper रिपोर्ट मुक़ाबला करने के लिए। प्रत्येक क्वेरी एक रिपोर्ट टेबल देगी।कैसे एक एक एकल पीडीएफ आउटपुट फ़ाइल

इसलिए मैं 5 jrxml फ़ाइलें प्रत्येक इसी लिखा था अपने स्वयं के शीर्षकों, शीर्षक सेटिंग्स, पाद लेख, pagenumbers, आदि

अब के साथ ऊपर क्वेरी से एक के लिए, मैं संकलन, प्रिंट और निर्यात करने के लिए में से प्रत्येक में सक्षम हूँ 5 अलग-अलग पीडीएफ में jrxmls से ऊपर।

हालांकि, ग्राहक चाहता है कि सभी रिपोर्ट एक ही पीडीएफ में एकत्र हो जाएं। वह अंतिम पीडीएफ में है, पहले चार पेज रिपोर्ट एक कहेंगे, अगले पांच पेज दो रिपोर्ट करेंगे, फिर तीन रिपोर्ट करें और इसी तरह आगे।

1) इसे कैसे प्राप्त करें?

2) प्रत्येक रिपोर्ट पेज नंबर है 1/4, 2/4, 3/4 आदि कहाँ अर्थात पूरा पृष्ठ संख्या दूसरे भाग रिपोर्ट के रूप में मूल्यांकन समय के साथ मूल्यांकन किया जाता है के रूप में। तो जब मैं एक पीडीएफ (यदि संभव हो) के अंतर्गत सभी रिपोर्ट मुक़ाबला होगा, यह भी संभव फिर से नंबर करने के लिए अंतिम पीडीएफ के औचित्य में पृष्ठों हो जाएगा?

नीचे जवाब के आधार पर, मैं अपने जावा वर्ग में निम्नलिखित किया था और यह काम करता है:

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

ऊपर: इनपुट 1, इनपुट 2, इनपुट 3 की स्ट्रिंग पथ इनपुट jrxmls

मेरे JRXML फ़ाइलों के लिए कर रहे हैं बस तीन संदेशों को मुद्रित करें: हैलो वर्ल्ड 1, हैलो वर्ल्ड 2, हैलो वर्ल्ड 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> 

पढ़ने के लिए धन्यवाद!

+0

एलेक्स कश्मीर का जवाब अच्छा है। आपको व्यक्तिगत रिपोर्ट को एक मास्टर रिपोर्ट के उप-रिपोर्ट में डालकर आप जो भी चाहते हैं उसे प्राप्त करने में सक्षम होना चाहिए। यह अधिक काम करेगा, लेकिन यह आपको पेज नंबरिंग आवश्यकता को संभालने की अनुमति देगा। आपको निश्चित रूप से इसके लिए वोट देना चाहिए। यह वही होगा जो आप वर्णन कर रहे हैं: http://jasperforge.org/projects/jasperreports/tracker/view.php?id=4178 – mdahlman

उत्तर

13

आप पूरी jasperprint सूची निर्यात का लाभ ले सकते: iText बिना

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(); 
+1

@NikunjChauhan नमूना [यहां है] (http://jasperforge.org/uploads/ प्रकाशित/jasperreportswebsite/ट्रंक/sample.reference/batchexport/index.html)। JasperReports वितरण पैकेज से फ़ोल्डर 'डेमो \ नमूने \ batchexport' फ़ोल्डर। –

+0

@Wojtek ओ: जेपीलिस्ट को परिभाषित करने के लिए कैसे ?? क्या यह jprint वस्तुओं की एक साधारण सूची है? – Nik

+0

@AlexK: क्या आप कृपया लिंक पेस्ट कर सकते हैं ... यह नहीं है .. धन्यवाद! – Nik

1

पृष्ठ संख्या ...

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; 
} 
0

(iReport उदाहरण)

भाग I:

  • एक नया खाली जैस्पर बनाने विभिन्न रिपोर्टों
  • डेटा एडाप्टर = एक खाली रिकार्ड के लिए एक आवरण रिपोर्ट के रूप में रिपोर्ट - खाली पंक्तियाँ
  • क्लिक "नया ..."
  • "खाली पंक्तियाँ"
  • "अगला" क्लिक
  • की
  • संख्या चुन खाली रिकॉर्ड्स = 1 (इसलिए आप रिकॉर्ड पर अनुकरण करेंगे और केवल एक विस्तार बैंड मुद्रित किया जाएगा)
  • इसलिए रिक्त रिपोर्ट तैयार है जब आप इस रिपोर्ट को अपने जावा प्रोग्राम से बाहर कहते हैं, तो पहले डेटाबेस से डेटा कनेक्शन खोलें और पृष्ठभूमि में इस कनेक्शन का आदान-प्रदान करें। हमारे आवरण रिपोर्ट के subreports मानकों के माध्यम से इस संबंध वारिस कर सकते हैं!

भाग 2)

  • हर के लिए जोड़ने की रिपोर्ट आप एक नया विस्तार बैंड एम्बेड करना चाहते हैं।
  • प्रत्येक विस्तार बैंड एक subreport
  • हमारे आवरण रिपोर्ट

इस अवधारणा के subreport परिभाषा संपत्ति को "सही" "नीचे करने के लिए चलाने के" सेट (बेशक अन्य स्टैंडअलोन रिपोर्ट का लिंक) शामिल हैं मेरे लिये कार्य करता है। पैरामीटर के आधार पर , आप निश्चित रूप से विभिन्न बैंड को चालू या बंद कर सकते हैं।

+0

मुझे लगता है कि ओपी एक प्रोग्रामेटिक दृष्टिकोण की तलाश में है ... –

4

इस उत्तर JASPER की रिपोर्ट संस्करण> 5.6 (नवीनतम संस्करण) के साथ उपयोगकर्ताओं को मदद करने के लिए है, इसलिए पदावनत कोड को दूर है।

जैस्पर-रिपोर्ट 5.6 JRPdfExporterParameter.JASPER_PRINT_LIST के बाद से deprecated है 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(); 
+0

नोट: सर्वोत्तम गुणवत्ता वाले निर्यात (जेआर ग्राफिक्स 2DExporter) कई जेस्परप्रिंट के साथ काम नहीं करता है। रेफरी: JRGraphics2DExporter का स्रोत कोड – Topera

संबंधित मुद्दे