<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    美麗涵涵童裝店--說我博客名字,給你們打折!
    隨筆 - 82  文章 - 266  trackbacks - 0
    <2009年6月>
    31123456
    78910111213
    14151617181920
    21222324252627
    2829301234
    567891011


    點擊這里給楊愛友發(fā)消息
    美麗涵涵童裝店
    說我博客名字,給你們打折!

    常用鏈接

    留言簿(6)

    隨筆分類

    隨筆檔案

    文章檔案

    好友的BLOG

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    【轉(zhuǎn)載于http://www.javaeye.com/topic/110122

    一、前言

      在企業(yè)的信息系統(tǒng)中,報表處理一直占比較重要的作用,本文將介紹一種生成PDF報表的Java組件--iText。通過 在服務(wù)器端使用Jsp或JavaBean生成PDF報表,客戶端采用超級連接顯示或下載得到生成的報表,這樣就很好的解決了B/S系統(tǒng)的報表處理問題。

      二、iText簡介

      iText是著名的開放源碼的站點sourceforge一個項目,是用于生成PDF文檔的一個java類庫。通過iText不僅可以生成PDF或rtf的文檔,而且可以將XML、Html文件轉(zhuǎn)化為PDF文件。

      iText的安裝非常方便,在http://www.lowagie.com/iText/download.html - download 網(wǎng)站上下載iText.jar文件后,只需要在系統(tǒng)的CLASSPATH中加入iText.jar的路徑,在程序中就可以使用iText類庫了。

      三、建立第一個PDF文檔

      用iText生成PDF文檔需要5個步驟:

      ①建立com.lowagie.text.Document對象的實例。

    『轉(zhuǎn)載于http://www.javaeye.com/topic/110122

    Document document = new Document();

      ②建立一個書寫器(Writer)與document對象關(guān)聯(lián),通過書寫器(Writer)可以將文檔寫入到磁盤中。


    PDFWriter.getInstance(document, new FileOutputStream("Helloworld.PDF"));

      ③打開文檔。


    document.open();

      ④向文檔中添加內(nèi)容。


    document.add(new Paragraph("Hello World"));

      ⑤關(guān)閉文檔。


    document.close();

      通過上面的5個步驟,就能產(chǎn)生一個Helloworld.PDF的文件,文件內(nèi)容為"Hello World"。

      建立com.lowagie.text.Document對象的實例

      com.lowagie.text.Document對象的構(gòu)建函數(shù)有三個,分別是:


    public Document();
    public Document(Rectangle pageSize);
    public Document(Rectangle pageSize,
    int marginLeft,
    int marginRight,
    int marginTop,
    int marginBottom);

       構(gòu)建函數(shù)的參數(shù)pageSize是文檔頁面的大小,對于第一個構(gòu)建函數(shù),頁面的大小為A4,同Document(PageSize.A4)的效果一樣; 對于第三個構(gòu)建函數(shù),參數(shù)marginLeft、marginRight、marginTop、marginBottom分別為左、右、上、下的頁邊距。

       通過參數(shù)pageSize可以設(shè)定頁面大小、面背景色、以及頁面橫向/縱向等屬性。iText定義了A0-A10、AL、LETTER、 HALFLETTER、_11x17、LEDGER、NOTE、B0-B5、ARCH_A-ARCH_E、FLSA 和FLSE等紙張類型,也可以通過Rectangle pageSize = new Rectangle(144, 720);自定義紙張。通過Rectangle方法rotate()可以將頁面設(shè)置成橫向。

      書寫器(Writer)對象

       一旦文檔(document)對象建立好之后,需要建立一個或多個書寫器(Writer)對象與之關(guān)聯(lián)。通過書寫器(Writer)對象可以將具體文檔 存盤成需要的格式,如com.lowagie.text.PDF.PDFWriter可以將文檔存成PDF文件, com.lowagie.text.html.HtmlWriter可以將文檔存成html文件。

      設(shè)定文檔屬性

      在文檔打開之前,可以設(shè)定文檔的標(biāo)題、主題、作者、關(guān)鍵字、裝訂方式、創(chuàng)建者、生產(chǎn)者、創(chuàng)建日期等屬性,調(diào)用的方法分別是:


    public boolean addTitle(String title)
    public boolean addSubject(String subject)
    public boolean addKeywords(String keywords)
    public boolean addAuthor(String author)
    public boolean addCreator(String creator)
    public boolean addProducer()
    public boolean addCreationDate()
    public boolean addHeader(String name, String content)

      其中方法addHeader對于PDF文檔無效,addHeader僅對html文檔有效,用于添加文檔的頭信息。
    當(dāng)新的頁面產(chǎn)生之前,可以設(shè)定頁面的大小、書簽、腳注(HeaderFooter)等信息,調(diào)用的方法是:


    public boolean setPageSize(Rectangle pageSize)
    public boolean add(Watermark watermark)
    public void removeWatermark()
    public void setHeader(HeaderFooter header)
    public void resetHeader()
    public void setFooter(HeaderFooter footer)
    public void resetFooter()
    public void resetPageCount()
    public void setPageCount(int pageN) 

      如果要設(shè)定第一頁的頁面屬性,這些方法必須在文檔打開之前調(diào)用。

      對于PDF文檔,iText還提供了文檔的顯示屬性,通過調(diào)用書寫器的setViewerPreferences方法可以控制文檔打開時Acrobat Reader的顯示屬性,如是否單頁顯示、是否全屏顯示、是否隱藏狀態(tài)條等屬性。

      另外,iText也提供了對PDF文件的安全保護(hù),通過書寫器(Writer)的setEncryption方法,可以設(shè)定文檔的用戶口令、只讀、可打印等屬性。

      添加文檔內(nèi)容

      所有向文檔添加的內(nèi)容都是以對象為單位的,如Phrase、Paragraph、Table、Graphic對象等。比較常用的是段落(Paragraph)對象,用于向文檔中添加一段文字。

      四、文本處理

      iText中用文本塊(Chunk)、短語(Phrase)和段落(paragraph)處理文本。
    文本塊(Chunk)是處理文本的最小單位,有一串帶格式(包括字體、顏色、大小)的字符串組成。如以下代碼就是產(chǎn)生一個字體為HELVETICA、大小為10、帶下劃線的字符串:

    Chunk chunk1 = new Chunk("This text is underlined", FontFactory.getFont(FontFactory.HELVETICA, 12, Font.UNDERLINE)); 


    短語(Phrase)由一個或多個文本塊(Chunk)組成,短語(Phrase)也可以設(shè)定字體,但對于其中以設(shè)定過字體的文本塊(Chunk)無 效。通過短語(Phrase)成員函數(shù)add可以將一個文本塊(Chunk)加到短語(Phrase)中,如:phrase6.add(chunk);

       段落(paragraph)由一個或多個文本塊(Chunk)或短語(Phrase)組成,相當(dāng)于WORD文檔中的段落概念,同樣可以設(shè)定段落的字體大 小、顏色等屬性。另外也可以設(shè)定段落的首行縮進(jìn)、對齊方式(左對齊、右對齊、居中對齊)。通過函數(shù)setAlignment可以設(shè)定段落的對齊方式, setAlignment的參數(shù)1為居中對齊、2為右對齊、3為左對齊,默認(rèn)為左對齊。

      五、表格處理

      iText中處 理表格的類為:com.lowagie.text.Table和com.lowagie.text.PDF.PDFPTable,對于比較簡單的表格處理 可以用com.lowagie.text.Table,但是如果要處理復(fù)雜的表格,這就需要 com.lowagie.text.PDF.PDFPTable進(jìn)行處理。這里就類com.lowagie.text.Table進(jìn)行說明。

      類com.lowagie.text.Table的構(gòu)造函數(shù)有三個:

       ①Table (int columns)
    ②Table(int columns, int rows)
    ③Table(Properties attributes)

      參數(shù)columns、rows、attributes分別為表格的列數(shù)、行數(shù)、表格屬性。創(chuàng)建表格時必須指定表格的列數(shù),而對于行數(shù)可以不用指定。

      建立表格之后,可以設(shè)定表格的屬性,如:邊框?qū)挾取⑦吙蝾伾⒁r距(padding space 即單元格之間的間距)大小等屬性。下面通過一個簡單的例子說明如何使用表格,代碼如下:


    1:Table table = new Table(3);
    2:table.setBorderWidth(1);
    3:table.setBorderColor(new Color(0, 0, 255));
    4:table.setPadding(5);
    5:table.setSpacing(5);
    6:Cell cell = new Cell("header");
    7:cell.setHeader(true);
    8:cell.setColspan(3);
    9:table.addCell(cell);
    10:table.endHeaders();
    11:cell = new Cell("example cell with colspan 1 and rowspan 2");
    12:cell.setRowspan(2);
    13:cell.setBorderColor(new Color(255, 0, 0));
    14:table.addCell(cell);
    15:table.addCell("1.1");
    16:table.addCell("2.1");
    17:table.addCell("1.2");
    18:table.addCell("2.2");
    19:table.addCell("cell test1");
    20:cell = new Cell("big cell");
    21:cell.setRowspan(2);
    22:cell.setColspan(2);
    23:table.addCell(cell);
    24:table.addCell("cell test2");


    運行結(jié)果如下:


    header 
    example cell with colspan 1 and rowspan 2  1.1 2.1 
    1.2 2.2 
    cell test1 big cell 
    cell test2 


    代碼1-5行用于新建一個表格,如代碼所示,建立了一個列數(shù)為3的表格,并將邊框?qū)挾仍O(shè)為1,顏色為藍(lán)色,襯距為5。

       代碼6-10行用于設(shè)定表格的表頭,第7行cell.setHeader(true);是將該單元格作為表頭信息顯示;第8行 cell.setColspan(3);指定了該單元格占3列;為表格添加表頭信息時,要注意的是一旦表頭信息添加完了之后,必須調(diào)用 endHeaders()方法,如第10行,否則當(dāng)表格跨頁后,表頭信息不會再顯示。

      代碼11-14行是向表格中添加一個寬度占一列,長度占二行的單元格。

      往表格中添加單元格(cell)時,按自左向右、從上而下的次序添加。如執(zhí)行完11行代碼后,表格的右下方出現(xiàn)2行2列的空白,這是再往表格添加單元格時,先填滿這個空白,然后再另起一行,15-24行代碼說明了這種添加順序。

      六、圖像處理

       iText中處理表格的類為com.lowagie.text.Image,目前iText支持的圖像格式有:GIF, Jpeg, PNG, wmf等格式,對于不同的圖像格式,iText用同樣的構(gòu)造函數(shù)自動識別圖像格式。通過下面的代碼分別獲得gif、jpg、png圖像的實例。


    Image gif = Image.getInstance("vonnegut.gif");
    Image jpeg = Image.getInstance("myKids.jpg");
    Image png = Image.getInstance("hitchcock.png");


    圖像的位置

       圖像的位置主要是指圖像在文檔中的對齊方式、圖像和文本的位置關(guān)系。IText中通過函數(shù)public void setAlignment(int alignment)進(jìn)行處理,參數(shù)alignment為Image.RIGHT、Image.MIDDLE、Image.LEFT分別指右對齊、居中、 左對齊;當(dāng)參數(shù)alignment為Image.TEXTWRAP、Image.UNDERLYING分別指文字繞圖形顯示、圖形作為文字的背景顯示。這 兩種參數(shù)可以結(jié)合以達(dá)到預(yù)期的效果,如setAlignment(Image.RIGHT|Image.TEXTWRAP)顯示的效果為圖像右對齊,文字 圍繞圖像顯示。

      圖像的尺寸和旋轉(zhuǎn)

      如果圖像在文檔中不按原尺寸顯示,可以通過下面的函數(shù)進(jìn)行設(shè)定:


    public void scaleAbsolute(int newWidth, int newHeight)
    public void scalePercent(int percent)
    public void scalePercent(int percentX, int percentY)


    函數(shù)public void scaleAbsolute(int newWidth, int newHeight)直接設(shè)定顯示尺寸;函數(shù)public void scalePercent(int percent)設(shè)定顯示比例,如scalePercent(50)表示顯示的大小為原尺寸的50%;而函數(shù)scalePercent(int percentX, int percentY)則圖像高寬的顯示比例。

      如果圖像需要旋轉(zhuǎn)一定角度之后在文檔中顯示,可以通過函數(shù)public void setRotation(double r)設(shè)定,參數(shù)r為弧度,如果旋轉(zhuǎn)角度為30度,則參數(shù)r= Math.PI / 6。

      七、中文處理

      默認(rèn)的iText字體設(shè)置不支持中文字體,需要下載遠(yuǎn)東字體包iTextAsian.jar,否則不能往PDF文檔中輸出中文字體。通過下面的代碼就可以在文檔中使用中文了:


    BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
    com.lowagie.text.Font FontChinese = new com.lowagie.text.Font(bfChinese, 12, com.lowagie.text.Font.NORMAL);
    Paragraph pragraph=new Paragraph("你好", FontChinese); 


    八、后計

       iText還有很多高級的功能,這里就不一一介紹了,具體開發(fā)時可參考發(fā)布的文檔。總的來說,iText是一套java環(huán)境下不錯的制作PDF的組件。 因為iText支持jsp/javabean下的開發(fā),這使得B/S應(yīng)用中的報表問題能得到很好的解決。由于iText畢竟不是專門為制作報表設(shè)計,所有 報表中的內(nèi)容、格式都需要通過寫代碼實現(xiàn),相對于那些專業(yè)的支持可視化設(shè)計的報表軟件來說,編程的工作量就有一定程度的增加。

    posted on 2009-06-15 23:34 楊愛友 閱讀(1735) 評論(0)  編輯  收藏 所屬分類: java相關(guān)技術(shù)
    美麗涵涵童裝店
    親,說我博客名字,給你們打折!
    主站蜘蛛池模板: 国产一级婬片A视频免费观看| 小说专区亚洲春色校园| 久久久WWW免费人成精品| 国产在线观看免费完整版中文版| 国产精品亚洲精品| 在线永久看片免费的视频| 亚洲白色白色永久观看| 亚洲免费二区三区| 亚洲免费视频观看| 成年人在线免费观看| 亚洲aⅴ无码专区在线观看春色| 免费精品一区二区三区在线观看 | 亚洲码和欧洲码一码二码三码| 人妻视频一区二区三区免费| 亚洲а∨天堂久久精品9966| 在线jyzzjyzz免费视频| 日韩亚洲综合精品国产| 亚洲国产精品综合久久网络 | 久久免费精品视频| 中文字幕亚洲综合久久2| 无码av免费毛片一区二区| 亚洲一级毛片免观看| 日韩免费视频播播| 免费一级做a爰片久久毛片潮| 亚洲中文字幕第一页在线| 91香焦国产线观看看免费| 亚洲色欲色欲www| 免费国产在线观看不卡| 中文字幕免费在线看电影大全| 色婷婷亚洲十月十月色天| 一个人免费观看在线视频www| MM1313亚洲国产精品| 情人伊人久久综合亚洲| 精品女同一区二区三区免费站| 亚洲熟妇无码AV| 红杏亚洲影院一区二区三区| 8x8x华人永久免费视频| 亚洲heyzo专区无码综合| 国产精一品亚洲二区在线播放| 精品国产污污免费网站aⅴ| 深夜a级毛片免费无码|