iText生成pdf(圖片轉PDF)

jopen 11年前發布 | 124K 次閱讀 iText PDF工具包

      前言

               在學習的過程中筆者遇到過這種需求,就是將某個截取到的圖片轉化為PDF格式的。圖片如何

          轉化為PDF格式的呢?首先想到的是PDF格式的文檔是如何生成的,知道了這個就知道如何將圖

          片“插入”到PDF文檔中了。那么java有沒有生成PDF文檔的第三方jar呢?答案是肯定的。

       iText類庫    

               iText是著名的開放項目,是用于生成PDF文檔的一個java類庫。通過iText不僅可以生成PDF或

          rtf等文檔,甚至可以將XML、Html文件轉化為PDF格式。

               官方網址和開發文檔api:

                http://itextpdf.com

               官方下載地址:

                http://sourceforge.net/projects/itext/files/

               了解了iText類庫的功能,我們簡要的看看如何來使用他把。這里筆者只是演示一下如何將一張

          圖片轉換為一個pdf文件,簡單的生成一個pdf并插入圖片和文字。

        圖片生成PDF

               圖片是如何生成pdf的呢?我們直接看源碼吧:

    package com.kiritor;  

    import java.io.File;  
    import java.io.FileNotFoundException;  
    import java.io.FileOutputStream;  
    import java.io.IOException;  
    import java.util.ArrayList;  


    import com.itextpdf.text.Document;  
    import com.itextpdf.text.DocumentException;  
    import com.itextpdf.text.Image;  
    import com.itextpdf.text.PageSize;  
    import com.itextpdf.text.Paragraph;  
    import com.itextpdf.text.pdf.PdfWriter;  

    public class PdfManager {  
        public static File Pdf(ArrayList<String> imageUrllist,String mOutputPdfFileName) {  
            String TAG = "PdfManager";  
            Document doc = new Document(PageSize.A4, 20, 20, 20, 20);  
            try {  
                PdfWriter  
                        .getInstance(doc, new FileOutputStream(mOutputPdfFileName));  
                doc.open();  
                for (int i = 0; i < imageUrllist.size(); i++) {  
                    doc.newPage();  
                    doc.add(new Paragraph("簡單使用iText"));  
                    Image png1 = Image.getInstance(imageUrllist.get(i));  
                    float heigth = png1.getHeight();  
                    float width = png1.getWidth();  
                    int percent = getPercent2(heigth, width);  
                    png1.setAlignment(Image.MIDDLE);  
                    png1.scalePercent(percent+3);// 表示是原來圖像的比例;  
                    doc.add(png1);  
                }  
                doc.close();  
            } catch (FileNotFoundException e) {  
                e.printStackTrace();  
            } catch (DocumentException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  

            File mOutputPdfFile = new File(mOutputPdfFileName);  
            if (!mOutputPdfFile.exists()) {  
                mOutputPdfFile.deleteOnExit();  
                return null;  
            }  
            return mOutputPdfFile;  
        }  

        /** 
         * 第一種解決方案 在不改變圖片形狀的同時,判斷,如果h>w,則按h壓縮,否則在w>h或w=h的情況下,按寬度壓縮 
         * 
         * @param h 
         * @param w 
         * @return 
         */  

        public static int getPercent(float h, float w) {  
            int p = 0;  
            float p2 = 0.0f;  
            if (h > w) {  
                p2 = 297 / h * 100;  
            } else {  
                p2 = 210 / w * 100;  
            }  
            p = Math.round(p2);  
            return p;  
        }  

        /** 
         * 第二種解決方案,統一按照寬度壓縮 這樣來的效果是,所有圖片的寬度是相等的,自我認為給客戶的效果是最好的 
         * 
         * @param args 
         */  
        public static int getPercent2(float h, float w) {  
            int p = 0;  
            float p2 = 0.0f;  
            p2 = 530 / w * 100;  
            p = Math.round(p2);  
            return p;  
        }  
    }  
         具體是如何調用的呢?
    package com.kiritor;  

    import java.io.File;  
    import java.io.IOException;  
    import java.util.ArrayList;  

    public class ToPDF {  
      public static void main(String[] args) {  
        // TODO Auto-generated method stub  
            ArrayList<String> imageUrllist = new ArrayList<String>();  
            imageUrllist.add("C:\\Users\\Kiritor\\Desktop\\matlab\\" + "1" + ".jpg");  
            String pdfUrl = "C:\\Users\\Kiritor\\Desktop\\matlab\\Foreverlove.pdf";  
            File file = PdfManager.Pdf(imageUrllist, pdfUrl);  
            try {  
                file.createNewFile();  
            } catch (IOException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
    }  
    }  
         我們預期的效果是通過一張圖片生成一個pdf文檔,并且圖片前面添加了iText文字。

          我們在指定的目錄下看看是否生成了pdf以及其內容吧。

              該目錄下確實生成了pdf文檔,且里面的內容確實符合要求。

                20130516184639866.png

            由于筆者只是需要將pic轉成pdf其他的詳細功能筆者也就沒有深究,讀者可以查閱API自己

        去實現相關操作(實現一個pdf編輯器?)。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!