java实现给PDF文件添加图片水印,java实现给PDF文件添加文字水印
接上一篇,pdf跟tif 是一起做的
java实现
1、给PDF文件添加图片水印:
public static void waterMark1(String inputFile,String outputFile,String eciWaterPath) { MessageInfo msgInfo = new MessageInfo();//消息类try { PdfReader reader = new PdfReader(inputFile);
// PdfReader reader = new PdfReader("\\home\\opt_user\\sp\\GSPT008S\\eci1.pdf"); //main() 用这个System.out.println("读取PDF文件模板完了");PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile)); BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED); Rectangle pageRect = null; PdfGState gs = new PdfGState(); gs.setFillOpacity(0.9f); //透明度gs.setStrokeOpacity(0.1f);int total = reader.getNumberOfPages() + 1; JLabel label = new JLabel(); FontMetrics metrics; int textH = 0; int textW = 0;
// label.setText(waterMarkName); metrics = label.getFontMetrics(label.getFont()); textH = metrics.getHeight();textW = metrics.stringWidth(label.getText()); // //生成水印图片
// String waterPath = ImageUtils.graphicsGeneration("eci");PdfContentByte under; for (int i = 1; i < total; i++) { pageRect = reader.getPageSizeWithRotation(i); under = stamper.getOverContent(i); under.saveState(); under.setGState(gs);under.beginText(); under.setFontAndSize(base, 40); Image img = Image.getInstance(eciWaterPath);System.out.println("读取水印图片模板完了");int size = 25;float img_Width = img.getWidth();float img_Heigth = img.getHeight();float pdfW = pageRect.getWidth();float pdfH = pageRect.getHeight();img.setAbsolutePosition(pdfW-(img_Width*40/100),pdfH-(img_Heigth*6/5));//(X,Y)img.scalePercent(size);under.addImage(img);// under.showTextAligned(Element.ALIGN_LEFT, text, 10, 10, 0);/*under.showTextAlignedKerned(alignment, text, x, y, rotation); alignment 左、右、居中(ALIGN_CENTER, ALIGN_RIGHT or ALIGN_LEFT)text 要输出的文本x 文本输入的X坐标y 文本输入的Y坐标*/// 添加水印文字 under.endText(); } System.out.println("PDF文件水印打印成功!路径:"+outputFile);//说三遍//一定不要忘记关闭流//一定不要忘记关闭流//一定不要忘记关闭流stamper.close(); reader.close();} catch (Exception e) { e.printStackTrace();
// throw new BusinessException("文件不存在:"+inputFile);logger.error("文件不存在:"+inputFile);logger.error(e.getMessage());msgInfo.setSuccess(false);msgInfo.setMessageContent("文件不存在:"+inputFile);throw new BusinessException(MsgIds.GSPT008SDOWNLOAD004,"流程处理过程出现异常,请联系管理员!");} }public static void main(String[] args) throws Exception {
// PDFWatermark pdfw = new PDFWatermark();String inputFile = "\\home\\opt_user\\sp\\GSPT008S\\eci2.pdf";String outputFile = "\\home\\opt_user\\sp\\GSPT008S\\eci2_output.pdf";String eciWaterPath = ImageUtils.graphicsGeneration("eci");waterMark1(inputFile, outputFile,eciWaterPath);}
效果:
2、java实现给PDF文件添加文字水印,并调整文字大小、透明度、旋转角度,铺满整个页面等等
public class AddWatermark {/** 写共通日志 */private static Logger logger = LoggerFactory.getLogger(AddWatermark.class);private static int interval = -5;/*** pdf加水印* @param inputFile* @param outputFile* @param* @param*/public static void waterMark(String inputFile,String outputFile,String waterMarkName) {MessageInfo msgInfo = new MessageInfo();//消息类try { PdfReader reader = new PdfReader(inputFile);
// PdfReader reader = new PdfReader("\\home\\opt_user\\sp\\GSPT008S\\eci1.pdf"); //main() 用这个System.out.println("读取PDF文件模板完了");PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile)); BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED); Rectangle pageRect = null; PdfGState gs = new PdfGState(); gs.setFillOpacity(0.2f); //透明度gs.setStrokeOpacity(0.1f);int total = reader.getNumberOfPages() + 1; JLabel label = new JLabel(); FontMetrics metrics; int textH = 0; int textW = 0; label.setText(waterMarkName);metrics = label.getFontMetrics(label.getFont()); textH = metrics.getHeight();textW = metrics.stringWidth(label.getText());PdfContentByte under;for (int i = 1; i < total; i++) { pageRect = reader.getPageSizeWithRotation(i); under = stamper.getOverContent(i); under.saveState(); under.setGState(gs);under.beginText(); under.setFontAndSize(base, 10);//你可以随心所欲的改你自己想要的角度 水印文字成30度角倾斜for (int height = interval + textH; height < pageRect.getHeight(); height = height + textH * 3) {for (int width = interval + textW; width < pageRect.getWidth() + textW; width = width + textW * 2) {under.showTextAligned(Element.ALIGN_LEFT, waterMarkName, width - textW, height - textH, 30);}}// 添加水印文字 under.endText(); } System.out.println("PDF文件水印打印成功!路径:"+outputFile);//说三遍//一定不要忘记关闭流//一定不要忘记关闭流//一定不要忘记关闭流stamper.close(); reader.close();} catch (Exception e) { e.printStackTrace();
// throw new BusinessException("文件不存在:"+inputFile);logger.error("文件不存在:"+inputFile);logger.error(e.getMessage());msgInfo.setSuccess(false);msgInfo.setMessageContent("文件不存在:"+inputFile);throw new BusinessException(MsgIds.GSPT008SDOWNLOAD004,"流程处理过程出现异常,请联系管理员!");} }public static void main(String[] args) throws Exception {waterMark("D:\\home\\opt_user\\sp\\IMG\\GSPO001Backups\\ECI_716WH0021.pdf","D:\\home\\opt_user\\sp\\IMG\\GSPO001\\ECI_716WH0021.pdf","GTMC补给资料");}}
效果:
java实现给PDF文件添加图片水印,java实现给PDF文件添加文字水印相关推荐
- Java实现一行代码生成二维码,可传输到前端展示,可自定义二维码样式,可设置图片格式,可对二维码添加图片,可对二维码添加文字,可以设置二维码大小、字体大小、字体颜色、边框颜色、边框大小等等
Java实现一行代码生成二维码,可传输到前端展示,可自定义二维码样式,可设置图片格式,可对二维码添加图片,可对二维码添加文字,可以设置二维码大小.字体大小.字体颜色.边框颜色.边框大小等等. 0.准备 ...
- python图片保存为txt文件_python实现对文件中图片生成带标签的txt文件方法
在深度学习中经常需要生成带标签的图片名称列表,xxxlist.txt文件,下面写一个简单的python脚本生成该文件列表. import os def generate(dir,label): fil ...
- 【精】【PDF链接转图片】- Java用pdfbox将PDF的URL转换并压缩成图片,解决“口口口”乱码问题
[业务场景]:做一个开电子发票的业务,中税返回我们一个pdf的url,这个url在web端是可以显示的,移动端:ios可以正常显示,安卓显示为是否要下载.产品邀请发票预览需让用户第一时间看到,不应该有 ...
- C# 处理PPT水印(一)——添加水印效果(文字水印、图片水印)
对文档添加水印可以有效声明和保护文档,是保护重要文件的方式之一.在PPT文档中同样也可以设置水印,包括文本水印和图片水印,本文将讲述如何通过Spire.Presentation for .NET来对P ...
- windows环境实现批量加密文件,并创建加密文件同名(不带后缀)的文件夹,然后把加密文件和图片和文本放入这个文件夹。
1. 需求 我想把资源文件先加密成压缩文件,然后同时创建每个加密压缩文件同名的文件夹,同时需要把这个加密文件拷贝到这个同名的文件夹,然后还需要把一个图片和一个文本文档同时放进这个文件夹,然后在不加密压 ...
- android项目添加图片,安卓开发:往项目中添加并使用图片
一 往项目中添加图片文件 (1)iOS项目 在iOS项目中,如果往项目中添加的图片是png格式的,就是往Assets.xcassets文件夹中添加. 如果不是png格式,比如jpg格式的图片,就不能往 ...
- python根据文件名或后缀名遍历文件夹下所有文件或图片的路径,并计算文件行数
python遍历文件夹下所有文件或图片的路径 代码 指定目录下的指定后缀文件 import glob #获取指定目录下的所有图片 print (glob.glob("\\home\\qiao ...
- vue3+echarts实现世界地图以及轨线(label使用fomatter+rich动态添加图片及背景色,以及label如何添加动态边框色)
背景 最近项目开发,需要开发一个世界地图,并且实现经纬度对应的点对点轨线动效,效果如下: 问题 如何在刚打开页面的时候就显示地点名称 label如何同时添加图片和背景色 label怎么动态修改字体颜色 ...
- java pdf文件转换图片,pdf文件转图片(java实现)
项目中pdf文件太大,在手机端打开缓慢.需要将pdf文件转换成图片.加载比较快,增加用户体验.话不多说,直接上干货. 一.在pom引入依赖的jar org.apache.pdfbox fontbox ...
- pdf文件转图片(java实现)
项目中pdf文件太大,在手机端打开缓慢.需要将pdf文件转换成图片.加载比较快,增加用户体验.话不多说,直接上干货. 一.在pom引入依赖的jar <!-- https://mvnreposit ...
最新文章
- 3G时代需要“移动云计算专业”
- (0007) iOS 开发之Xcode8上传AppStore遇到的TencentOpenApi_IOS_Bundle.bundle
- textfile 属性
- 转:让 ThinkPad 的中键加小红帽模拟鼠标滚轮
- java多线程遇到的问题_关于Java多线程遇到的问题.
- #10017 「一本通 1.2 练习 4」传送带+三分套三分
- 【华为云技术分享】使用pdb调试python代码的方法
- 视频抽帧并存图 python_使用Python实现跳帧截取视频帧
- IBM存储扩展柜磁盘在线扩容(一)
- 组态王串口服务器通讯不稳定,组态王通信频繁掉线
- 【信息系统项目管理师】第十三章 项目合同管理思维导图
- 产品设计必读书籍推荐
- 计算机1教学,计算机一级教学大纲1
- 论文研读-多目标自适应memetic算法
- 转载 | 年度盘点!Flink 社区全年的精华内容都在这里啦
- 打开*.acb格式音频文件
- tailwind css的使用
- 生命中不仅仅只有代码
- networkx 有向图强连通_有向图的强连通分支
- s:hidden name=id value=id/s:hidden