使用iText操作pdf檔案

來源:互聯網
上載者:User
使用iText操作pdf檔案

        前段時間寫過一篇文章《java讀取pdf檔案的內容》,pig0045給我回複,說可以直接利用iText搞定,我很感激,因為以前處理pdf檔案並不多,對這塊相關組件並不瞭解,pig0045給我介紹了一個新的方法,謝謝!欣喜之餘,馬上google了一把iText,發現iText在產生pdf檔案方面功能很強大,而在讀取pdf檔案內容方面似乎涉及並不多(也許是我沒查到,有不同觀點的朋友,大家探討一下阿)。
        同時我也查了下java領域針對pdf的相關組件,發現有很多開源的東東,都可以操作pdf,恩,很不錯的。大致介紹幾個:xpdf,iText,PDFBox,感興趣的話,大家可以自己查一下。
        好了,回到文章主題,查了下iText後,我也去稍微看了下相關的api,做了一些簡單的demo,雖然網上相關介紹很多,但是自己寫一遍程式再用自己的語言記錄下來,理解會更為深刻一點。
準備工作:到http://www.lowagie.com/iText/下載最新的iText的jar包,並將其放到classpath中。
一.Hello WorldiText建立pdf檔案是十分簡單的,為了示範其極其簡單性,我們做一個HelloWorld吧,讓大家體驗一下。
在這個pdf檔案中,我們只顯示一句話"Hello World",實現方式如下:

        // 建立一個文檔對象
        Document doc = new Document();
        try ...{
            // 定義輸出位置並把文檔對象裝入輸出對象中
            PdfWriter.getInstance(doc, new FileOutputStream("/root/hello.pdf"));
            // 開啟文檔對象
            doc.open();
            // 加入文字“Hello World”
            doc.add(new Paragraph("HelloWorld"));
            // 關閉文檔對象,釋放資源
            doc.close();
        } catch (FileNotFoundException e) ...{
            e.printStackTrace();
        } catch (DocumentException e) ...{
            e.printStackTrace();
        }

怎麼樣?很簡單吧?下面我們對以上代碼稍作解釋。
Document(文檔)是建立pdf需要使用的第一個類,一旦建立了文檔,要向pdf檔案裡寫入內容,則需要一個寫入器,而PdfWriter就是這樣的一個寫入器。Paragraph這個類表示一個縮排的段落。運行以上程式,我們就會在/root目錄下看到hello.pdf檔案。

但是在實際工作中,我們不可能做這麼簡單的工作,下面就介紹一下常用的操作。

二.設定頁面邊界如果我們希望定義頁面大小和頁面邊界,可以通過使用Document的構造方法實現:

    public Document();

    public Document(Rectangle pageSize);

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

如下:

    Rectangle pSize=new Rectangle(144,90);
        //文檔的背景色
        pSize.setBackgroundColor(Color.blue);             
        //建立一個文檔對象,設定初始化大小和頁面邊界
        Document doc=new Document(pSize,5,5,5,5);

在上面的例子中我們通過Rectangle設定了文檔的大小,其實iText已經為我們定義好了許多常用的頁面,比如:A0-A10,我們可以直接調用,如下:

 Document doc=new Document(PageSize.A4,5,5,5,5);


三.設定字型iText可以設定顯示文本的字型,大小,顏色等,如下:

            // 加入文字“Hello World”,並設定字型為粗體,大小為20,顏色為紅色
            doc.add(new Paragraph("HelloWorld", FontFactory.getFont(
                    FontFactory.COURIER, 20, Font.BOLD, new Color(255, 0, 0))));

而要實現中文支援,我們需要到http://itextdocs.lowagie.com/downloads/iTextAsian.jar下載中文支援包,然後把它放入classpath中(我試了幾次,都無法下載,這裡先不說這塊了)。

四.編輯表格pdf中的table和html中的table差不多,只是其儲存格是cell,如下代碼加入了一個2*2的表格,代碼很簡單,就不過多解釋了。

        Document doc = new Document();
        try ...{
            // 定義輸出位置並把文檔對象裝入輸出對象中
            PdfWriter.getInstance(doc, new FileOutputStream("/root/hello.pdf"));
            // 開啟文檔對象
            doc.open();
            Table t = new Table(2,2);
            t.setBorderColor(new Color(0, 0, 255));//設定邊框顏色為藍色
            t.setPadding(5);
            t.setSpacing(5);//設定儲存格邊界
            t.setBorderWidth(1);//設定邊框寬度
            Cell c1 = new Cell("header1");
            c1.setHeader(true);
            t.addCell(c1);
            c1 = new Cell("Header2");
            t.addCell(c1);
            t.endHeaders();
            t.addCell("1.1");
            t.addCell("1.2");
            doc.add(t);
            // 關閉文檔對象,釋放資源
            doc.close();
        } catch (FileNotFoundException e) ...{
            e.printStackTrace();
        } catch (DocumentException e) ...{
            e.printStackTrace();
        }

五.插入圖片插入圖片和swing插入圖片差不多,大家可以參考一下:

        Document doc = new Document();
        Image jpeg;
        try ...{
            PdfWriter.getInstance(doc, new FileOutputStream("/root/hello.pdf"));
            doc.open();
            jpeg = Image.getInstance("/root/1.gif");
            //圖片置中
            jpeg.setAlignment(Image.ALIGN_CENTER);
            doc.add(jpeg);
            doc.close();
        } catch (BadElementException e) ...{
            e.printStackTrace();
        } catch (MalformedURLException e) ...{
            e.printStackTrace();
        } catch (IOException e) ...{
            e.printStackTrace();
        } catch (DocumentException e) ...{
            e.printStackTrace();
        }

           好了,到這裡我大致也介紹完了,歡迎大家拍磚,呵呵

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.