2012-07-19 69 views

回答

2

既然你正在生成的報告,然後合併它,當前頁碼和總頁面僅在導出期間可用,具體取決於您合併的報表數量。我們使用generic elements解決了類似的問題。您需要編寫自定義邏輯來處理您創建的處理程序中的頁碼。

+0

Thnx爲指針。我重寫了JRPdfExporter的exportGenericElement()方法,並添加了一個顯示合併的jasper打印對象總頁面大小的JRPrintText。 – Cid 2012-09-04 07:30:50

+0

嗨Cid..I've同樣的問題..你可以發佈僞代碼來添加JRPrintText。 – 2013-05-28 21:12:32

+0

Balaji Paulrajan:請將僞代碼發送給我如何使用通用元素實現... – 2013-05-28 21:13:51

0

我的報告第1頁(JR1)是人像和第2頁(JR2)景觀。

JasperReport jr1 = (JasperReport) JRLoader.loadObject(...); 
JasperReport jr2 = (JasperReport) JRLoader.loadObject(...); 

JREmptyDataSource ds = new JREmptyDataSource(1); 
JasperPrint print1 = JasperFillManager.fillReport(jr1, new HashMap(), ds); 

ds.moveFirst(); 

JasperPrint print2 = JasperFillManager.fillReport(jr2, new HashMap(), ds); 
List l = new ArrayList(); 

l.add(print1); 
l.add(print2); 

JRPdfExporter exp = new JRPdfExporter(); 
exp.setParameter(JRExporterParameter.JASPER_PRINT_LIST, l); 
exp.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, SAVE_LOCATION); 
exp.exportReport(); 
+0

謝謝,但這種方法存在問題。頁碼不會按順序排列。例如,如果第一個模板中有12個頁面,則第二個頁面的第一個頁面不會顯示,而是顯示Page 1 – Cid 2012-09-03 09:03:53

0

這可能會爲頁碼問題的工作:

私有靜態無效mergeAndNumber()拋出IOException異常,DocumentException {

PdfReader readerOne = new PdfReader("c:\file_one.pdf"«»); 



    // we retrieve the total number of pages 

    int nOne = readerOne.getNumberOfPages(); 



    PdfReader readerTwo = new PdfReader("c:\file_two.pdf"«»); 



    // we retrieve the total number of pages 

    int nTwo = readerTwo.getNumberOfPages(); 



    int totalPages = (nOne + nTwo); 

    System.out.println("Total number of pages: " + (nOne + nTwo)); 



    Rectangle psize = readerOne.getPageSize(1); 

    float widthPort = psize.width(); 

    float heightPort = psize.height(); 



    // step 1: creation of a document-object 

    Document document = new Document(psize, 50, 50, 50, 50); 

    // step 2: we create a writer that listens to the document 

    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("c:\file_combined.pdf"«»)); 



    document.open(); 

    // step 4: we add content 

    PdfContentByte cb = writer.getDirectContent(); 



    PdfImportedPage importPage = null; 



    BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); 

    float pageNumXPos = widthPort; 

    float pageNumYPos = heightPort; 

    for (int i = 1; i <= nOne; i++) { 

     document.newPage(); 

     importPage = writer.getImportedPage(readerOne, i); 

     cb.addTemplate(importPage, 0,0); 



     cb.moveTo(400, 40);   

     cb.beginText(); 

     cb.setFontAndSize(bf, 10); 

     //cb.showText("Page " + i + " of " + totalPages);   

     cb.showTextAligned(PdfContentByte.ALIGN_RIGHT, "Page " + i + " of " + totalPages, pageNumXPos - 45, pageNumYPos - 55, 0); 

     cb.endText(); 

    } 



    document.setPageSize(PageSize.A4.rotate()); 



    for (int i = 1; i <= nTwo; i++) { 

     document.newPage(); 

     importPage = writer.getImportedPage(readerTwo, i); 

     cb.addTemplate(importPage, 0,0); 



     cb.moveTo(400, 40);   

     cb.beginText(); 

     cb.setFontAndSize(bf, 10); 

     cb.showTextAligned(PdfContentByte.ALIGN_RIGHT, "Page " + (nOne + i) + " of " + totalPages, pageNumYPos - 20, pageNumXPos - 60, 0);   

     cb.endText(); 

    } 



    document.close();   

} 
+0

我不想在iText級別進行操作。 Thnx爲您的建議 – Cid 2012-09-04 07:27:25

相關問題