iText生成pdf(圖片轉PDF)
阿新 • • 發佈:2018-12-26
前言
在學習的過程中筆者遇到過這種需求,就是將某個擷取到的圖片轉化為PDF格式的。圖片如何
轉化為PDF格式的呢?首先想到的是PDF格式的文件是如何生成的,知道了這個就知道如何將圖
片“插入”到PDF文件中了。那麼java有沒有生成PDF文件的第三方jar呢?答案是肯定的。
iText類庫
iText是著名的開放專案,是用於生成PDF文件的一個java類庫。通過iText不僅可以生成PDF或
rtf等文件,甚至可以將XML、Html檔案轉化為PDF格式。
官方網址和開發文件api:
官方下載地址:
瞭解了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; } }
我們預期的效果是通過一張圖片生成一個pdf文件,並且圖片前面添加了iText文字。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以及其內容吧。
該目錄下確實生成了pdf文件,且裡面的內容確實符合要求。
由於筆者只是需要將pic轉成pdf其他的詳細功能筆者也就沒有深究,讀者可以查閱API自己
去實現相關操作(實現一個pdf編輯器?)。這裡筆者提供一個比較不錯的連結: