JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java Tools  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友   
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 jasper report 無法同時輸出兩個報表
Hkun





發文: 4
積分: 0
於 2016-07-08 08:58 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
小弟剛出社會,進公司第一次接觸jasper report

公司想要做出一個A3報表列印工具,雙面都不同報表,但要同時以雙面列印方式印出

但經過各方嘗試後,發現jasper 一個檔案並無法同時產生兩個不同報表,也就是封面報表與背面報表是兩個檔案

有想過用detail1.2 ,這樣但只有輸出成excel檔案才能同時產生,但是用excel欄位與排版會跑掉

也有想過乾脆版面用A1輸出後再分割,但是用過小冊子功能還是許多網友推薦的Acrobat ,都沒辦法順利成功

也有想過用兩個pdf來合併奇數偶數頁面雙面列印,Acrobat上也找不到這種功能

目前沒有用任何java語言,因為不知道該如何下手,儘管爬一堆文章,也不知道要用什麼方法解決問題,有看過人家

說列印方面的寫法與儲存檔案的寫法,但還是不知道該怎麼解決我的問題

希望大家可以指點一下

第一次發文,如果有違反規則,請見諒


reply to postreply to post
作者 Re:jasper report 無法同時輸出兩個報表 [Re:Hkun]
snowbean71





發文: 92
積分: 0
於 2016-07-08 11:44 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
如果你只是要將二個檔案的PDF 交互交叉 A1,B1,A2,B2,A3,B3....
我想用Acrobat 自已做苦工編輯一下,應該是能做到的

至於用程式,好記得也成http://stackoverflow.com/questions/5941715/how-to-merge-different-documents-into-single-one


reply to postreply to post
javabean71.....snowbean71......JSF+JPA+Primefaces
作者 Re:jasper report 無法同時輸出兩個報表 [Re:snowbean71]
Hkun





發文: 4
積分: 0
於 2016-07-08 12:01 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我希望的就是可以A1,B1.....,這樣才能雙面列印,不是嗎

我嘗試用Acrobat,但是合併要慢慢編輯,才能達成目的,由於報表量龐大都上萬筆資料的,遇到這種上萬筆資料是沒辦法這樣

如果是用程式語言來合併,是指我要再另外的IDE寫一個合併檔案的程式,還是我可以直接寫在jasper裡面


reply to postreply to post
我認識JAVA 就J A V A 四個字
作者 Re:jasper report 無法同時輸出兩個報表 [Re:Hkun]
kentyeh





發文: 638
積分: 6
於 2016-07-09 01:15 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
很奇怪的需求(前提為印表機支持雙面列印),
一般是A1,B,A2,B...(假設是B是固定封面頁),一般的做法會比較簡單,
假設工具支持NewPage Event(動態資料不同大小,無法確定在那一筆會換頁),
透過NewPageEvent,方便在換頁時插入一個新的固定頁次,
若是 要把兩個不同的檔案以A1,B1,A2,B2...的方式列印,這時第一個考慮的問題是
一般工具無法支持兩個(或是多個)檔案換頁控制,此時唯一的方式就是合併檔案,
但是問題來了,你要自已針對印表機(不同的印表機的邊界大小可能不一樣)
把A,B兩個進行切頁後再合併(例如excel,你要事先知道多少Row換頁),
為了不要自已找這麻煩,最好的方式就是合併兩個PDF(因為PDF看到一頁印出就是一頁),
給你的參考代碼如下(假設兩個PDF的大小都一樣,如果不一樣要自已進行Transform)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package mergepdf;
 
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
 
public class MergePdf {
 
    public static void main(String[] args) throws DocumentException, FileNotFoundException, IOException {
        String firstPdf = "/tmp/page1.pdf";
        String secondPdf = "/tmp/page2.pdf";
        PdfReader reader1 = new PdfReader(firstPdf);
        PdfReader reader2 = new PdfReader(secondPdf);
        int pageNum1 = reader1.getNumberOfPages();
        int pageNum2 = reader2.getNumberOfPages();
        //看兩個文件頁次比較多
        PdfReader morePageReader = pageNum1 == pageNum2 ? null : pageNum1 > pageNum2 ? reader2 : reader1;
        int minPageNum = pageNum1 > pageNum2 ? pageNum2 : pageNum1;
 
        Document document = new Document(PageSize.A4);
        try {
            PdfWriter writer
                    = PdfWriter.getInstance(document, new FileOutputStream("/tmp/merge.pdf"));
            document.open();
            PdfContentByte cb = writer.getDirectContent();
            PdfImportedPage page;
            for (int i = 1; i <= minPageNum; i++) {
                document.newPage();
                page = writer.getImportedPage(reader1, i);
                cb.addTemplate(page, 0, 0);
                document.newPage();
                page = writer.getImportedPage(reader2, i);
                cb.addTemplate(page, 0, 0);
            }
            if (morePageReader != null) {
                for (int i = minPageNum + 1; i <= morePageReader.getNumberOfPages(); i++) {
                    document.newPage();
                    page = writer.getImportedPage(morePageReader, i);
                    cb.addTemplate(page, 0, 0);
                }
            }
        } finally {
            document.close();
        }
    }
}


reply to postreply to post
» JWorld@TW »  Java Tools

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8