给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,每行左边一个右边一个,然后其位置上下左右在一定范围内随机。代码实现就这样,如果还有什么不明白的可以留言。

时间: 2024-10-14 05:01:18

给pdf文件添加防伪水印logo(附工程源码下载)的相关文章

Log4j日志在java项目中的使用(附工程源码)

一.关于Log4j日志 Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等:我们也可以控制每一条日志的输出格式:通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程.最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码. 在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外,Apache为我们

PDF文件添加二维码水印教程

maven配置iText的jar,主要不是所有私服都有iText的jar,maven仓库没有的,可以去https://mvnrepository.com/artifact/com.itextpdf/itextpdf/5.5.12 这里下载 <!-- itextpdf --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> &l

给PDF文件添加页码的方法

今天小编给大家带来的是给PDF文件添加页码的方法.在我们工作中,每天都要处理大量不同格式的文件,PDF文件就是其中的一种.当我们在查阅PDF文件的时候,为了方便查阅,给PDF文件添加页码是个不错的主意.好了,话不多说,开始我们今天的学习吧. 操作软件:迅捷PDF编辑器 工具下载地址:https://www.xunjiepdf.com/editor 1.想要给PDF文件添加页码,首先我们需要有一个能够编辑PDF文件的工具来使用.这里小编使用的是迅捷PDF编辑器. 2.当我们用工具将PDF文档打开后

pdf文件添加页码方法介绍

最近常常有朋友问我pdf文件怎么添加页码,所以今天我给大家介绍一款国外的小软件:A-PDF Number的使用方法.该款软件非常的小,只有几百K的大小,在百度上搜索就可以下载. 工具下载地址:https://www.xunjiepdf.com/editor 1.当我们打开A-PDF Number后,点击Browser,这时候会弹出文件夹,我们在文件夹中选择需要添加页码的pdf文件. 2.打开文件后,我们对页码进行设置.Page Begin后面我们需要输入的是开始页码,通常我们选择1.Page E

如何给PDF文件添加页眉页脚?你知道哪种方法简单吗?

如何给PDF文件添加页眉页脚呢?我们在使用PDF文件的时候,想要给PDF文件添加页眉页脚,但是不知道怎么操作,其实想要给PDF文件添加页眉页脚还是比较简单的,下面小编就为大家操作一下PDF编辑器给PDF文件添加页眉页脚的方法. 操作软件:迅捷PDF编辑器 具体操作方法: 1:首先将迅捷PDF编辑器安装到电脑中,双击打开PDF编辑器,将PDF文件添加到软件中. 2:在软件顶部找到文档,点击文档找到页眉页脚,将鼠标移动到页眉页脚的位置,在右侧就可以找到添加. 3:点击添加在软件中就会出现一个弹窗,在

PDF编辑技巧之如何给PDF文件添加文本框工具?

如何给PDF文件添加文本框工具?PDF文件添加文本框工具的方法是什么?PDF文件是现在人们常用的一种文件格式,同其他文件一样只是一种单纯的文件格式.PDF文件因为本身的安全性和保密性导致不易编辑,想要编辑PDF文件需要专业的编辑工具来进行. 那么如何给PDF文件添加文本框工具呢?这有一款专业的编辑工具迅捷PDF编辑器,下面就一起来看看它是如何实现PDF文件添加文本框的吧!一.运行下载安装好的PDF编辑器软件打开进入到首页,在首页找到并点击[打开更多文件]按钮把准备好的PDF文件添加到软件上:二.

PDF文件怎么编辑 怎么给PDF文件添加展平注释

PDF文件怎么编辑 怎么给PDF文件添加展平注释?PDF文件有很多操作,添加PDF页面,添加PDF注释,删除PDF文件页面都是可以的,这里重点讲下PDF文件添加注释. 1.首先要在百度打开工具迅捷PDF编辑器,这是网站的首页,可以看到PDF编辑器界面. 2.点击打开更多文件,然后选择一个文件打开,最近编辑过的PDF文件也可以看到. 3.首先功能都需要熟悉下,这个是视图,可以看到一些基本的操作都在这. 4.接下来进入正题,这里添加展平注释,根据自己需求去添加注释. 5.弄好之后点击确定按钮,页面范

如何给PDF文件添加注释?

我们常常会在看一些文章时遇到不理解或者读不懂的地方,让人苦恼又懵圈,或者一些重要的事情又担心自己忘记了,还有一些重点细节需要注意,这些情况下都需要我们去做注释.在我们日常工作中,PDF文件中常常会出现标注,标注可以让阅读者更好的理解文章要表达的意思,同时也可以给用户科普下相关知识.那么PDF标注功能怎么用呢? 方法介绍: 1.运行安装在电脑上的PDF编辑器,打开软件界面之后,我们点击软件左上方的"打开"选项,打开我们需要进行编辑的PDF文件 2.进入软件界面之后,在菜单栏找到"

C#如何在PDF文件添加图片印章

文档中添加印章可以起一定的作用,比如,防止文件随意被使用,或者确保文档内容的安全性和权威性.C#添加图片印章其实也有很多实现方法,这里我使用的是免费的第三方软件Free Spire.PDF,向大家阐述如何以编程的方式在PDF文件中添加图片印章. 具体步骤如下: 在此之前,我们需要添加dll文件作为引用.添加引用 → 浏览 → Spire.XLS folder → Bin → .NET 2.0/3.5/4.0/4.5/4.0 ClientProfile → Spire.XLS.dll. 第一步:首