给pdf文件添加防伪水印logo(附工程源码下载)
pdf添加水印logo这种需求场景确实很少,有些时候一些销售单据生成pdf添加一个水印logo,做一个简单的防伪效果,虽然实际上并没有太大作用,但是产品经理说要,巴拉巴拉……省略一万字。
下面将源码分享给猿友们,有用就looklook,没用就转移视线吧。
一、效果展示
没加水印的pdf:
添加水印后的pdf:
这里截图效果可能不是很明显,有需要的猿友可以直接下载下面的源码压缩包,里面有添加水印后的pdf文件。
二、源码下载
http://download.csdn.net/detail/u013142781/9421432
里面的pdf_project.zip是源码,源码环境eclipse+maven
三、实例说明
工程需要添加itextpdf包依赖,maven依赖为:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.3</version>
</dependency>
除了依赖以外,就一个类PDFAddWaterMark.java了,其代码如下:
package com.luo.pdf;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Random;
public class PDFAddWaterMark {
static final float IAMGE_HEIGHT = 110f; // 限制水印图片的的高度
static final float IAMGE_WIDTH = 110f; // 限制水印图片的的宽度
/**
* 给pdf文件添加水印
* @param file 要加水印的原pdf文件
* @throws Exception
*/
public static void addPdfMark(File file) throws Exception {
// 如果是web项目,应该从web项目里面获取logo
// String markImagePath =
// request.getSession().getServletContext().getRealPath("/") +
// "resources/images/logo.jpg";
String markImagePath = "C:/Users/luoguohui/Desktop/logo.jpg"; // 水印图片路径
PdfReader reader = new PdfReader(file.getPath(), "PDF".getBytes());
// 如果是web项目,直接下载应该放到response的流里面
// PdfStamper stamp = new PdfStamper(reader,
// response.getOutputStream());
// 添加水印之后的pdf文件
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(
"C:/Users/luoguohui/Desktop/afterAddPdfMark.pdf"));
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 + 2, k++) {
Random random = new Random();
Image img = Image.getInstance(markImagePath);// 插入水印
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();
gs.setFillOpacity(0.3f); // 设置透明度为0.3
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 {
// 添加水印之前的pdf文件
File file = new File("C:/Users/luoguohui/Desktop/beforeAddPdfMark.pdf");
addPdfMark(file);
}
}
这里有必要对上面的代码说明的是:其实就是在pdf里面加入图片logo,只是这些图片logo不会遮挡住文字,而且有一定的透明度。另外logo随机旋转一定的角度。再另外,其出现的位置,根据当前页的高度计算出一页需要多少行logo,每行左边一个右边一个,然后其位置上下左右在一定范围内随机。代码实现就这样,如果还有什么不明白的可以留言。
给pdf文件添加防伪水印logo(附工程源码下载)的更多相关文章
- 转:微信开发获取地理位置实例(java,非常详细,附工程源码)
微信开发获取地理位置实例(java,非常详细,附工程源码) 在本篇博客之前,博主已经写了4篇关于微信相关文章,其中三篇是本文基础: 1.微信开发之入门教程,该文章详细讲解了企业号体验号免费申请与一 ...
- 仿爱乐透android客户端界面实现(附工程源码)
最近研究了爱乐透android客户端的界面,感觉它的界面布局在一般开发中具有代表性.难点在于复杂的布局实现. 界面实现主要采用了以下方式: 注意:版本支持:android2.2以上,低版本要改动源码哦 ...
- 微信开发获取地理位置实例(java,非常详细,附工程源码)
在本篇博客之前,博主已经写了4篇关于微信相关文章,其中三篇是本文基础: 1.微信开发之入门教程,该文章详细讲解了企业号体验号免费申请与一些必要的配置,以及如何调用微信接口. 2.微信开发之通过代理调试 ...
- PDF文件添加二维码水印教程
maven配置iText的jar,主要不是所有私服都有iText的jar,maven仓库没有的,可以去https://mvnrepository.com/artifact/com.itextpdf/i ...
- PDF怎么添加文字水印与图片水印
现在是个知识分享时代,但不可避免的盗版也无处不在,不知道在我们大家身边有没有遇到过这样的情况:自己煞费苦心制作的PDF文档不知道在什么时候就会被别人给盗用了,那么如何才能尽量避免这个问题呢?今天带大家 ...
- Java给图片和PDF文件添加水印(图片水印和文字水印)
有时候我们看到的图片或者PDF文件会自动加上水印.分为文字水印和图片水印. ----------------------------图片水印---------------------------- 1 ...
- 如何给现有的PDF文件添加页码
如何给现有的PDF文件添加页码 之前我写了如何打印PDF文件,有人qq问我怎样在打印时给PDF文件添加页码,的确,给PDF文件添加页码,可以帮助我们区分纸质档的PDF文件页面的先后顺序,方便我们对它的 ...
- PDF怎样添加注释,PDF文件添加注释的方法
Word文件跟纸质文件想要添加注释相信大家都知道该怎么添加,那么现在也使用频率挺高的PDF格式的文件要怎么添加注释呢?添加注释的方法有什么呢?有许多的小伙伴们都想知道吧,今天小编就来跟大家分享一下,想 ...
- 如何使用C#程序给PDF文件添加编辑域
PDF文档通常是不能编辑的,但有些时候需要在PDF文档中填写日期或签名之类,就需要在PDF有能编辑的文本域,本文介绍怎样用C#来实现这一功能. 环境 工具:VS2015 语言:C# 操作PDF类库:i ...
随机推荐
- drupal8之分类
示例: 我的相册 一.创建分类 1.创建一个相册 点击[结构]>[Taxonomy]>[+add vocabulary] 点击[保存] 2.创建相册的分类 点击[+add term] 点击 ...
- HTTP你真的懂了吗?
最近面试踩了些坑,自己看书看过的内容,即使能记得差不多,回答起来就是很混乱(绝望脸).比如HTTP的这几个问题,现在整理一下,一个点一个点的说! 1. 聊一聊你理解的HTTP 1) Http ...
- openfire彻底卸载的方法
最近百度找openfire彻底卸载的方法,很多都是三句命令行的答案.但是那三句真的无法完全卸载 终于从openfire官网找到了卸载的命令 终端执行下面的命令 sudo rm -rf /usr/loc ...
- scrapy下载图片到自己的目录,创建缩略图,存储入库
环境和工具:python2.7,scrapy 实验网站:http://www.27270.com/tag/333.html 爬去所有兔女郎图片,下面的推荐需要过滤 逻辑:分析网站信息,下载图片和入库 ...
- ES6(解构赋值)
解构赋值 1.什么是解构赋值? 在语法上,就是赋值的作用,解构为(左边一种解构.右边一种解构,左右一一对应进入赋值) 2.解构赋值的分类. 1.左右为数组即为数组解构赋值:2.左右为对象即为对象解构赋 ...
- codevs 3249 搭积木
提交地址:http://codevs.cn/problem/3249/ 3249 搭积木 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目 ...
- [WC 2013]糖果公园
Description 题库链接 给你一棵 \(n\) 个节点,有 \(m\) 种颜色的树.每个节点上有一个颜色.定义一条树上路径的价值为 \[\sum_c V_c(\sum_{i=1}^{tim_c ...
- [NOIp 2012]同余方程
Description 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. Input 输入只有一行,包含两个正整数 a, b,用一个空格隔开. Output 输出只有一行,包含一个 ...
- NOI2006 郁闷的出纳员
题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资 ...
- bzoj3944Sum
3944: Sum Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5149 Solved: 1385[Submit][Status][Discuss ...