Java实现PDF增添水印

最近写的项目需要实现给PDF文件增添水印的功能(不想把用户上传的PDF在再次下载的时候还是原文件,增添水印可以增加文件的保密性,),我们使用itextpdf实现这个功能,

		// 创建文件
		Document document = new Document();
		document.setPageSize(PageSize.A4);
		// 建立一个书写器
		PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(oldPath));
		// 打开文件
		document.open();

导入依赖

        <!--PDF工具包-->
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>5.5.5</version>
    </dependency>
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itext-asian</artifactId>
        <version>5.2.0</version>
    </dependency>
    <!-- pdf转图片 -->
    <dependency>
        <groupId>org.icepdf.os</groupId>
        <artifactId>icepdf-core</artifactId>
        <version>6.1.2</version>
    </dependency>

控制层代码:

    @PostMapping("/exportPdf")
    public void exportPdf(@RequestBody MyDrawingChangeVO vo) throws Exception {
   
            //数据库中获取对象
            MyDrawingChangePdfElement pdfElement = selfBiz.getExportPdfElement(vo);
            //文件名
            String fileName = "变更单" + pdfElement.getSerialNumber() + ".pdf";
            //生成文件
            response.setContentType("application/pdf");
            response.setCharacterEncoding("utf-8");
            String endFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + endFileName);
            DrawingPDFUtils.createHardwarePDF(response, pdfElement);
    }

业务层代码

package com.muyuan.platform.slaughter.building.utils;


import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import com.muyuan.platform.common.util.CollectionUtil;
import com.muyuan.platform.slaughter.building.entity.drawing.MyDrawingChangeDetail;
import com.muyuan.platform.slaughter.building.entity.drawing.MyDrawingChangePdfElement;
import org.apache.commons.lang3.StringUtils;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Field;


public class DrawingPDFUtils {
   

    /**
     * @desc: PDF文档添加水印和设置密码
     * @param: [fileData, response, watermark, password]
     * @return:
     */
    public static void addWatermarkPwd(byte[] fileData, HttpServletResponse response, String watermark, String password) throws Exception {
   
        // 待加水印的文件
        PdfReader reader = new PdfReader(fileData);
        Field f = PdfReader.class.getDeclaredField("ownerPasswordUsed");
        f.setAccessible(true);
        f.set(reader, Boolean.TRUE);
        PdfStamper stamper = new PdfStamper(reader, response.getOutputStream());

        //加密码
        if(StringUtils.isNotBlank(password)){
   
            stamper.setEncryption(password.getBytes(), password.getBytes(), PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128);
        }

        //加水印
        if(StringUtils.isNotBlank(watermark)){
   
            // 设置字体
            BaseFont baseFont = BaseFont.createFont("/fonts/msyh.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
            // 设置透明度
            PdfGState gs = new PdfGState();
            // pdf页数
            int pageCount = reader.getNumberOfPages() + 1;
            PdfContentByte content;
            float pageWidth = 0;
            float pageHeight = 0;
            //字体大小
            float fontSize = 90;
            // 循环对每页插入水印
            for (int i = 1; i < pageCount; i++) {
   
                pageWidth = reader.getPageSize(i).getWidth();
                pageHeight = reader.getPageSize(i).getHeight();
                // 水印的起始
                content = stamper.getOverContent(i);
                gs.setFillOpacity(0.5f);
                content.setGState(gs);
                // 开始
                content.beginText
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值