java pdf添加水印文本及图片文本

PDF文件添加文本水印:

    private static int interval = 30;
public static void waterMark(String inputFile,String outputFile, String waterMarkName) {
try {
PdfReader reader = new PdfReader(inputFile);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));
//这里的字体设置比较关键,这个设置支持中文的写法
BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED); //使用系统字体
Rectangle pageRect = null;
PdfGState gs = new PdfGState();
//设置透明度
gs.setFillOpacity(0.3f);
gs.setStrokeOpacity(0.3f);
int total = reader.getNumberOfPages() + 1;
JLabel label = new JLabel();
FontMetrics metrics;
int textH = 0;
int textW = 0;
label.setText(waterMarkName);
metrics = label.getFontMetrics(label.getFont());
textH = metrics.getHeight();
textW = metrics.stringWidth(label.getText());
PdfContentByte under;
for (int i = 1; i < total; i++) {
pageRect = reader.getPageSizeWithRotation(i);
under = stamper.getOverContent(i);
under.saveState();
under.setGState(gs);
under.beginText();
under.setFontAndSize(base, 30); //控制字体间宽度
// 水印文字成30度角倾斜
for (int height = interval + textH; height < pageRect.getHeight(); height = height + textH*8) {
for (int width = interval + textW; width < pageRect.getWidth() + textW; width = width + textW*4) {
under.showTextAligned(Element.ALIGN_LEFT , waterMarkName, width - textW,
height - textH, 30); } }
// 添加水印文字
under.endText();
}
//关闭流
stamper.close();
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}

PDF添加图片水印:

private static final float IAMGE_HEIGHT = 110f; // 水印图片的的高度
private static final float IAMGE_WIDTH = 110f; // 水印图片的的宽度
public static void addPdfMark(String pdfPath,String logoPath, String outPath) throws Exception { PdfReader reader = new PdfReader(pdfPath, "PDF".getBytes());
// 如果是web项目,直接下载应该放到response的流里面
// PdfStamper stamp = new PdfStamper(reader,response.getOutputStream());
// 添加水印之后的pdf文件
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(outPath));
int pageSize = reader.getNumberOfPages(); float pageHeight = reader.getPageSize(1).getHeight();
float pageWidth = reader.getPageSize(1).getWidth();
try {
// 每两行显示两个 左边一个,右边一个
int lineNum = (int) (pageHeight / IAMGE_HEIGHT); // 行数
int middleY = (int) pageWidth / 2;
for (int i = 1; i <= pageSize; i++) {
for (int j = 0, k = 0; j < lineNum; j = j + 4, k++) {
Random random = new Random();
// 放入水印
Image img = Image.getInstance(logoPath);
img.scaleAbsolute(IAMGE_WIDTH, IAMGE_HEIGHT * 184 / 455);
// 将水印显示到最底层
img.setAlignment(Image.UNDERLYING);
int trueY;
while (true) {
trueY = random.nextInt(middleY);
if (trueY > IAMGE_WIDTH / 2 && trueY < (middleY - IAMGE_WIDTH)) {
break;
}
}
// 水印的位置
img.setAbsolutePosition(trueY, j * IAMGE_HEIGHT + (float) random.nextInt((int) IAMGE_HEIGHT) - (k % 2) * 10);
// 旋转 角度
img.setRotationDegrees(random.nextInt(360));
PdfContentByte under = stamp.getUnderContent(i); PdfGState gs = new PdfGState();
// 设置透明度为0.5
gs.setFillOpacity(0.5f);
under.setGState(gs);
under.addImage(img);
while (true) {
trueY = random.nextInt(middleY) + middleY;
if (trueY > middleY + IAMGE_WIDTH / 2 && trueY < (2 * middleY - IAMGE_WIDTH)) {
break;
}
}
// 水印的位置
img.setAbsolutePosition(trueY, j * IAMGE_HEIGHT + (float) random.nextInt((int) IAMGE_HEIGHT) - (k % 2) * 10);
// 旋转角度
img.setRotationDegrees(random.nextInt(360));
under.addImage(img);
}
}
} catch (Exception e) {
throw e;
} finally {
stamp.close();
reader.close();
}

测试--------------------------------------------------------------------------------

public static void main(String[] args) throws Exception {
waterMark("xxx.pdf", "yyy.pdf", "测试工程");
//addPdfMark("xxx.pdf","image.png","yyy.xml");
System.out.println("结束");
}
}

参考了很多前辈的,希望能帮到各位!

模块所需jar包(itextpdf-5.5.13.1.jar)

java -PDF添加文本水印与图片水印的更多相关文章

  1. PDF怎么添加文字水印与图片水印

    现在是个知识分享时代,但不可避免的盗版也无处不在,不知道在我们大家身边有没有遇到过这样的情况:自己煞费苦心制作的PDF文档不知道在什么时候就会被别人给盗用了,那么如何才能尽量避免这个问题呢?今天带大家 ...

  2. 本图片处理类功能非常之强大可以实现几乎所有WEB开发中对图像的处理功能都集成了,包括有缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等功能

    import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...

  3. C# 处理PPT水印(一)——添加水印效果(文字水印、图片水印)

    对文档添加水印可以有效声明和保护文档,是保护重要文件的方式之一.在PPT文档中同样也可以设置水印,包括文本水印和图片水印,本文将讲述如何通过Spire.Presentation for .NET来对P ...

  4. java PDF添加图层,支持多页图层添加

     java PDF添加图层,支持多页图层添加 代码: import java.io.File; import java.io.FileOutputStream; import java.io.IOEx ...

  5. Java 添加Word文本水印、图片水印

    水印是一种常用于各种文档的声明.防伪手段,一般可设置文字水印或者加载图片作为水印.以下内容将分享通过Java编程给Word文档添加水印效果的方法,即 文本水印 图片水印 使用工具:Free Spire ...

  6. Spire.Cloud.Word 添加Word水印(文本水印、图片水印)

    概述 Spire.Cloud.Word提供了watermarksApi接口可用于添加水印,包括添加文本水印(SetTextWatermark).图片水印(SetImageWatermark),本文将对 ...

  7. java常用开发工具类之 图片水印,文字水印,缩放,补白工具类

    import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...

  8. C# 处理PPT水印(二)——去除水印效果(文本水印、图片水印)

    本文将对C#处理PPT幻灯片中的水印进一步说明和介绍.在C# 处理PPT水印(一)一文中,分享了如何插入水印效果的方法,包括插入文字水印效果.插入图片作为水印效果两种情况,那对于不需要水印效果的情况, ...

  9. PHP图片加文字水印和图片水印方法(鉴于李老师博客因没加水印被盗,特搜集的办法。希望能有用!)

    $dst_path = 'dst.jpg'; //创建图片的实例 $dst = imagecreatefromstring(file_get_contents($dst_path)); //打上文字 ...

随机推荐

  1. 深入浅出TypeScript(2)- 用TypeScript创建web项目

    前言 在第一篇中,我们简单介绍了TypeScript的一些简单语法,那么如果我们只是简单使用TypeScript开发一个web项目,应该做哪些准备?接下来我们就结合TypeScript和Webpack ...

  2. js遍历API总结

    1.for 循环 普通遍历方法,可优化,存下数组的length,避免每次都去获取数组的length,性能提升 2.for-in 可遍历数组和对象, (for key in obj){} 该方法既可以读 ...

  3. CodeForces 909D

    题意略. 思路: 将字符分桶,然后暴力去扫,扫完合并.假设有k个桶,每个桶里有n / k个数,那么我们应该要扫 n / (2 * k)次,每次的复杂度是k,最后算得复杂度是O(n). 详见代码: #i ...

  4. Sherlock之Instructions指令介绍(Sherlock Version: 7.2.5.1 64-bit)

    指令集总览              1.General 1).Comment:: 注释指令. 2).Image Window: 创建新的图像窗口. True: 取像之后更新图像窗口显示:False: ...

  5. [python]代码中包含中文,提示:SyntaxError: Non-ASCII character '\xcd'

    解决方法: 把文件编码方式改为gbk即可.在代码开头写上: # coding=gbk

  6. CodeForces 522C Chicken or Fish?

    Chicken or Fish? 题意比较难理解. 需要注意的是 就算某个人抱怨了 但是的t[i]也是他最后选择的结果. 题解: 首先考虑没有r[i] = 1的情况. 直接记录t[i]=0的数目,最后 ...

  7. poj 2763 Housewife Wind(树链剖分+单点查询+区间修改)

    题目链接:http://poj.org/problem?id=2763 题意:给一个数,边之间有权值,然后两种操作,第一种:求任意两点的权值和,第二,修改树上两点的权值. 题解:简单的树链剖分. #i ...

  8. CF 450E Jzzhu and Apples 数学+模拟

    E. Jzzhu and Apples time limit per test 1 second memory limit per test 256 megabytes input standard ...

  9. uwsgi基本介绍安装和测试--使用Django建立你的第一个网站

    一 基本介绍 对像我这样不是专业做网络的人来说,uuwsgi是一个陌生的东西.它是谁?它可以做什么?谁会用到它?其实,在不知道一个东西是什么的情况下,能够快速的了解并使用它,是一门很有艺术性的事情.最 ...

  10. .NET Core 微信小程序退款——(统一退款)

    继上一篇".NET Core 微信小程序支付——(统一下单)后",本文将实现统一退款功能,能支付就应该能退款嘛,一般涉及到钱的东西都会比较敏感,所以在设计退款流程时一定要严谨,不能 ...