Itext5庫的對PDF文件的基本操作(一)---新建文檔,設置文檔屬性,設置文檔密碼

首先引入依賴,爲了方便起見,我們採用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();
    }
}

未完待續- -

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章