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

» JWorld@TW » Java Tools  

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





發文: 642
積分: 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
話題樹型展開
人氣 標題 作者 字數 發文時間
756 jasper report 無法同時輸出兩個報表 Hkun 429 2016-07-08 08:58
642 Re:jasper report 無法同時輸出兩個報表 snowbean71 189 2016-07-08 11:44
655 Re:jasper report 無法同時輸出兩個報表 Hkun 149 2016-07-08 12:01
701 Re:jasper report 無法同時輸出兩個報表 kentyeh 2543 2016-07-09 01:15
» JWorld@TW »  Java Tools

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

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8