<!-- pdf依賴start -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.3</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.49</version>
</dependency>
<!-- 該依賴適用於itext-2.1.7.jar -->
<!-- <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk16</artifactId>
<version>1.46</version> </dependency> -->
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext-rtf</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
<!-- pdf依賴end -->
package com.PdfGen;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Arrays;
import java.util.List;
import com.itextpdf.text.Document;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfEncryption;
import com.itextpdf.text.pdf.PdfWriter;
public class GenPdfWithImg {
// Document document = new Document();// 建立一個Document對象
Document document = new Document(PageSize.A4,0,0,0,0);
private static Font textfont;// 設置字體大小
static {
BaseFont bfChinese;
try {
bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
textfont = new Font(bfChinese, 8, Font.NORMAL);// 設置字體大小
} catch (Exception e) {
e.printStackTrace();
}
}
public GenPdfWithImg(File file) {
// document.setPageSize(PageSize.A4);// 設置頁面大小
try {
PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(file));
pdfWriter.setViewerPreferences(PdfWriter.PageLayoutOneColumn);//設置文檔單頁顯示
/**
* 設置此PDF文件的權限,只有寫上的是允許的。 這裏只允許打印,讀取和保存,不允許修改等。
*/
int intPermissions = PdfWriter.AllowPrinting | PdfWriter.AllowScreenReaders;
/**
* 若要實現其他權限如修改等 則需要寫入密碼,這裏是設置密碼加密標準或加密類型。
*/
int intEncryptionType = PdfEncryption.STANDARD_ENCRYPTION_40;
/**
* 要是用這個方法需要引入一個jar包(bcprov-jdk.jar) 第一個參數:打開時需要的密碼;
* 第二個參數:實用其他其他權限時使用的密碼; 第三個參數:可使用的權限; 第四個參數:密碼類型
*/
pdfWriter.setEncryption(null, "hello".getBytes(), intPermissions, intEncryptionType);
document.open();
} catch (Exception e) {
e.printStackTrace();
}
}
public void generatePDF() throws Exception {
Paragraph paragraph = new Paragraph("標題1", textfont);// pdf 文件中的一個文字段落
List<String> imggeList = Arrays.asList("src/main/resource/IMG_20160808_212125.jpg",
"src/main/resource/Screenshot.png", "src/main/resource/IMG_20160611_124451.jpg");
for (int i = 0; i < imggeList.size(); i++) {
if(i == 2){
document.setPageSize(PageSize.A4.rotate());
}
// float width = document.getPageSize().getWidth() - 30;// 取頁面寬度並減去頁邊距
// float height = document.getPageSize().getHeight() - 40;// 取頁面高度並減去頁邊距
float width = document.getPageSize().getWidth();// 取頁面寬度並減去頁邊距
float height = document.getPageSize().getHeight();// 取頁面高度並減去頁邊距
String path = imggeList.get(i);
Image image = Image.getInstance(path);
image.setAlignment(Image.ALIGN_CENTER); // 居中顯示 Image.ALIGN_CENTER
// 顯示在文字下方 Image.UNDERLYING
float imgWidth = image.getWidth();
float imgHeight = image.getHeight();
image.scalePercent(width / imgWidth * 100, height / imgHeight * 100);
/**
* image.scalePercent(80); // 設置百分百 image.scaleAbsolute(400, 600);//
* 絕對大小 image.scaleToFit(520, 800);// 自適應大小
* document.setMargins(40,10, 40, 10); //設置頁邊距,也可在Document對象初始化時設置
*/
// document.addTitle("Hello mingri example");
// //作者
// document.addAuthor("wolf");
// //主題
// document.addSubject("This example explains how to add
// metadata.");
// document.addKeywords("iText, Hello mingri");
// document.addCreator("My program using iText");
// document.add(paragraph);
document.add(image);
}
document.close();
}
public static void main(String[] args) throws Exception {
File file = new File("/Users/jjs/Desktop/text.pdf");
file.createNewFile();
new GenPdfWithImg(file).generatePDF();
}
}