1. 程式人生 > >匯出pdf檔案時加圖片水印

匯出pdf檔案時加圖片水印

前言:本文探討的是利用pageEvent事件在生成PDF檔案的過程中把圖片水印加好,這樣匯出的是加好水印的pdf檔案。

  • 1:加入依賴
<!--匯出pdf相關-->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.10</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>
  • 2:準備好水印圖片,將圖片拷貝到專案中


  • 3:程式碼示例,利用pageEvent事件加水印

定義事件類

package itextpdf;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfPageEventHelper;
import com.itextpdf.text.pdf.PdfWriter;

/**
 * @author
 * @description 繼承PdfPageEventHelper類來定義事件
 * @date 2018/6/19 11:08$
 */
public class WaterMark1 extends PdfPageEventHelper {

    @Override
    public void onEndPage(PdfWriter writer, Document document) {
        //獲取水印圖片的路徑
        String markImagePath = this.getClass().getClassLoader().getResource("font").getFile() + "/logo.png";
        float pageHeight = document.getPageSize().getHeight();
        float pageWidth = document.getPageSize().getWidth();

        try {
            Image img = Image.getInstance(markImagePath);//生成水印圖片
            final float IMAGE_SIZE = 0.6f;//圖片縮放比例,大小0
            float plainWidth = img.getPlainWidth() * IMAGE_SIZE;
            float plainHeight = img.getPlainHeight() * IMAGE_SIZE;
            img.scaleAbsolute(plainWidth, plainHeight);//設定圖片大小
            img.setAlignment(Image.UNDERLYING); // 在字下面
            //設定水印圖片的座標。
            img.setAbsolutePosition(pageWidth - plainWidth - 35, pageHeight - plainHeight - 5);
            //image.setRotation(-30);//設定旋轉 弧度
            //image.setRotationDegrees(-45);//設定旋轉 角度
            //image.scalePercent(50);//設定依照比例縮放,與設定大小作用相同

            //將水印圖片加入到文件中,可使用迴圈新增多個,新增多個時注意每個圖片的座標等屬性
            document.add(img);

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

新增事件,注意要加在document.open()之前

        //建立document
        Document document = new Document(PageSize.A4);
        //設定要匯出的檔名
        File file = new File("C:\\Users\\Administrator\\Desktop\\test.pdf");
        OutputStream outputStream = new FileOutputStream(file);
        PdfWriter writer = PdfWriter.getInstance(document, outputStream);
        //開始寫
        writer.setPageEvent(new WaterMark1());//水印內容
        document.open();
        //此處省略寫入文字過程...
        document.close()

  • 4,效果展示