首先引入依賴,爲了方便起見,我們採用maven方式構建demo項目。在pom中添加itext庫的相應依賴。
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf/itext-xtra -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-xtra</artifactId>
<version>5.5.13</version>
</dependency>
<!-- 解析HTML 爲PDF -->
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.13</version>
</dependency>
這裏由於itext5是完全開源的。而itext7是商用付費的用的AGL協議。所以只用itext5.引入上圖所示依賴即可。
一.創建pdf文檔並修飾相關基本屬性。
代碼如下
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
/**
* @Author: TateBrown
* @date: 2018/9/9 20:22
* @param:
* @return:
*/
//創建pdf文檔
public class Create{
public static final String RESULT="demo1.pdf";
public static void main(String[] args) throws FileNotFoundException, DocumentException {
Document document=new Document();
//獲取一個pdfWriter實例
PdfWriter.getInstance(document,new FileOutputStream(RESULT));
document.open();
document.add(new Paragraph("Hello World!"));
document.close();
// //設置頁面尺寸
// Rectangle pagesize=new Rectangle(216f,720f);
// //設置文檔尺寸,後面四個參數爲上下左右四邊外邊距
// Document document1=new Document(pagesize,36f,72f,108f,180f);
// //設置用戶儘可能大的尺寸的pdf
// PdfWriter.getInstance(document,new FileOutputStream(RESULT)).setUserunit(75000f);
}
}
2.設置pdf文檔的相關屬性
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
/**
* @Author: TateBrown
* @date: 2018/9/9 20:57
* @param:
* @return:
*/
//設置pdf文件相關屬性,比如頁面大小,頁面背景色,頁邊空白,Title,Author,Subject,Keywords
public class SetAttribute {
public static void main(String[] args) throws FileNotFoundException, DocumentException{
String src="demo2.pdf";
//頁面大小
Rectangle rect=new Rectangle(PageSize.A4.rotate());
//頁面背景色
rect.setBackgroundColor(BaseColor.BLUE);
Document doc=new Document(rect);
FileOutputStream out=new FileOutputStream(src);
PdfWriter writer=PdfWriter.getInstance(doc,out);
//版本
writer.setPdfVersion(PdfWriter.VERSION_1_4);
//設置相關屬性
doc.addTitle("Title");
doc.addAuthor("TateBrown");
doc.addSubject("subject");
doc.addKeywords("Keywords");
doc.addCreator("cretor");
//設置頁邊空白間距,類似網頁盒模型的margin
doc.setMargins(10,10,30,30);
doc.open();
doc.add(new Paragraph("Hello World!"));
doc.close();
}
}
3.設置pdf的權限,權限分爲兩種,使用者權限和創建者權限。兩者可以做的事情是不一樣的,所以分開。
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
/**
* @Author: TateBrown
* @date: 2018/9/9 21:05
* @param:
* @return:
*/
//設置pdf密碼
public class SetPassword {
public static void main(String[] args) throws FileNotFoundException, DocumentException{
Document doc=new Document();
FileOutputStream out=new FileOutputStream("demo.pdf");
PdfWriter writer=PdfWriter.getInstance(doc,out);
writer.setEncryption("123".getBytes(),"123456".getBytes(),PdfWriter.ALLOW_SCREENREADERS,PdfWriter.STANDARD_ENCRYPTION_128);
//123爲查看的密碼,123456是作者使用的密碼,可以進行修改
doc.open();
doc.add(new Paragraph("Hello World"));
doc.close();
}
}
4.向pdf中添加多種對象。片段,短語等。
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @Author: TateBrown
* @date: 2018/9/9 21:31
* @param:
* @return:
*/
//插入多種對象
public class AddChunk_Phrase_Paragraph_List {
public static void main(String[] args) throws FileNotFoundException, DocumentException,IOException{
Document doc=new Document();
PdfWriter pdfWriter=PdfWriter.getInstance(doc,new FileOutputStream("demo.pdf"));
doc.open();
doc.add(new Chunk("Hello"));
doc.add(new Chunk("123"));
doc.close();
}
}
5.添加頁碼
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
/**
* @Author: TateBrown
* @date: 2018/9/9 21:10
* @param:
* @return:
*/
public class AddPage {
public static void main(String[] args) throws FileNotFoundException, DocumentException{
Document doc=new Document();
doc.add(new Paragraph("First page"));
doc.newPage();
PdfWriter writer=PdfWriter.getInstance(doc, new FileOutputStream("demo.pdf"));
writer.setPageEmpty(false);
doc.add(new Paragraph("2"));
doc.close();
}
}
6.添加背景圖水印圖
/**
* @Author: TateBrown
* @date: 2018/9/9 21:16
* @param:
* @return:
*/
//添加背景圖和水印
public class AddBackGroundPic {
public static void main(String[] args) throws FileNotFoundException, DocumentException,IOException{
PdfReader reader=new PdfReader("demo.pdf");
PdfStamper stamp=new PdfStamper(reader,new FileOutputStream("demo.pdf"));
Image img=Image.getInstance("background.jpg");
img.setAbsolutePosition(200,400);
PdfContentByte cb=stamp.getUnderContent(1);
cb.addImage(img);
//文字水印圖
PdfContentByte over=stamp.getOverContent(2);
over.beginText();
//設置字體
BaseFont bf=BaseFont.createFont(BaseFont.HELVETICA,BaseFont.WINANSI, BaseFont.EMBEDDED);
over.setFontAndSize(bf,18);
over.setTextMatrix(30,30);
over.showTextAligned(Element.ALIGN_LEFT,"水印",230,430,45);
over.endText();
//背景圖片
Image img2 = Image.getInstance("background.jpg");
img2.setAbsolutePosition(0, 0);
PdfContentByte under2 = stamp.getUnderContent(3);
under2.addImage(img2);
stamp.close();
reader.close();
}
}
未完待續- -