java为PDF添加水印,文字水印和图片水印

一个需求,下载pdf、word、excel文件时要带有水印,要求铺满。先分开,先介绍为PDF文件添加文字水印和图片水印。
所需jar包:itext-2.0.1.jar。(itextpdf-5.5.8.jar,这个类似)
jar包可在这里下载:https://mvnrepository.com/

创建水印图片的类

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;public class ImageUtil {/*** 生成背景透明的文字水印图片,文字位于中央,且倾斜* @param content 水印文字* @return*/public static BufferedImage createWaterMark(String content) {//生成图片宽度int width = 250;//生成图片高度int heigth = 160;//获取bufferedImage对象BufferedImage image = new BufferedImage(width, heigth, BufferedImage.TYPE_INT_RGB);//得到画笔对象Graphics2D g2d = image.createGraphics();//使得背景透明image = g2d.getDeviceConfiguration().createCompatibleImage(width, heigth, Transparency.TRANSLUCENT);g2d.dispose();g2d = image.createGraphics();//设置对线段的锯齿状边缘处理g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);//设置水印旋转,倾斜度g2d.rotate(-0.5, (double) image.getWidth()/2, (double) image.getHeight()/2);//设置颜色,这是黑色,第4个参数是透明度g2d.setColor(new Color(0, 0, 0, 20));//设置字体Font font = new Font("宋体", Font.ROMAN_BASELINE, 22);g2d.setFont(font);float fontSize = font.getSize();//计算绘图偏移x、y,使得使得水印文字在图片中居中float x = 0.5f * fontSize;float y = 0.5f * heigth + x;//取绘制的字串宽度、高度中间点进行偏移,使得文字在图片坐标中居中g2d.drawString(content, x, y);//释放资源g2d.dispose();return image;}public static void main(String[] args) throws Exception {BufferedImage bi = createWaterMark("水印图片 2021-12-32");ImageIO.write(bi, "png", new File("E:\\waterMark.png")); //写入文件}
}

效果图

PDF添加图片水印的类

import java.io.FileOutputStream;import com.lowagie.text.Image;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfGState;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;public class PDFUtil {/*** pdf文件添加图片水印* itext-2.0.1.jar* @param srcPath 输入的文件路径* @param destPath 输出的文件路径* @param imagePath 水印图片的路径* @throws Exception*/public static void addPDFImageWaterMark(String srcPath, String destPath, String imagePath) throws Exception {PdfReader reader = new PdfReader(srcPath);PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(destPath));//加载图片Image image = Image.getInstance(imagePath);PdfGState gs = new PdfGState();//gs.setFillOpacity(0.2f);//图片水印透明度//gs.setStrokeOpacity(0.4f);//设置笔触字体不透明度PdfContentByte content = null;int total = reader.getNumberOfPages();//pdf文件页数for (int i=0; i<total; i++) {float x = reader.getPageSize(i+1).width();//页宽度float y = reader.getPageSize(i+1).height();//页高度content = stamper.getOverContent(i+1);content.setGState(gs);content.beginText();//开始写入//每页7行,一行3个for (int j=0; j<3; j++) {for (int k=0; k<7; k++) {//setAbsolutePosition 方法的参数(输出水印X轴位置,Y轴位置)image.setAbsolutePosition(x/3*j-30, y/7*k-20);content.addImage(image);}}content.endText();//结束写入}//关闭流stamper.close();reader.close();}public static void main(String[] args) throws Exception {addPDFImageWaterMark("E:\\测试.pdf", "E:\\测试水印img.pdf", "E:\\waterMark.png");}
}

效果图

PDF添加文字水印的类

与图片水印的类似,稍微改动

import java.io.FileOutputStream;import com.lowagie.text.Element;
import com.lowagie.text.Image;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfGState;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;public class PDFUtil {/*** pdf文件添加文字水印* @param srcPath 输入的文件路径* @param destPath 输出的文件路径* @param word 水印文字* @throws Exception*/public static void addPDFWaterMark(String srcPath, String destPath, String word) throws Exception {PdfReader reader = new PdfReader(srcPath);PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(destPath));//使用系统字体String prefixFont = null;String os = System.getProperties().getProperty("os.name");if (os.startsWith("win") || os.startsWith("Win")) {prefixFont = "C:\\Windows\\Fonts\\SIMSUN.TTC,1";} else {prefixFont = "/usr/share/fonts/chinese/TrueType/uming.ttf";}//创建字体,第一个参数是字体路径BaseFont base = BaseFont.createFont(prefixFont, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);PdfGState gs = new PdfGState();gs.setFillOpacity(0.2f);//图片水印透明度//gs.setStrokeOpacity(0.4f);//设置笔触字体不透明度PdfContentByte content = null;int total = reader.getNumberOfPages();//pdf文件页数for (int i=0; i<total; i++) {float x = reader.getPageSize(i+1).width();//页宽度float y = reader.getPageSize(i+1).height();//页高度content = stamper.getOverContent(i+1);content.setGState(gs);content.beginText();//开始写入content.setFontAndSize(base, 20);//字体大小//每页7行,一行3个for (int j=0; j<3; j++) {for (int k=0; k<7; k++) {//showTextAligned 方法的参数(文字对齐方式,位置内容,输出水印X轴位置,Y轴位置,旋转角度)content.showTextAligned(Element.ALIGN_CENTER, word, x/3*j+90, y/7*k, 25);}}content.endText();//结束写入}//关闭流stamper.close();reader.close();}public static void main(String[] args) throws Exception {addPDFWaterMark("E:\\测试.pdf", "E:\\测试水印.pdf", "水印测试 2021-12-32");}
}

效果图


若用的是itextpdf-5.5.8.jar,则需改动以下两处
float x = reader.getPageSize(i+1).getWidth(); //页宽度
float y = reader.getPageSize(i+1).getHeight(); //页高度

java为PDF添加水印,图片水印和文字水印相关推荐

  1. java为word添加水印,图片水印和文字水印

    java为word添加水印,图片水印和文字水印 jdk1.5及以上 所需jar包:Spire.Office.jar 或 Spire.Doc.jar jar包下载:https://www.e-icebl ...

  2. Java添加水印(图片水印,文字水印)

    第一种是添加文字水印: import java.awt.*; import java.awt.image.*; import java.io.*; import javax.swing.*; impo ...

  3. java给图片加水印_Java 为图片添加水印(图片水印,文字水印)

    Java 为图片添加水印(图片水印,文字水印) 2014-07-28·WeaponX 5267 次浏览 ```java import java.awt.Color; import java.awt.F ...

  4. 用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)

    javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置.大小.粗度.翻转.平滑等操作 javaCV图像处理之2:实时视频添加图片水 ...

  5. java 批量为图片添加图标水印和文字水印

    需求,给指定目录下面以.jpg结尾的文件,添加图标水印和文字水印 文章目录 一.基础版本 二.升级版本 三.依赖 一.基础版本 package com.gblfy.util;import com.su ...

  6. java swt课程设计_Java-SWT怎么做图片水印和文字水印?

    Java添加水印 图片水印 文字水印 水印的处理...以下有两种方式: 第一种是添加文字水印: 第二种是添加图片水印: 现在附上代码 2种的源码 package com. yjf.image; imp ...

  7. java水印_Java实现给图片添加图片水印,文字水印及马赛克的方法示例

    本文实例讲述了Java实现给图片添加图片水印,文字水印及马赛克的方法.分享给大家供大家参考,具体如下: 可以在eclipse中新建个Utils类,把以下代码复制进去直接使用,以下方法实现单个或多个水印 ...

  8. 使用itext加图片水印或文字水印

    概述:使用itext 技术给pdf加水印方法. 实现原理:在不管是流还是临时pdf 预览之前.需先  生成不带水印的pdf,然后在通过itext工具方法生成带水印的pdf 依赖jar包:i-text- ...

  9. 图片添加图片水印和文字水印

    title: 图片添加图片水印和文字水印 tags: 图片处理,水印,图片水印,文字水印 date: 2018-10-29 20:15:10 grammar_cjkRuby: true 前言:最近需要 ...

最新文章

  1. windows10 Selenium Chrome 驱动安装
  2. 2010 年 360 盗取用户密码事件始末
  3. STM32开发 -- PMIC、I2C详解
  4. 面试准备每日五题:C++(九)——vector、list、deque、priority_queue、mapset
  5. api接口加密_接口加密如何测试?
  6. C语言编译过程总结简版
  7. python:解决pip install下载安装库非常慢的问题
  8. 《疯狂Java讲义》(第5版) 李刚
  9. 使用VC2005一些问题及解决方案(一)
  10. Python爬虫 批量下载美桌网高清美女壁纸
  11. 让Linux命令行更换颜色----PS1环境变量的使用小结
  12. java whois_Java实现简单whois查询
  13. 数据分析应用在传统运营后变身数据化运营
  14. 淘宝总裁蒋凡:今年双11淘宝推荐流量超过了搜索流量
  15. 计算机睡眠和休眠哪个更好,windows7睡眠与休眠的区别_win7电脑休眠和睡眠哪个好...
  16. HDU Identity Card
  17. 健身管理系统源码设计和实现
  18. proto-buf模型格式测试一例
  19. 1. 用U盘安装Centos6.5 + Win7 双系统
  20. ArcMap|珞珈一号遥感影像在ArcMap中的处理

热门文章

  1. html5 重度游戏,款款经典 2016年H5重度游戏好作大盘点
  2. Luogu P3354 [IOI2005]Riv河流 题解———再加一维!再加一维!
  3. CSplitterWnd窗口分割之——动态静态嵌套分割(二)
  4. NO.65——人工智能学习:python实现广度优先搜索
  5. UltraEdit常见问题及解决教程
  6. 12V不间断电源模块,智能直流UPS的设计需求-应用于工业电脑异常断电
  7. html5字体在线代码,网络字体@font-face 如何处理网页中的特殊字体
  8. matlab gain使用,matlabgain模块
  9. 2021年电工(技师)最新解析及电工(技师)复审考试
  10. 快速余弦变换matlab,离散余弦变换 - MATLAB Simulink - MathWorks 中国