200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Java为图片 PDF等文档添加自定义文字水印 亲测好用

Java为图片 PDF等文档添加自定义文字水印 亲测好用

时间:2024-07-28 20:32:38

相关推荐

Java为图片 PDF等文档添加自定义文字水印 亲测好用

随着大数据时代的来临,数据安全逐渐被提上日程,今天我给大家分享的是Java中图片添加自定义水印、PDF、Word等文档添加自定义水印。

我这边不废话,直接上代码,粘贴到你的项目即可使用,若是缺少依赖引用需自行下载。

jar包官方网址(不翻墙可能打不开):/

懒人可直接复制下面的Maven依赖:

<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version></dependency>

PDF、Word等文档加文字水印:

​ //为了使文字向左移动5像素private static int interval = -5;/*** PDF加文字水印* @param inputFile PDF文件输入路径* @param outputFile PDF文件输出路径* @param waterMarkName 自定义水印*/private static void waterMarkPdf(String inputFile,String outputFile, String waterMarkName) {log.info("开始对PDF进行添加文字水印。");//根据水印文字长度,更改水印文字大小int size = 0;if (waterMarkName.length() <= 13) {size = 50;}else if(waterMarkName.length() > 13 && waterMarkName.length() <= 33) {size = 35;}else {size = 20;}try {PdfReader reader = new PdfReader(inputFile);FileOutputStream outputStream = new FileOutputStream(outputFile);PdfStamper stamper = new PdfStamper(reader, outputStream);//设置文字样式BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);Rectangle pageRect = null;PdfGState gs = new PdfGState();//设置透明度gs.setFillOpacity(0.03f);gs.setStrokeOpacity(0.4f);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 = null;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, size);//调整for循环的宽高可更改水印位置,高:textH 宽:textWfor (int height = interval + textH; height < pageRect.getHeight(); height = height + textH*10) {for (int width = interval + textW; width < pageRect.getWidth() + textW; width = width + textW*5) {//水印文字成21度角倾斜under.showTextAligned(Element.ALIGN_LEFT, waterMarkName, width - textW, height - textH, 21);}}// 添加水印文字under.endText();}//关闭流stamper.close();outputStream.close();reader.close();} catch (Exception e) {log.error("异常:", e);}log.info("pdf添加文字水印结束。");}​

图片添加文字水印:

/*** 图片加文字水印* @param text 水印内容* @param transparency 清晰度* @param imageName 图片名(含后缀)* @param path 图片保存位置*/private static void clearImage(String text, Float transparency,String imageName, String path) {log.info("开始对图片添加文字水印。");try {// 读取本地图片文件File file = new File(path + imageName);// 将文件对象转化为图片对象(限png、jpg、gif)BufferedImage image = ImageIO.read(file);//图片宽度不足,返回无水印图片if (!(image.getWidth() > (text.length()*20) + 10)) {File f = new File(path + "waterMark" + imageName);FileOutputStream outputFile = new FileOutputStream(f);//此处需设置图片类型ImageIO.write(image, "png", outputFile);outputFile.close();}else {//设置水印字体大小int size = 5;if (image.getWidth() >= text.length() * 30) {size = 30;}else if (image.getWidth() >= text.length() * 20) {size = 20;}else if (image.getWidth() >= text.length() * 10) {size = 10;}Graphics2D pen = image.createGraphics();pen.setColor(Color.BLACK);// 设置画笔字体样式为微软雅黑 斜体:Font.ITALICpen.setFont(new Font("微软雅黑", Font.BOLD, size));//文字倾斜pen.shear(0.1, -0.4);//消除文字锯齿pen.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);//设置文字透明度pen.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, transparency));//获取文本长度,用来设置坐标int len = text.length();//获取水印坐标位置int width = image.getWidth()/2;int height = image.getHeight()/2;if (image.getWidth() - (len*size) > 0) {//根据水印字体长度,控制水印位置width = image.getWidth()/2 - (len/2)*size;}if (image.getHeight() - 100 > 0) {height = image.getHeight() - 100;}//添加水印pen.drawString(text, width, height);//创建新图片文件File file2 = new File(path + "waterMark" + imageName);//将处理好的图片数据写入到新图片文件中 FileOutputStream outputFile = new FileOutputStream(file2);//此处需设置图片类型ImageIO.write(image, "png", outputFile);outputFile.close();}} catch (Exception e) {log.error("异常:", e);}log.info("png图片添加文字水印结束。");}

以上就是Java添加文字水印的全部内容,喜欢的小伙伴可以点赞、收藏,谢谢O(∩_∩)O

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。