java为图片和pdf文件添加水印

为图片添加图片水印

/**
     * 为图片添加图片水印
     *
     * @param inFile  原图
     * @param outFile 制作完成的图片地址
     * @param suffix 图片后缀名
     * @param markImage 水印
     */
    public void makeImageMark(File inFile, File outFile, String suffix, File markImage) {
        Image img = null;
        try {
            img = ImageIO.read(inFile);
            //水印宽度
            int width = img.getWidth(null);
            //水印高
            int height = img.getHeight(null);
            BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            //获取画笔
            Graphics2D g = bi.createGraphics();
            //设置对线段的锯齿状边缘处理
            g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
            g.drawImage(img.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);
            ImageIcon imgIcon = new ImageIcon(Files.readAllBytes(markImage.toPath()));
            Image con = imgIcon.getImage();
            //水印旋转角度
            //g.rotate(Math.toRadians(-25), width / 3, height / 2);

            //指定新的像素如何在呈现过程中与图形设备上的现有像素组合
            //AlphaComposite类:实现一些基本的 alpha 合成规则,将源色与目标色组合,在图形和图像中实现混合和透明效果。alpha:透明度
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.2f));
            //水印的位置
            g.drawImage(con, width / 3, height / 3, null);
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
            //释放此图形的上下文并释放它所使用的所有系统资源
            g.dispose();
            // 保存图片
            ImageIO.write(bi, suffix, outFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

给PDF文件添加图片水印

/**
     * 给pdf文件添加图片水印
     *
     * @param inPdfFile    要加水印的原pdf文件
     * @param outPdfFile 加了水印后要输出的文件
     * @param markImage 水印
     */
    public void makePdfMark(File inPdfFile, File outPdfFile, File markImage) {
        try {
            PdfReader reader = new PdfReader(new FileInputStream(inPdfFile));
            PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(outPdfFile));
            //获取pdf每一页的长宽
            Rectangle page = reader.getPageSize(1);
            float width = page.getWidth();
            float height = page.getHeight();
            // 水印图片  
            com.itextpdf.text.Image img = com.itextpdf.text.Image.getInstance(markImage.getPath());
            //旋转弧度
            //img.setRotation(-20);
            // 旋转 角度
            //img.setRotationDegrees(45);

            // 透明度设置
            PdfGState gs = new PdfGState();
            gs.setFillOpacity(0.5f);
            //设置图片水印位置
            img.setAbsolutePosition(width / 2, height / 2);
            for (int i = 1; i <= reader.getNumberOfPages(); i++) {
                //getOverContent:将水印图片覆盖在最上层,pdf中的图片也会被打上水印。getUnderContent:与之相反
                PdfContentByte over = stamp.getOverContent(i);
                over.setGState(gs);
                over.addImage(img);
            }
            // 关闭
            stamp.close();
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

给pdf添加水印图片所需要的jar包

	<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.13</version>
        </dependency>

你可能感兴趣的:(java为图片和pdf文件添加水印)