导出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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 投影,投影矩阵,正交投影矩阵的区别_矩阵论正交投影

    投影,投影矩阵,正交投影矩阵的区别_矩阵论正交投影1、投影2、幂等矩阵3、正交投影

    2022年10月4日
    2
  • 正確使用 SetCapture ReleaseCapture [譯]「建议收藏」

    正確使用 SetCapture ReleaseCapture [譯]「建议收藏」本文描述瞭如何正確處理自定義窗口和控件中的鼠標捕獲操作。原文鏈接: http://www.codeproject.com/Tips/127813/Using-SetCapture…correctly.aspx原作者: pasztorpisti轉載請註明出處:http://www.imoldman.com/2010/11/30/using-setcaptu…ture-corre

    2022年5月24日
    33
  • 基于伯努利原理的速度监测芯片可用于天然气管道泄露检测

    基于伯努利原理的速度监测芯片可用于天然气管道泄露检测基于伯努利原理的速度监测芯片跟杭州迈煌科技用光纤水听器侦听传感技术类似,可用于天然气管道泄露检测。安装操作简单,可在不破坏现有管道下安装,工程易实现。

    2022年6月17日
    34
  • jtl转换成html,Jmeter的jtl文件转换HTML报告[通俗易懂]

    jtl转换成html,Jmeter的jtl文件转换HTML报告[通俗易懂]Jmeter我们用做接口测试的时候使用可视化界面,可以通过查看结果树或者聚合报告来观看结果。但是,在工作中,这样的结果,往往也要成为你测试报告的一部分,傻的办法当然是截图,然后展示,这样的傻办法,我用了几次就不想再用,一次截图次数太多,让人看的眼花缭乱,不能很好的体现我们测试报告的准确性和说服力。做为一个,测试开发,就要来解决这样的问题,尽量把重复工作降低,提升工作效率。通过参考,我找到了Jmet…

    2025年7月2日
    2
  • 浅谈 HTTP 和 HTTPS[通俗易懂]

    浅谈 HTTP 和 HTTPS[通俗易懂]HTTP作为我们浏览器与服务器之间通讯协议,目前这块知识成为了面试的高频率题,也是我们前后端同学必须掌握的部分,一起来看看吧!

    2022年10月16日
    7
  • pycharm如何统一改变量名_pycharm批量修改变量名

    pycharm如何统一改变量名_pycharm批量修改变量名在使用文字工具写小说的时候,如果你想改变主人公的姓名,可以通过快捷方式一键全改,而不用逐个更改。那么在用pycharm编辑代码的时候,该如何将代码中的变量名称进行一键更改呢?按快捷键Ctrl+r,弹出以下页面,在这个页面中我标出了两个红框。左边红框中有两个输入栏,上面的是你的原变量名,下面是你要改为的新变量名;将原变量名和新变量名输入之后,去右边的边框中选择局部替换还是全部替换即可。…

    2022年8月28日
    3

发表回复

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

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