导出pdf文件时加图片水印

导出pdf文件时加图片水印前言:本人探讨的是在导出PDF文件之前先把水印加好,导出后的pdf文件已经加好了水印。

大家好,又见面了,我是你们的朋友全栈君。

前言:本文探讨的是利用pageEvent事件在生成PDF文件的过程中把图片水印加好,这样导出的是加好水印的pdf文件。

  • 1:加入依赖
<!--导出pdf相关-->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.10</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>

  • 2:准备好水印图片,将图片拷贝到项目中

导出pdf文件时加图片水印

  • 3:代码示例,利用pageEvent事件加水印

定义事件类

package itextpdf;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfPageEventHelper;
import com.itextpdf.text.pdf.PdfWriter;

/**
 * @author
 * @description 继承PdfPageEventHelper类来定义事件
 * @date 2018/6/19 11:08$
 */
public class WaterMark1 extends PdfPageEventHelper {

    @Override
    public void onEndPage(PdfWriter writer, Document document) {
        //获取水印图片的路径
        String markImagePath = this.getClass().getClassLoader().getResource("font").getFile() + "/logo.png";
        float pageHeight = document.getPageSize().getHeight();
        float pageWidth = document.getPageSize().getWidth();

        try {
            Image img = Image.getInstance(markImagePath);//生成水印图片
            final float IMAGE_SIZE = 0.6f;//图片缩放比例,大小0
            float plainWidth = img.getPlainWidth() * IMAGE_SIZE;
            float plainHeight = img.getPlainHeight() * IMAGE_SIZE;
            img.scaleAbsolute(plainWidth, plainHeight);//设置图片大小
            img.setAlignment(Image.UNDERLYING); // 在字下面
            //设置水印图片的坐标。
            img.setAbsolutePosition(pageWidth - plainWidth - 35, pageHeight - plainHeight - 5);
            //image.setRotation(-30);//设置旋转 弧度
            //image.setRotationDegrees(-45);//设置旋转 角度
            //image.scalePercent(50);//设置依照比例缩放,与设置大小作用相同

            //将水印图片加入到文档中,可使用循环添加多个,添加多个时注意每个图片的坐标等属性
            document.add(img);

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

    }
}

添加事件,注意要加在document.open()之前

        //创建document
        Document document = new Document(PageSize.A4);
        //设置要导出的文件名
        File file = new File("C:\\Users\\Administrator\\Desktop\\test.pdf");
        OutputStream outputStream = new FileOutputStream(file);
        PdfWriter writer = PdfWriter.getInstance(document, outputStream);
        //开始写
        writer.setPageEvent(new WaterMark1());//水印内容
        document.open();
        //此处省略写入文字过程...
        document.close()

  • 4,效果展示

导出pdf文件时加图片水印

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144913.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月12日 下午6:40
下一篇 2022年5月12日 下午6:40


相关推荐

  • 8086汇编翻译机器码_8086汇编编程手册

    8086汇编翻译机器码_8086汇编编程手册汇编指令与机器码的相互转换 贴子发表于:2008-10-2812:48:03 机器语言我们只要重点理解一下几个概念:1.机器语言指令有操作码(OP)和地址码两部分组成|_____________OP_______________|__d__|__w__||_____________OP_______________|__s__|__w__|在多数操作码中,常使用某些位来

    2022年10月7日
    3
  • 中国复合调味品市场销售模式与竞争前景展望报告2022-2027年

    中国复合调味品市场销售模式与竞争前景展望报告2022-2027年中国复合调味品市场销售模式与竞争前景展望报告 2022 2027 年 报告编号 BG 出版时间 2022 年 3 月 出版机构 中智正业研究院免费售后服务一年 具体订购流程欢迎咨询客服人员 内容简介 第 1 章 复合调味品行业研究范围界定及发展环境剖析 1 1 复合调味品行业概念界定及统计口径说明 1 1 1 调味品的概念界定 1 调味品 2 复合调味品 1 1 2 复合调味品所属 国民经济行业分

    2026年3月18日
    2
  • 系统结构-并行算法FORK JOIN[通俗易懂]

    系统结构-并行算法FORK JOIN[通俗易懂]并行算法FORKJOIN一、FORKJOIN定义二、举例题目分析:一、FORKJOIN定义FORK语句的形式:FORKm,其中m为新进程开始的标号。执行FORKm语句时,派生出标号为m开始的新进程,具体为:1、准备好这个新进程启动和执行所必需的信息;2、如果是共享主存,则产生存储器指针、映像函数和访问权数据;3、将空闲的处理机分配给派生的新进程,如果没有空闲处理机,则让它们排队等待;4、继续在原处理机上执行FORK语句的原进程。与FORK语句相配合,作为每个并发进程的终端语句J

    2026年1月31日
    5
  • dropdownlist事件的用法_list down

    dropdownlist事件的用法_list down前台添加了DropDownList以后,ListItem设置完成以后,想添加事件SelectedIndexChanged,如果没有在前台设置属性AutoPostBack=”true”,事件是不能触发的.下面是我修改成功的例子:前台代码:                                                                    

    2025年11月2日
    4
  • java 取余和取整_Java取整、取余

    java 取余和取整_Java取整、取余参考链接:http://blog..net/wanlixingzhe/article/details/7359809参考链接:http://bbs..net/topics/390677448(6楼)参考链接:http://blog.sina.com.cn/s/blog_6940cab30101hji5.html最近在做一个计算的时候用到了取整取余的计算,这里对取整、取余、取模做一下总结~~~1、取…

    2022年5月30日
    165
  • java工程师项目经验_java初级工程师项目经验简历范文

    java工程师项目经验_java初级工程师项目经验简历范文项目经验(案例一)项目时间:2015-01-2015-06项目名称:DRGS审核系统|项目工具:win8项目描述:项目介绍涉及技术:jQuery+Ajax+JSON+Spring(MVC,IOC,AOP)+MyBatis+sqlserver+jqgrid+bootstrap+layer项目说明:针对医院drgs进行管理。院长使用系统可以在考察本医院各科室能力和综合实力在同属医院中的排名,从…

    2022年10月21日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号