您的位置:首页 > 教育 > 培训 > java 实现给PDF、PPT添加水印

java 实现给PDF、PPT添加水印

2024/10/6 19:24:24 来源:https://blog.csdn.net/weixin_38319647/article/details/139961256  浏览:    关键词:java 实现给PDF、PPT添加水印
  1. java实现PDF添加水印

pom.xml引入依赖         

<dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.13.3</version> <!-- 请使用最新的稳定版本 -->
        </dependency> 

import com.itextpdf.text.Element;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;import java.io.FileOutputStream;
/*** PDF文件水印添加* @author jia**/
public class PDFWaterMarkUtil {/*** * @param srcPath 源文件路径* @param destPath 目的文件路径* @param word 添加水印(不支持汉字)* @throws Exception*/public static void addPDFWaterMark(String srcPath, String destPath, String word)throws Exception {PdfReader reader = new PdfReader(srcPath);PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(destPath));//创建字体,第一个参数是字体路径BaseFont base = BaseFont.createFont();//BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);PdfGState gs = new PdfGState();gs.setFillOpacity(0.2f);//图片水印透明度//gs.setStrokeOpacity(0.4f);//设置笔触字体不透明度PdfContentByte content = null;int total = reader.getNumberOfPages();//pdf文件页数for (int i=0; i<total; i++) {float x = reader.getPageSize(i+1).getWidth();//页宽度float y = reader.getPageSize(i+1).getHeight();//页高度content = stamper.getOverContent(i+1);content.setGState(gs);content.beginText();//开始写入content.setFontAndSize(base, 20);//字体大小//每页3行,一行3个for (int j=0; j<3; j++) {for (int k=0; k<3; k++) {//showTextAligned 方法的参数(文字对齐方式,位置内容,输出水印X轴位置,Y轴位置,旋转角度)content.showTextAligned(Element.ALIGN_CENTER, word, x/3*j+100, y/3*k+100, 45);}}content.endText();//结束写入}//关闭流stamper.close();reader.close();}public static void main(String[] args) {// 获取指定路径的pdftry {addPDFWaterMark("H:\\test.pdf" , "H:\\example_water.pdf" , "jia");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

2.java实现PPT添加水印

pom.xml引入poi

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>
 

import java.awt.Color;
import java.awt.geom.Rectangle2D;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;import org.apache.poi.sl.usermodel.TextShape.TextDirection;
import org.apache.poi.sl.usermodel.VerticalAlignment;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xslf.usermodel.XSLFTextBox;public class PPTWaterMarkUtil {public static void setPPTWaterMark(String path,String targetpath, String markStr) throws IOException {XMLSlideShow slideShow = new XMLSlideShow(new FileInputStream(path));double x = slideShow.getPageSize().getWidth();double y = slideShow.getPageSize().getHeight();for (XSLFSlide slide : slideShow.getSlides()) {for (int j=0; j< 3; j++) {
//	                for (int k=0; k< 2; k++) {
//	                    XSLFTextBox textBox = slide.createTextBox();textBox.setTextDirection(TextDirection.VERTICAL_270);//设置文本框文字方向textBox.setVerticalAlignment(VerticalAlignment.MIDDLE);textBox.setText(markStr);textBox.setAnchor(new Rectangle2D.Double(x/3*j+90,y/2, 25, 160)); // 设置水印文本框的位置和大小textBox.setRotation(45); // 设置水印文本框的旋转角度
//	                    textBox.setFillColor(new Color(0, 0, 0, 128)); // 设置水印文本框的填充颜色textBox.setLineColor(new Color(0, 0, 0, 128));
//	                    textBox.setLineWidth(1);//	                }}}FileOutputStream out = new FileOutputStream(targetpath);slideShow.write(out);out.close();}public static void main(String[] args) {try {setPPTWaterMark("H:/waterppt.pptx", "H:/watermark0.pptx", "Hello World!");} catch (IOException e) {e.printStackTrace();}}}

3.效果

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com