最近有个需求再PDF中添加水印。

原本使用的方法如下:

WaterMarkHandler waterMarkHandler = new WaterMarkHandler(waterMark);
outDocument.addEventHandler(PdfDocumentEvent.INSERT_PAGE, waterMarkHandler);
// 获取总页数
int numberOfPages = redDocument.getNumberOfPages();
for (int i = 1; i <= numberOfPages; i++) {PdfPage page = redDocument.getPage(i);// 复制每页内容添加到新的文件中outDocument.addPage(page.copyTo(outDocument));
}
WaterMarkHandler.java
public class WaterMarkHandler implements IEventHandler{private String waterMarkContent = "";public WaterMarkHandler(String str){this.waterMarkContent = str;}@Overridepublic void handleEvent(Event event) {PdfDocumentEvent documentEvent = (PdfDocumentEvent) event;PdfDocument document = documentEvent.getDocument();PdfPage page = documentEvent.getPage();JLabel label = new JLabel();label.setText(this.waterMarkContent);PdfFont pdfFont = null;try {// 将字体包拖到路径下pdfFont = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);} catch (IOException e) {e.printStackTrace();}PdfCanvas canvas = new PdfCanvas(page);PdfExtGState gs1 = new PdfExtGState();// 水印透明度gs1.setFillOpacity(0.5f);canvas.setExtGState(gs1);new Canvas(canvas, document, page.getPageSize()).setFontColor(ColorConstants.LIGHT_GRAY).setFontSize(60).setFont(pdfFont).showTextAligned(new Paragraph(String.valueOf(this.waterMarkContent)), 298, 421,document.getPageNumber(page), TextAlignment.CENTER, VerticalAlignment.MIDDLE, 45);}
}

后来发现在 office通过microsoft print to pdf   的方式转换的PDF,水印会被镜像。

将之前的这部分代码注释掉,直接改用下面的这种方式。

// 解决水印镜像问题
private static int copyPdfPagesFixed(PdfDocument source, PdfDocument target, int start, int pages, int number,String  waterMarkContent) {int oldC;int max = start + pages - 1;Text text;for (oldC = start; oldC <= max; oldC++) {text = new Text(waterMarkContent);source.copyPagesTo(oldC, oldC, target);PdfPage newPage = target.getLastPage();Rectangle pageSize = newPage.getCropBox();try (Canvas canvas = new Canvas(new PdfCanvas(newPage, true), target, pageSize)  ) {PdfCanvas pdfcanvas = new PdfCanvas(newPage);PdfExtGState gs1 = new PdfExtGState();// 水印透明度gs1.setFillOpacity(0.5f);pdfcanvas.setExtGState(gs1);canvas.setFontColor(ColorConstants.LIGHT_GRAY).setFontSize(60).showTextAligned(new Paragraph(text), 298,421, source.getPageNumber(newPage), TextAlignment.CENTER, VerticalAlignment.MIDDLE, 45);}}return oldC - start;
}   

ITEXT7 填写斜文字水印被镜像相关推荐

  1. java 给 pdf文件添加水印 | Itext7 | 文字水印 | 图片水印 | 多重水印

    java | Itext7 水印 | 文字水印 | 图片水印 本地开发环境:jdk1.8 效果图: maven依赖: <dependency><groupId>com.itex ...

  2. php给图片添加文字水印

    PHP对图片的操作用到GD库,这里我们介绍如何给图片添加文字水印. 大致分为四步: 1.打开图片 2.操作图片 3.输出图片 4.销毁图片 下面我们上代码来具体讲解每步的实现过程: <?php/ ...

  3. 阿里云 OSS 对象存储 OSS 图片加文字水印

    阿里云 OSS 对象存储 实际开发需先阅读 阿里云 [OSS快速入门文档](https://help.aliyun.com/document_detail/31883.html?spm=5176.20 ...

  4. java pdf水印排布问题_java实现图片和pdf添加铺满文字水印

    依赖jar包 com.itextpdf itextpdf 5.3.2 com.itextpdf itext-asian 5.2.0 一,图片添加铺满水印 ======================= ...

  5. php生成图片文字水印

    创建图片文字水印的步骤: 1.打开图片: 2.获取图片信息(通过GD库提供的方法,得到你想要的处理图片的信息): 3.操作图片: 4.写入文字: 5.输出图片; 6.保存图片:7.销毁图片: 详细步骤 ...

  6. uni-app APP,H5图片上传添加文字水印,图片只显示左上角bug(H5,安卓App可用,其他暂未测试)

    项目场景: 提示:这里简述项目相关背景: uni-app上传图片添加文字水印功能时图片只显示左上角,或者图片重叠 图片不规则一系列bug,特此记录 问题描述 提示:这里描述项目中遇到的问题: 上传图片 ...

  7. ffmpeg学习心得之一键处理视频图片合成加图片水印文字水印裁剪

    学了一个晚上,下面是我写的批处理 window命令行批处理直接拖文件夹或者拖动视频或者拖动音频可一键生成mp4.或者批量生成图片,或者生成gif https://download.csdn.net/d ...

  8. 用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)

    javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置.大小.粗度.翻转.平滑等操作 javaCV图像处理之2:实时视频添加图片水 ...

  9. 用Asp.net实现简单的文字水印

    经常看见MOP上有人贴那种动态的图片,就是把一个字符串作为参数传给一个动态网页,就会生成一个带有这个字符串的图片,这个叫做文字水印.像什么原来的熊猫系列,还有后来的大树和金条,都挺有意思.这东西看着挺 ...

最新文章

  1. FPGA中如何实现双边沿采样?
  2. 织梦后台上传文章的php文件是那个,如何在织梦文章中上传视频及调用视频
  3. 【小题目】输入三个数字,获取三个数字中的最小值
  4. kaggle中安装lightgbm的gpu版本
  5. 深度学习---卷积神经网络(CNN)
  6. Web Client Software Factory系列(4):数据绑定和ObjectContainerDataSource控件
  7. heka 输出到mysql_用php与mysql的电子贺卡程序
  8. 微软将 Teams 移动应用纳入漏洞奖励计划,最高奖金3万美元
  9. bspline怎么使用 python_零基础5个月快速学会Python的秘诀
  10. [Windows 故障]Ping通却无法连接网页 + Apple Mobile Device 自动停止
  11. matlab色差,科学网—实用图片处理技巧(1)---MATLAB学习笔记 - 冯竟超的博文
  12. 关于IplImage中widthstep的大小与width,nchanne
  13. 用于空间搜索的四叉树
  14. DedeCMS总是提示验证码不正确的解决方法
  15. php 12306查询结果,使用php怎么编写一个12306余票查询功能
  16. 外包怎么了?请不要“妖魔化”它。
  17. mac 版VirtualBox 安装win10方法 全屏
  18. 怎么找回xmind意外关机的文件_Xmind 导图保存丢失怎么找回?
  19. word-break:break-word、word-break:break-all和word-wrap:break-word 自动换行
  20. (转)TSQL和PLSQL的区别

热门文章

  1. ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password]
  2. Oracle ORA
  3. C#开发生产线MES系统软件源码
  4. nao机器人Python+pycharm+naoqi平台搭建
  5. E-R图转成关系规则及范式
  6. 拼多多店铺入驻操作流程、打造店铺爆款方法
  7. 使用Visio建立数据库模型视图(数据库模型图、数据视图)
  8. foxmail客户端,写邮件窗口弹不出来
  9. CCF计算机软件能力认证201809-2买菜(C语言版)
  10. matlab悬置解耦优化,《基于Matlab的动力总成悬置系统解耦优化.pdf》-支持高清全文免费浏览-max文档...