1. 程式人生 > >【itext學習之路】-------(第四篇)給pdf增加文字水印和圖片水印

【itext學習之路】-------(第四篇)給pdf增加文字水印和圖片水印

一般而言,許多公司在做pdf之後,都會將公司的logo或者網址以水印的方式新增到pdf檔案中。本篇文章,我們將介紹在製作pdf的時候,如何將水印加入到pdf中去。

package cn.tomtocc.pdf;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com
.itextpdf.text.DocumentException; import com.itextpdf.text.Element; import com.itextpdf.text.PageSize; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfGState; import com.itextpdf.text.pdf.PdfWriter
; public class pdfTest { public static void main(String[] args) throws FileNotFoundException, DocumentException { //實現A4紙頁面 並且橫向顯示(不設定則為縱向) Document document = new Document(PageSize.A4.rotate()); PdfWriter pdfWriter = PdfWriter.getInstance(document,new FileOutputStream("d:/demo.pdf"
)); // 開啟文件 document.open(); // 建立第一頁(如果只有一頁的話,這一步可以省略) document.newPage(); // 加入水印 PdfContentByte waterMar = pdfWriter.getDirectContentUnder(); // 開始設定水印 waterMar.beginText(); // 設定水印透明度 PdfGState gs = new PdfGState(); // 設定填充字型不透明度為0.4f gs.setFillOpacity(0.4f); try { // 設定水印字型引數及大小 (字型引數,字型編碼格式,是否將字型資訊嵌入到pdf中(一般不需要嵌入),字型大小) waterMar.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED), 60); // 設定透明度 waterMar.setGState(gs); // 設定水印對齊方式 水印內容 X座標 Y座標 旋轉角度 waterMar.showTextAligned(Element.ALIGN_RIGHT, "www.tomatocc.com" , 500, 430, 45); // 設定水印顏色 waterMar.setColorFill(BaseColor.GRAY); //結束設定 waterMar.endText(); waterMar.stroke(); } catch (IOException e) { e.printStackTrace(); }finally { waterMar = null; gs = null; } // 加入文件內容 document.add(new Paragraph("my first pdf demo")); // 關閉文件 document.close(); pdfWriter.close(); } }
  • 然後我們開啟我們的pdf,如下:
    這裡寫圖片描述

這裡要說明一點:水印是要放在pdf中的,因此在建立PdfContentByte物件之前,一定要先 document.newPage();。二者順序是不能反過來的,如果反過來的意思就是先畫水印,在建立一個pdf頁面,顯然不符合邏輯了。

  • 接下來,我們繼續操作“圖片水印”
package cn.tomtocc.pdf;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
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.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfWriter;

public class pdfTest {

    public static void main(String[] args) throws FileNotFoundException,
            DocumentException {
        //實現A4紙頁面 並且橫向顯示(不設定則為縱向)
        Document document = new Document(PageSize.A4.rotate());
        PdfWriter pdfWriter = PdfWriter.getInstance(document,new FileOutputStream("d:/demo.pdf"));
        // 開啟文件
        document.open();
        // 建立第一頁(如果只有一頁的話,這一步可以省略)
        document.newPage();

        // 加入水印
        PdfContentByte waterMar = pdfWriter.getDirectContentUnder();
        // 開始設定水印
        waterMar.beginText();
        // 設定水印透明度
        PdfGState gs = new PdfGState();
        // 設定筆觸字型不透明度為0.4f
        gs.setStrokeOpacity(0.4f);
        try {
            Image image = Image.getInstance("d:/tomatocc.jpg");
            // 設定座標 絕對位置 X Y
            image.setAbsolutePosition(200, 300);
            // 設定旋轉弧度
            image.setRotation(30);// 旋轉 弧度
            // 設定旋轉角度
            image.setRotationDegrees(45);// 旋轉 角度
            // 設定等比縮放
            image.scalePercent(90);// 依照比例縮放
            // image.scaleAbsolute(200,100);//自定義大小
            // 設定透明度
            waterMar.setGState(gs);
            // 新增水印圖片
            waterMar.addImage(image);
            // 設定透明度
            waterMar.setGState(gs);
            //結束設定
            waterMar.endText();
            waterMar.stroke();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            waterMar = null;
            gs = null;
        }


        // 加入文件內容
        document.add(new Paragraph("my first pdf demo"));
        // 關閉文件
        document.close();
        pdfWriter.close();
    }
}

然後我們開啟文件,就可以看到一個帶圖片水印的pdf了

這裡寫圖片描述

  • 到目前為止,關於pdf的簡單操作就介紹到這裡,在下篇文章中,我們將要介紹印章水印。

【itext學習之路】系列教程

【itext學習之路】—–(第一篇)建立一個簡單的pdf文件
【itext學習之路】—–(第二篇)設定pdf的一些常用屬性
【itext學習之路】—–(第三篇)對pdf文件進行加密和許可權設定
【itext學習之路】—–(第四篇)給pdf增加文字水印和圖片水印
【itext學習之路】—–(第五篇)對pdf進行蓋章/簽章/數字簽名