iText生成pdf(圖片轉PDF)
前言
在學習的過程中筆者遇到過這種需求,就是將某個截取到的圖片轉化為PDF格式的。圖片如何
轉化為PDF格式的呢?首先想到的是PDF格式的文檔是如何生成的,知道了這個就知道如何將圖
片“插入”到PDF文檔中了。那么java有沒有生成PDF文檔的第三方jar呢?答案是肯定的。
iText類庫
iText是著名的開放項目,是用于生成PDF文檔的一個java類庫。通過iText不僅可以生成PDF或
rtf等文檔,甚至可以將XML、Html文件轉化為PDF格式。
官方網址和開發文檔api:
官方下載地址:
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文檔,且里面的內容確實符合要求。

由于筆者只是需要將pic轉成pdf其他的詳細功能筆者也就沒有深究,讀者可以查閱API自己
去實現相關操作(實現一個pdf編輯器?)。 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!