Java生成pdf工具——openPdf加文字水印功能介绍

Java生成pdf工具——openPdf加文字水印功能介绍

继上一篇Java生成pdf工具——openPdf使用介绍 后,这里主要介绍使用openPdf 生产pdf,给pdf加文字水印的功能,希望对大家有所帮助!

1、增加相应的依赖
<dependency>
  <groupId>com.github.librepdf</groupId>
  <artifactId>openpdf</artifactId>
  <version>1.3.34</version>
</dependency>
<dependency>
  <groupId>com.github.librepdf</groupId>
  <artifactId>openpdf-fonts-extra</artifactId>
  <version>1.3.34</version>
</dependency>

这个版本是最后支持jdk1.8, 后续的版本需要jdk9+,使用时,根据jdk版本进行相应的选择。

2、针对中文的支持,必须创建支持中文字符的基础字体
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font docFont = new Font(bfChinese, 12, Font.UNDEFINED, Color.BLACK);
3、具体代码实现
import com.lowagie.text.Document;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.*;

import java.awt.*;
import java.io.File;
import java.io.FileOutputStream;


public class Test6 {
    public static void main(String[] args) {
        long startTime = System.currentTimeMillis();
        try {
            BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            Font docFont = new Font(bfChinese, 12, Font.UNDEFINED, Color.BLACK);

            Document document = new Document();
            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(new File("D:/example6.pdf")));
            writer.setPageEvent(new PdfPageEventHelper(){
                @Override
                public void onEndPage(PdfWriter writer, Document document) {
                    PdfContentByte waterMar = writer.getDirectContentUnder();
                    String text = "光与松果";
                    addTextFullWaterMark(waterMar, text, bfChinese);
                }
            });

            document.open();

            for (int i = 0; i < 100; i++) {
                Paragraph paragraph = new Paragraph("他朝若是同淋雪,此生也算共白头,白头若是雪可替,世上那来苦心人。", docFont);
                paragraph.setAlignment(Element.ALIGN_CENTER);
                document.add(paragraph);
            }

            document.close();
            System.out.println("PDF file created successfully." + (System.currentTimeMillis() - startTime));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void addTextWaterMark(PdfContentByte waterMar, String text, BaseFont bfChinese){
        waterMar.beginText();

        PdfGState gs = new PdfGState();
        // 设置填充字体不透明度为0.2f
        gs.setFillOpacity(0.2f);
        waterMar.setFontAndSize(bfChinese, 40);
        // 设置透明度
        waterMar.setGState(gs);
        // 设置水印对齐方式 水印内容 X坐标 Y坐标 旋转角度
        waterMar.showTextAligned(Element.ALIGN_RIGHT, text, 475, 600, 45);

        // 设置水印颜色
        waterMar.setColorFill(Color.GRAY);

        //结束设置
        waterMar.endText();
        waterMar.stroke();
    }

    public static void addTextFullWaterMark(PdfContentByte waterMar, String text, BaseFont bfChinese) {
        waterMar.beginText();

        PdfGState gs = new PdfGState();
        // 设置填充字体不透明度为0.2f
        gs.setFillOpacity(0.2f);
        waterMar.setFontAndSize(bfChinese, 40);
        // 设置透明度
        waterMar.setGState(gs);
        // 设置水印对齐方式 水印内容 X坐标 Y坐标 旋转角度
        for (int x = 0; x <= 700; x += 200) {
            for (int y = 0; y <= 800; y += 200) {
                waterMar.showTextAligned(Element.ALIGN_RIGHT, text, x, y, 35);
            }
        }

        // 设置水印颜色
        waterMar.setColorFill(Color.GRAY);

        //结束设置
        waterMar.endText();
        waterMar.stroke();
    }
}

4、代码效果

在这里插入图片描述
希望对你有所帮助!!!

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值