700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java实现word pdf excel 图片添加水印

java实现word pdf excel 图片添加水印

时间:2022-02-12 10:48:32

相关推荐

java实现word pdf excel 图片添加水印

gitee项目地址:/betelnutandwine/meutilswatermark: java实现pdf,word,excel,ppt,图片加水印

jar地址:spire.office.free-5.3.1.jar-Java文档类资源-CSDN下载

spire.office.free官方地址:Spire.Office for Java | 专业的 Java Office 套件 | 创建、修改、转换、打印 Word/PowerPoint/PDF 文档

说明:

基于spire.office.free-5.3.1.jar实现的.

由于是免费版,会有一些官方的水印,ppt,pdf加水印限制为10页

excel的水印在打印的时候再能看到,或者点击页面布局打印预览也可看到

图片加水印不需要spire.office.free-5.3.1.jar支持

gitee上的项目不是maven,可能需要手动导下包

word,pdf,excel,ppt加水印工具类

package com.bingjiu.utils;import com.spire.doc.*;import com.spire.doc.FileFormat;import com.spire.doc.documents.WatermarkLayout;import java.awt.*;import java.awt.geom.Dimension2D;import java.awt.geom.Point2D;import java.awt.geom.Rectangle2D;import java.awt.image.BufferedImage;import java.io.IOException;import com.spire.pdf.PdfDocument;import com.spire.pdf.PdfPageBase;import com.spire.pdf.graphics.*;import com.spire.presentation.IAutoShape;import com.spire.presentation.PortionEx;import com.spire.presentation.Presentation;import com.spire.presentation.ShapeType;import com.spire.presentation.drawing.FillFormatType;import com.spire.xls.ExcelVersion;import com.spire.xls.ViewMode;import com.spire.xls.Workbook;import com.spire.xls.Worksheet;import static java.awt.image.BufferedImage.TYPE_INT_ARGB;/*** doc,docx,pdf,ppt 附件加水印* 免费版有水印且pdf,ppt只能处理10页* @author : Xiewy <br/>* @date : /8/16 15:54 <br/>*/public class SpireWaterMarkUtils {public static void main(String[] args) throws Exception {//word加水印// wordWatermark("C:\\Users\\BetelNutsAndWine\\Desktop\\文档.docx", "C:\\Users\\BetelNutsAndWine\\Desktop\\文档222.docx", "槟榔与酒的醉人故事");//xls加水印// setExcelWaterMark("C:\\Users\\BetelNutsAndWine\\Desktop\\exxcel.xlsx", "C:\\Users\\BetelNutsAndWine\\Desktop\\4444.xlsx", "槟榔与酒的醉人故事");//ppt加水印// setPPTWaterMark("C:\\Users\\BetelNutsAndWine\\Desktop\\与爱同行.pptx", "C:\\Users\\BetelNutsAndWine\\Desktop\\ppt222.pptx", "槟榔与酒的醉人故事");//pdfsetPdfWaterMark("C:\\Users\\BetelNutsAndWine\\Desktop\\pdf4.pdf","C:\\Users\\BetelNutsAndWine\\Desktop\\git444.pdf","槟榔与酒的醉人故事");}public static final String FOND_ST = "宋体";//--word 加水印start-----------------------------------------------------------------------------------------/*** Word添加文本水印* @param originalFilePath 待加水印word的路径 例如:C:\Desktop\textWatermark.docx* @param newFilePath 水印word的文件存储路径 例如:C:\Desktop\watermark2.docx* @param txtWatermark 文本水印类*/public static Boolean wordWatermark(String originalFilePath, String newFilePath, TextWatermark txtWatermark){boolean temp;if (txtWatermark == null){SpireWaterMarkUtils.getTextWatermark("水印");}try {//加载文档Document document = new Document();document.loadFromFile(originalFilePath);//插入文本水印Section section = document.getSections().get(0);section.getDocument().setWatermark(txtWatermark);//保存水印文档document.saveToFile(newFilePath, FileFormat.Docx);temp = true;} catch (Exception e) {temp = false;e.printStackTrace();}return temp;}/*** Word添加文本水印* @param originalFilePath 待加水印word的路径 例如:C:\Desktop\textWatermark.docx* @param newFilePath 水印word的文件存储路径 例如:C:\Desktop\watermark2.docx* @param watermarkText 水印内容*/public static Boolean wordWatermark(String originalFilePath, String newFilePath, String watermarkText){boolean temp;TextWatermark textWatermark = getTextWatermark(watermarkText);try {//加载文档Document document = new Document();document.loadFromFile(originalFilePath);//插入文本水印Section section = document.getSections().get(0);section.getDocument().setWatermark(textWatermark);//保存水印文档document.saveToFile(newFilePath, FileFormat.Docx);temp = true;} catch (Exception e) {temp = false;e.printStackTrace();}return temp;}/*** 获取文本水印默认类-word* @param watermarkText 水印内容* @return TextWatermark*/public static TextWatermark getTextWatermark(String watermarkText){TextWatermark txtWatermark = new TextWatermark();txtWatermark.setText(watermarkText);txtWatermark.setFontSize(25);txtWatermark.setColor(Color.red);txtWatermark.setLayout(WatermarkLayout.Diagonal);return txtWatermark;}/*** 自定义文本水印类-word* @param watermarkText 水印内容* @param fontSize 字体大小* @param color 字体颜色* @return TextWatermark*/public static TextWatermark getTextWatermark(String watermarkText,int fontSize,Color color){TextWatermark txtWatermark = new TextWatermark();txtWatermark.setText(watermarkText);txtWatermark.setFontSize(fontSize);txtWatermark.setColor(color);txtWatermark.setLayout(WatermarkLayout.Diagonal);return txtWatermark;}//--word 加水印end-----------------------------------------------------------------------------------------//--excel 加水印start-----------------------------------------------------------------------------------------/*** excel设置水印* Excel 水印在正常模式下不可见,仅在页面布局模式或打印预览模式可见。** @param inputPath* @param outPath* @param markStr*/public static void setExcelWaterMark(String inputPath, String outPath, String markStr) {//加载示例文档Workbook workbook = new Workbook();workbook.loadFromFile(inputPath);//设置文本和字体大小Font font = new Font(FOND_ST, Font.PLAIN, 30);for (Object object : workbook.getWorksheets()) {Worksheet sheet = (Worksheet) object;//调用DrawText() 方法插入图片BufferedImage imgWtrmrk = drawText(markStr, font, Color.RED, Color.white, sheet.getPageSetup().getPageHeight(), sheet.getPageSetup().getPageWidth());//将图片设置为页眉sheet.getPageSetup().setLeftHeaderImage(imgWtrmrk);sheet.getPageSetup().setLeftHeader("&G");//将显示模式设置为Layoutsheet.setViewMode(ViewMode.Normal);}//保存文档if (inputPath.substring(inputPath.lastIndexOf(".") + 1, inputPath.length()).equalsIgnoreCase("xls")) {workbook.saveToFile(outPath, ExcelVersion.Version97to);} else {workbook.saveToFile(outPath, ExcelVersion.Version);}}/*** excel- 生成水印图片* @param text 水印内容* @param font 字体* @param textColor 水印内容颜色* @param backColor 水印背景颜色* @param height 图片高度* @param width 图片宽度* @return*/private static BufferedImage drawText(String text, Font font, Color textColor, Color backColor, double height, double width) {//定义图片宽度和高度BufferedImage img = new BufferedImage((int) width, (int) height, TYPE_INT_ARGB);Graphics2D loGraphic = img.createGraphics();//获取文本sizeFontMetrics loFontMetrics = loGraphic.getFontMetrics(font);int liStrWidth = loFontMetrics.stringWidth(text);int liStrHeight = loFontMetrics.getHeight();//文本显示样式及位置loGraphic.setColor(backColor);loGraphic.fillRect(2, 0, (int) width, (int) height);loGraphic.translate(((int) width - liStrWidth) / 2 , ((int) height - liStrHeight) / 2 );loGraphic.rotate(Math.toRadians(-25));loGraphic.translate(-((int) width - liStrWidth) / 2, -((int) height - liStrHeight) / 2);loGraphic.setFont(font);loGraphic.setColor(textColor);loGraphic.drawString(text, ((int) width - liStrWidth) / 2, ((int) height - liStrHeight) / 2);loGraphic.dispose();return img;}//--excel 加水印end-----------------------------------------------------------------------------------------//--pdf 加水印start-----------------------------------------------------------------------------------------/*** PDF 设置水印* 免费版仅限于10页的PDF,10页以上的pdf加水印,只加10页水印,并且10页以后的也不会显示** @param inFile 原文件路径* @param outFile 水印文件路径* @param watermark 水印内容*/public static void setPdfWaterMark(String inFile, String outFile, String watermark) {//创建PdfDocument对象PdfDocument pdf = new PdfDocument();//加载示例文档pdf.loadFromFile(inFile);if ( pdf.getPages().getCount() > 10){System.out.println("文档大于10页");}for (int i = 0; i < pdf.getPages().getCount(); i++) {//insertPdfWatermarkinsertPdfWatermark(pdf.getPages().get(i), watermark);}//保存文档pdf.saveToFile(outFile);pdf.close();}/*** 水印设置* @param page* @param watermark 水印内容*/private static void insertPdfWatermark(PdfPageBase page, String watermark) {Dimension2D dimension2D = new Dimension();dimension2D.setSize(page.getCanvas().getClientSize().getWidth() / 2, page.getCanvas().getClientSize().getHeight() / 3);PdfTilingBrush brush = new PdfTilingBrush(dimension2D);brush.getGraphics().setTransparency(0.3F);brush.getGraphics().save();brush.getGraphics().translateTransform((float) brush.getSize().getWidth() / 2, (float) brush.getSize().getHeight() / 2);brush.getGraphics().rotateTransform(-45);PdfTrueTypeFont font = new PdfTrueTypeFont(new Font(FOND_ST, Font.PLAIN, 12), true);brush.getGraphics().drawString(watermark, font, PdfBrushes.getViolet(), 0, 0, new PdfStringFormat(PdfTextAlignment.Center));brush.getGraphics().restore();brush.getGraphics().setTransparency(1);Rectangle2D loRect = new Rectangle2D.Float();loRect.setFrame(new Point2D.Float(0, 0), page.getCanvas().getClientSize());page.getCanvas().drawRectangle(brush, loRect);}//--pdf 加水印end-----------------------------------------------------------------------------------------//--ppt 加水印start-----------------------------------------------------------------------------------------/*** PPT设置水印* 限制,10页以内可用** @param path* @param targetpath* @param markStr* @throws IOException*/public static void setPPTWaterMark(String path, String targetpath, String markStr) throws Exception {//创建presentation对象并加载示例文档Presentation presentation = new Presentation();presentation.loadFromFile(path);//限制,10页以内可用,超过10页的有水印if (presentation.getSlides().size() > 10) {System.out.println("文档大于10页");}//设置文本水印的宽和高int width = 600;int height = 300;//定义一个长方形区域Rectangle2D.Double rect = new Rectangle2D.Double((presentation.getSlideSize().getSize().getWidth() - width) / 2,(presentation.getSlideSize().getSize().getHeight() - height) / 2, width, height);//添加一个shape到定义区域for (int i = 0; i < presentation.getSlides().size(); i++) {IAutoShape shape = presentation.getSlides().get(i).getShapes().appendShape(ShapeType.RECTANGLE, rect);//设置shape样式shape.getFill().setFillType(FillFormatType.NONE);shape.getShapeStyle().getLineColor().setColor(Color.white);shape.setRotation(-45);shape.getLocking().setSelectionProtection(true);shape.getLine().setFillType(FillFormatType.NONE);//添加文本到shapeshape.getTextFrame().setText(markStr);PortionEx textRange = shape.getTextFrame().getTextRange();//设置文本水印样式textRange.getFill().setFillType(FillFormatType.SOLID);textRange.getFill().getSolidColor().setColor(Color.GRAY);textRange.setFontHeight(50);}//保存文档if (path.substring(path.lastIndexOf(".") + 1, path.length()).equalsIgnoreCase("ppt")) {presentation.saveToFile(targetpath, com.spire.presentation.FileFormat.PPT);} else {presentation.saveToFile(targetpath, com.spire.presentation.FileFormat.PPTX_);}}//--ppt 加水印end-----------------------------------------------------------------------------------------}

图片加水印工具类

package com.bingjiu.utils;import javax.imageio.ImageIO;import javax.swing.*;import java.awt.*;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;/*** 图片水印工具类* @author : Xiewy <br/>* @date : /8/16 17:54 <br/>*/public class ImgWaterMarkUtil {/*** 水印透明度*/private static float alpha = 0.7f;/*** 水印横向位置*/private static int positionWidth = 150;/*** 水印纵向位置*/private static int positionHeight = 300;/*** 水印文字字体*/private static Font font = new Font("宋体", Font.BOLD, 20);/*** 水印文字颜色*/private static Color color = Color.red;/*** 文字水印位置铺满全屏*/private static ArrayList position1;private static ArrayList position2;/**** @param alpha 水印透明度* @param positionWidth 水印横向位置* @param positionHeight 水印纵向位置* @param font 水印文字字体* @param color 水印文字颜色*/public static void setImageMarkOptions(float alpha, int positionWidth, int positionHeight, Font font, Color color) {if (alpha != 0.0f) {ImgWaterMarkUtil.alpha = alpha;}if (positionWidth != 0) {ImgWaterMarkUtil.positionWidth = positionWidth;}if (positionHeight != 0) {ImgWaterMarkUtil.positionHeight = positionHeight;}if (font != null) {ImgWaterMarkUtil.font = font;}if (color != null) {ImgWaterMarkUtil.color = color;}}/*** 给图片添加水印图片** @param iconPath 水印图片路径* @param srcImgPath 源图片路径* @param targerPath 目标图片路径*/public static void markImageByIcon(String iconPath, String srcImgPath,String targerPath) {markImageByIcon(iconPath, srcImgPath, targerPath, null);}/*** 给图片添加水印图片、可设置水印图片旋转角度** @param iconPath 水印图片路径* @param srcImgPath 源图片路径* @param targerPath 目标图片路径* @param degree 水印图片旋转角度*/public static void markImageByIcon(String iconPath, String srcImgPath,String targerPath, Integer degree) {OutputStream os = null;try {Image srcImg = ImageIO.read(new File(srcImgPath));BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);// 1、得到画笔对象Graphics2D g = buffImg.createGraphics();// 2、设置对线段的锯齿状边缘处理g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null),srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,null);// 3、设置水印旋转if (null != degree) {g.rotate(Math.toRadians(degree),(double) buffImg.getWidth() / 2,(double) buffImg.getHeight() / 2);}// 4、水印图片的路径 水印图片一般为gif或者png的,这样可设置透明度ImageIcon imgIcon = new ImageIcon(iconPath);// 5、得到Image对象。Image img = imgIcon.getImage();g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,alpha));// 6、水印图片的位置g.drawImage(img, positionWidth, positionHeight, null);g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));// 7、释放资源g.dispose();// 8、生成图片os = new FileOutputStream(targerPath);ImageIO.write(buffImg, "JPG", os);System.out.println("图片完成添加水印图片");} catch (Exception e) {e.printStackTrace();} finally {try {if(null != os) {os.close();}} catch (Exception e) {e.printStackTrace();}}}/*** 给图片添加水印文字** @param logoText 水印文字* @param srcImgPath 源图片路径* @param targerPath 目标图片路径*/public static void markImageByText(String logoText, String srcImgPath, String targerPath,int allFlag) {markImageByText(logoText, srcImgPath, targerPath, null,allFlag);}/*** 给图片添加水印文字、可设置水印文字的旋转角度** @param logoText* @param srcImgPath* @param targerPath* @param degree*/public static void markImageByText(String logoText, String srcImgPath,String targerPath, Integer degree,int allFlag) {OutputStream os = null;try {// 1、源图片Image srcImg = ImageIO.read(new File(srcImgPath));BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);// 2、得到画笔对象Graphics2D g = buffImg.createGraphics();// 3、设置对线段的锯齿状边缘处理g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null),srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,null);// 4、设置水印旋转if (null != degree) {g.rotate(Math.toRadians(degree),(double) buffImg.getWidth() / 2,(double) buffImg.getHeight() / 2);}// 5、设置水印文字颜色g.setColor(color);// 6、设置水印文字Fontg.setFont(font);// 7、设置水印文字透明度g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,alpha));// 8、第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y)if (allFlag == 1){int width = srcImg.getWidth(null);int height = srcImg.getHeight(null);position1 = new ArrayList();position2 = new ArrayList();position1.add(0);position1.add(width/4);position1.add(width/2);position1.add(width*3/4);position1.add(width);position2.add(0);position2.add(height/4);position2.add(height/2);position2.add(height*3/4);position2.add(height);for (Object value : position1) {for (Object o : position2) {g.drawString(logoText, (Integer) value, (Integer) o);}}}else {g.drawString(logoText,positionWidth,positionHeight);}// 9、释放资源g.dispose();// 10、生成图片os = new FileOutputStream(targerPath);ImageIO.write(buffImg, "JPG", os);System.out.println("图片完成添加水印文字");} catch (Exception e) {e.printStackTrace();} finally {try {} catch (Exception e) {e.printStackTrace();}try {if (null != os) {os.close();}} catch (Exception e) {e.printStackTrace();}}}public static void main(String[] args) {String srcImgPath = "C:\\Users\\BetelNutsAndWine\\Desktop\\a5c693ca2a2d8746583d16353f45c0b3.jpg";String logoText = "槟榔与酒的醉人故事";String iconPath = "d:/2.jpg";String targerTextPath = "C:\\Users\\BetelNutsAndWine\\Desktop\\2.jpg";String targerTextPath2 = "C:\\Users\\BetelNutsAndWine\\Desktop\\3.jpg";String targerIconPath = "d:/qie_icon.jpg";String targerIconPath2 = "d:/qie_icon_rotate.jpg";System.out.println("给图片添加水印文字开始...");// 给图片添加水印文字// markImageByText(logoText, srcImgPath, targerTextPath,0);// 给图片添加水印文字,水印文字旋转-45markImageByText(logoText, srcImgPath, targerTextPath2, -45,1);System.out.println("给图片添加水印文字结束...");// System.out.println("给图片添加水印图片开始...");// setImageMarkOptions(0.3f, 1, 1, null, null);// // 给图片添加水印图片// markImageByIcon(iconPath, srcImgPath, targerIconPath);// // 给图片添加水印图片,水印图片旋转-45// markImageByIcon(iconPath, srcImgPath, targerIconPath2, -45);// System.out.println("给图片添加水印图片结束...");}}

效果图展示:

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