itextpdf使用:使用PdfReader添加图片水印

gitee参考代码地址:https://gitee.com/wangtianwen1996/cento-practice/tree/master/src/test/java/com/xiaobai/itextpdf

参考文章:https://www.cnblogs.com/wuxu/p/17371780.html

1、生成带有文字的图片

使用java.awt包的相关类生成带文字的图片,代码如下:

java 复制代码
/**
     * 生成带文字的图片
     * @return
     */
    public static String createImage() {
        int imageWidth = 80;
        int imageHeight = 30;
        BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);

        Graphics2D g2 = image.createGraphics();
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

        Color c = new Color(255, 255, 255);
        g2.setColor(c);// 设置背景色
        g2.fillRect(0, 0, imageWidth, imageHeight);

        String code = "000153";
        // 设置文字字体
        Font font = new Font(null, Font.PLAIN, 10);
        g2.setFont(font);
        g2.setColor(new Color(0, 0, 0));
        // 文字起始位置
        g2.drawString(code, 5, 15);
        g2.dispose();

        String imagePath = "D:\\usr\\local\\zeus\\resource\\temp/aaa.jpg";
        OutputStream baos = null;
        try {
            baos = new FileOutputStream(new File(imagePath));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            ImageIO.write(image, "jpg", baos);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 关闭输出流
        IOUtils.closeQuietly(baos);

        return imagePath;
    }

2、使用itextpdf的PdfReader插入图片水印

java 复制代码
@Test
public void addImage() {
    String pdfPath = "/Users/outenmon/Public/工作资料/公告/aaaa.pdf";
    PdfReader reader = null;
    try {
        reader = new PdfReader(pdfPath, "PDF".getBytes());
    } catch (IOException e) {
        e.printStackTrace();
    }
    String outPdfFile = "/Users/outenmon/Public/工作资料/公告/bbbb.pdf";
    PdfStamper stamp = null;
    try {
        stamp = new PdfStamper(reader, new FileOutputStream(new File(outPdfFile)));
    } catch (DocumentException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    PdfContentByte under;

//        PdfGState gs1 = new PdfGState();
//        gs1.setFillOpacity(0.3f);// 透明度设置

    String imagePath = ImageUtil.createImage();
    Image img = null;// 插入图片水印
    try {
        img = Image.getInstance(imagePath);
    } catch (BadElementException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    Rectangle pageSize1 = reader.getPageSize(1);
    float height = pageSize1.getHeight();
    img.setAbsolutePosition(10, height - 50); // 坐标
    // img.setRotation(-20);// 旋转 弧度
    // img.setRotationDegrees(45);// 旋转 角度
//        img.scaleAbsolute(80, 30);// 自定义大小
    // img.scalePercent(50);//依照比例缩放

//        int pageSize = reader.getNumberOfPages();// 原pdf文件的总页数
    /*for (int i = 1; i <= pageSize; i++) {
        under = stamp.getUnderContent(i);// 水印在之前文本下
        // under = stamp.getOverContent(i);//水印在之前文本上
        under.setGState(gs1);// 图片水印 透明度
        try {
            under.addImage(img);// 图片水印
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }*/
    under = stamp.getUnderContent(1);// 水印在之前文本下
    // under = stamp.getOverContent(i);//水印在之前文本上
//        under.setGState(gs1);// 图片水印 透明度
    try {
        under.addImage(img);// 图片水印
    } catch (DocumentException e) {
        e.printStackTrace();
    }

    try {
        stamp.close();// 关闭
    } catch (DocumentException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
相关推荐
微风粼粼11 分钟前
程序员在线接单
java·jvm·后端·python·eclipse·tomcat·dubbo
缘来是庄15 分钟前
设计模式之中介者模式
java·设计模式·中介者模式
rebel1 小时前
若依框架整合 CXF 实现 WebService 改造流程(后端)
java·后端
代码的余温2 小时前
5种高效解决Maven依赖冲突的方法
java·maven
慕y2742 小时前
Java学习第十六部分——JUnit框架
java·开发语言·学习
paishishaba2 小时前
Maven
java·maven
张人玉3 小时前
C# 常量与变量
java·算法·c#
Java技术小馆3 小时前
GitDiagram如何让你的GitHub项目可视化
java·后端·面试
Codebee3 小时前
“自举开发“范式:OneCode如何用低代码重构自身工具链
java·人工智能·架构
程序无bug3 小时前
手写Spring框架
java·后端