java對pdf文件加文字水印 itextpdf


package com.tythin.tyboot.core.util;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;


/**
 * @author kuangQingLin
 * @version 1.0
 * @date 2019/11/26/026 18:07
 **/
public class PdfWaterUtil {

    public static void main(String[] args) throws IOException {
        setWatermark(new BufferedOutputStream(new FileOutputStream(new File("C:\\Users\\Administrator\\Desktop\\2019-11-26-1.pdf"))),
                new FileInputStream("C:\\Users\\Administrator\\Desktop\\2019-11-26.pdf"), "借閱水印", 1);
    }


    /**
     * 中間或者兩邊水印
     * @param bos   添加完水印的輸出
     * @param input 原PDF文件輸入
     * @param word  水印內容
     * @param model 水印添加位置1中間,2兩邊
     */
    public static void setWatermark(BufferedOutputStream bos, InputStream input, String word, int model) {
        PdfReader reader = null;
        try {
            reader = new PdfReader(input);
            PdfStamper stamper = new PdfStamper(reader, bos);
            PdfContentByte content;
            // 創建字體,第一個參數是字體路徑,itext有一些默認的字體比如說:
           //1 BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
            //2  BaseFont base = BaseFont.createFont("/msyh.ttf", BaseFont.IDENTITY_H,
            //         BaseFont.EMBEDDED);
      //這個是為了解決linux服務器,水印亂碼問題,如果是windows服務器,用第一個就可以。
// 需要指定的字體,用第2,3個寫法,在resources文件夾下放置對應字體就行。
      // 3
BaseFont base = BaseFont.createFont("/simhei.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); PdfGState gs = new PdfGState(); // 獲取PDF頁數 int total = reader.getNumberOfPages(); // 遍歷每一頁 for (int i = 0; i < total; i++) { // 頁寬度 float width = reader.getPageSize(i + 1).getWidth(); // 頁高度 float height = reader.getPageSize(i + 1).getHeight(); // 內容 content = stamper.getOverContent(i + 1); //開始寫入文本 content.beginText(); //水印透明度 gs.setFillOpacity(0.8f); content.setGState(gs); content.setColorFill(BaseColor.LIGHT_GRAY); //設置字體的輸出位置 content.setTextMatrix(70, 200); if (model == 1) { //平行居中的3條水印 //字體大小 content.setFontAndSize(base, 50); //showTextAligned 方法的參數分別是(文字對齊方式,位置內容,輸出水印X軸位置,Y軸位置,旋轉角度) content.showTextAligned(Element.ALIGN_CENTER, word, width / 2, 650, 30); content.showTextAligned(Element.ALIGN_CENTER, word, width / 2, 400, 30); content.showTextAligned(Element.ALIGN_CENTER, word, width / 2, 150, 30); } else { // 左右兩邊個從上到下4條水印 // 水印旋轉度數 float rotation = 30; content.setFontAndSize(base, 20); content.showTextAligned(Element.ALIGN_LEFT, word, 20, height - 50, rotation); content.showTextAligned(Element.ALIGN_LEFT, word, 20, height / 4 * 3 - 50, rotation); content.showTextAligned(Element.ALIGN_LEFT, word, 20, height / 2 - 50, rotation); content.showTextAligned(Element.ALIGN_LEFT, word, 20, height / 4 - 50, rotation); content.setFontAndSize(base, 22); content.showTextAligned(Element.ALIGN_RIGHT, word, width - 20, height - 50, rotation); content.showTextAligned(Element.ALIGN_RIGHT, word, width - 20, height / 4 * 3 - 50, rotation); content.showTextAligned(Element.ALIGN_RIGHT, word, width - 20, height / 2 - 50, rotation); content.showTextAligned(Element.ALIGN_RIGHT, word, width - 20, height / 4 - 50, rotation); } //結束寫入文本 content.endText(); //要打圖片水印的話 //Image image = Image.getInstance("c:/1.jpg"); //content.addImage(image); } stamper.close(); } catch (IOException e) { e.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); } } }

引入的pom依賴如下:

  <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.9</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM