java pdf加水印

这篇具有很好参考价值的文章主要介绍了java pdf加水印。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文将Base64编码形式的pdf文件加水印,并输出完成后的pdf的Base64编码,也可以根据情况自行改动,输出其他形式的内容。

首先引入两个包

        <!-- PDF文件依赖包 -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.13.1</version>
        </dependency>
        <!-- PDF文件字体 防止中文乱码 -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>

 完整代码如下:

package com;

import com.itextpdf.text.Element;
import com.itextpdf.text.pdf.BaseFont;
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 sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;


public class testPdf {

    public static void main(String[] args) {

        try {

            String pdfBase64 = "JVBERi0xLjQKJeLjz9MKMiAwIG9iago8PC9MZW5ndGggOTEvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0KeJwr5HIK4TI2U7AwMFMISeEyUNA1tAAx9N0MFQyNFELSuDQ8UnNy8hXC84tyUhSpytYMyQJaaIBirwYN7Bm1c9DaiVVLQUoadRF9bCHbRiTFriFcgVwADhAu8AplbmRzdHJlYW0KZW5kb2JqCjQgMCBvYmoKPDwvVHlwZS9QYWdlL01lZGlhQm94WzAgMCA1OTUgODQyXS9SZXNvdXJjZXM8PC9Gb250PDwvRjEgMSAwIFI+Pj4+L0NvbnRlbnRzIDIgMCBSL1BhcmVudCAzIDAgUj4+CmVuZG9iagoxIDAgb2JqCjw8L1R5cGUvRm9udC9TdWJ0eXBlL1R5cGUxL0Jhc2VGb250L0hlbHZldGljYS9FbmNvZGluZy9XaW5BbnNpRW5jb2Rpbmc+PgplbmRvYmoKMyAwIG9iago8PC9UeXBlL1BhZ2VzL0NvdW50IDEvS2lkc1s0IDAgUl0+PgplbmRvYmoKNSAwIG9iago8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMyAwIFI+PgplbmRvYmoKNiAwIG9iago8PC9Qcm9kdWNlcihpVGV4dK4gNS41LjEzLjEgqTIwMDAtMjAxOSBpVGV4dCBHcm91cCBOViBcKEFHUEwtdmVyc2lvblwpKS9DcmVhdGlvbkRhdGUoRDoyMDIzMDcwNjE0NTUzOCswOCcwMCcpL01vZERhdGUoRDoyMDIzMDcwNjE0NTUzOCswOCcwMCcpPj4KZW5kb2JqCnhyZWYKMCA3CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDI4NCAwMDAwMCBuIAowMDAwMDAwMDE1IDAwMDAwIG4gCjAwMDAwMDAzNzIgMDAwMDAgbiAKMDAwMDAwMDE3MiAwMDAwMCBuIAowMDAwMDAwNDIzIDAwMDAwIG4gCjAwMDAwMDA0NjggMDAwMDAgbiAKdHJhaWxlcgo8PC9TaXplIDcvUm9vdCA1IDAgUi9JbmZvIDYgMCBSL0lEIFs8YTRkYTc4NmQ5MTllZDllMTg2NzQ0MDJlMDMwYWJhNzk+PGE0ZGE3ODZkOTE5ZWQ5ZTE4Njc0NDAyZTAzMGFiYTc5Pl0+PgolaVRleHQtNS41LjEzLjEKc3RhcnR4cmVmCjYyOAolJUVPRgo=";
            String waterMarkName = "这是测试水印";


            BASE64Decoder base64Decoder = new BASE64Decoder();
            byte[] decodeBuffer = base64Decoder.decodeBuffer(pdfBase64);
            String outBase64 = PDFAddWatermark(pdfBase64, waterMarkName);
            // 为了验证结果方便,直接转为文件到本地
            FileOutputStream fos = new FileOutputStream("C:\\Users\\zh\\Desktop\\a.pdf");
            fos.write(base64Decoder.decodeBuffer(outBase64));
            fos.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 给PDF添加水印
     * @param pdfBase64 原文件base64编码
     * @param waterMarkName 添加水印的内容
     */
    public static String PDFAddWatermark(String pdfBase64, String waterMarkName) throws Exception {
        // 每页水印行数
        int row = 7;
        // 每行水印个数
        int col = 3;
        // 旋转角度
        float rotation = 30f;
        BASE64Decoder base64Decoder = new BASE64Decoder();
        byte[] decodeBuffer = base64Decoder.decodeBuffer(pdfBase64);
        // 读取PDF
        PdfReader reader = new PdfReader(decodeBuffer);
        //创建字节数组输出流
        ByteArrayOutputStream ous =new ByteArrayOutputStream();
        // 创建字节缓冲输出流
        BufferedOutputStream bos = new BufferedOutputStream(ous);
        // 输出的PDF文件内容
        PdfStamper stamper = new PdfStamper(reader, bos);
        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;
        int total = reader.getNumberOfPages();//pdf文件页数
        for (int i=0; i<total; i++) {
            // 在内容上方加水印
            content = stamper.getOverContent(i+1);
            // 在内容下方加水印
            // content = stamper.getUnderContent(i+1);
            //开始写入
            content.beginText();
            content.setGState(gs);
            //字体大小
            content.setFontAndSize(base, 20);
            //每页7行,一行3个
            for (int j=0; j<col; j++) {
                for (int k=0; k<row; k++) {
                    float x = reader.getPageSize(i+1).getWidth() / col * j + 90;
                    float y = reader.getPageSize(i+1).getHeight() / row * k;
                    //showTextAligned 方法的参数(文字对齐方式,位置内容,输出水印X轴位置,Y轴位置,旋转角度)
                    content.showTextAligned(Element.ALIGN_CENTER, waterMarkName, x, y, rotation);
                }
            }
            // 添加水印文字
            content.endText();
        }
        stamper.close();
        //添加水印后pdf的base64
        byte[] bytes = ous.toByteArray();
        ous.close();
        bos.close();
        reader.close();
        return new BASE64Encoder().encode(bytes);
    }

}

结果展示a.pdf:

java pdf加水印,java,java,pdf

 文章来源地址https://www.toymoban.com/news/detail-531744.html

到了这里,关于java pdf加水印的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java实现pdf文件添加水印,下载到浏览器

    添加itextpdf依赖 根据需求,不需要指定路径可以删除对应的输出流 效果如下:代码中的相对路径在src平级目录下,test.pdf是PdfStamper里面fileOutputStream生成的,test1.pdf是fos生成的 浏览器下载的如下: 生成的pdf内容如下(红框里面是pdf原来的内容,可以自己调整代码中注释掉的设

    2024年02月05日
    浏览(60)
  • (Java)word转pdf(aspose),pdf加水印(itextpdf),并支持POI模板(包括checkbox)导出

    目录 1、引入jar包 2、pdf处理工具类 3、poi模板导出工具类 4、测试类 5、模板 6、最终效果  1、引入jar包   2、pdf处理工具类  3、poi模板导出工具类  4、测试类 5、模板 6、最终效果 

    2024年02月06日
    浏览(73)
  • Java 使用 poi 和 aspose 实现 word 模板数据写入并转换 pdf 增加水印

    本项目所有源码和依赖资源都在文章顶部链接,有需要可以下载使用 1. 需求描述 从指定位置读取一个 word 模板 获取业务数据并写入该 word 模板,生成新的 word 文档 将新生成的 word 文档转换为 pdf 格式 对 pdf 文档添加水印 2. 效果预览 word 模板 带水印的 pdf 文档 3. 实现思路

    2024年02月08日
    浏览(46)
  • Java给文件加水印,支持.pptx,.doc,.docx,.xls,.xlsx,.pdf,.png,.jpg。

    office 相关格式文档的加密主要使用微软提供的Spire.Office for Java ,free部分有针对性每个类型的API说明和示例,请自行参考以下链接。下面也会附上我在项目中的实际工具类。 Spire.Office for Java | 专业的 Java Office 套件 | 创建、修改、转换、打印 Word/PowerPoint/PDF 文档 我的策略是

    2024年02月12日
    浏览(66)
  • Java实现自动化pdf打水印小项目 使用技术pdfbox、Documents4j

    博主介绍:✌目前全网粉丝2W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容:Java后端、算法、分布式微服务、中间件、前端、运维、ROS等。 博主所有博客文件目录索引:博客目录索引(持续更新) 视频平台:

    2024年02月20日
    浏览(74)
  • vue 纯前端预览pdf,纯前端实现pdf加水印下载文件也带水印,防止pdf下载

      原理:主要是利用pdfh5这个插件来完成的   使用方法:   1.页面需要有一个容器例子:div id=\\\"demo\\\"/div   2.下载pdfh5插件 npm install pdfh5   (注意:webpack5之后不会下载polyfill 需要手动下载 所以引入pdfh5的时候会报错)   解决方案:下载 node-polyfill-webpack-plugin npm install node-polyfill-

    2024年04月15日
    浏览(68)
  • Demo: 实现PDF加水印以及自定义水印样式

    实现PDF加水印以及自定义水印样式

    2024年01月18日
    浏览(39)
  • C# 图片转PDF,PDF增加水印文字

    好久没写博客了,今天给大家分享一个图片转PDF的相关操作,也算是一次总结吧。 首先需要准备动态库itextsharp.dll,这个dll去网上下载,都可以下载到,C#对PDF的操作都是基于这个类库来实现的。话不多说,直接上代码。

    2024年02月09日
    浏览(51)
  • pdf添加水印

    引入依赖 添加水印 添加字体文件到resouresFontsimsun.ttc 用到的字体文件(幼圆常规,C盘Windows/Fonts目录下 测试用例

    2024年02月07日
    浏览(51)
  • 通dnSpy 去除Spire.PDF的PDF水印

     打开加载Spire.PDF  在 PdfDocument 类中搜索LicenseProtector  点击进入 䯈()  (这个方法每个版本不一样 ,按实际来)修改该方法 永远返回true  鼠标放到第53行  然后鼠标右键 编辑IL指令  进入修改界面  注意高亮第0055行 修改ldc.i4.0为idc.i4.1 点击确定 。  最后一步保存 ,大功告

    2024年02月12日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包