当前位置: 首页 > 图灵资讯 > 技术篇> Java 给PDF添加文本水印

Java 给PDF添加文本水印

来源:图灵教育
时间:2023-04-28 09:20:14

水印一般用于标注文档的版权信息、作者、机构或文档属性。与文档注释不同,水印是在页面上绘制的元素,因此不能轻易删除。因此,水印也是一种很好的防伪手段。水印分为文本水印和图片水印。以Java代码为例,我将分享通过代码向PDF文档添加文本水印的具体方法和示例代码。Freeeee用的工具是Freeee Spire.PDF for Java(免费版),感兴趣的朋友也可以试试。

程序环境

IntelliJIDEA 2018 (jdk 1.8.0)

操作前先导入JAR包,请参考以下两种导入方法:

方法一:假如你用的是 maven,首先创建maven项目。然后添加以下代码配置pomen.xml 点击Import文件 Changes将 将JAR文件导入应用程序。

<repositories>    <repository>        <id>com.e-iceblue</id>        <name>e-iceblue</name>       <url>https://repo.e-iceblue.cn/repository/maven-public/</url>    </repository></repositories><dependencies>    <dependency>       <groupId>e-iceblue</groupId>       <artifactId>spire.pdf.free</artifactId>        <version>5.1.0</version>    </dependency></dependencies>

方法二:如果不使用 maven,则可以从此链接下载Frespirespire.PDF for Java,找到lib文件夹下的Spire.Pdf.jar并解压;然后在IDEA创建新项目,依次点击“文件”(File),“项目结构”(Project Structure),“组件”(Modules),“依赖项”(Dependencies),点击右边绿色“+”下的第一个选项“JAR文件或路径”(JARs or Directories),找到解压后的Spire.Pdf.jar 点击确认文件并将其导入项目。

单个文本水印

代码介绍:

首先,创建PDFDocument对象并加载PDF示例文档。然后,循环到所有页面,并在每个页面上添加水印。设置水印文本透明度、坐标偏移量和旋转角度。通过调用translatetransform()和rotatetransform()来调整水印的位置和旋转,然后绘制到页面上。最后,使用savetoFile()方法将变更保存在文件中。

完整代码:

import com.spire.pdf.*;import com.spire.pdf.graphics.*; import java.awt.*; public class insertSingleTextWaterMark {    publicstatic void main(String[] args) {         ////创建Pdfdocument类的对象       PdfDocument pdf = new PdfDocument();         //加载PDF文档       pdf.loadFromFile("sample.pdf");         ///循环遍历 PDF 文档中的所有页面逐个添加水印        Stringtext = "机密";       PdfTrueTypeFont font = new PdfTrueTypeFont(new Font(“黑体”,Font.BOLD, 50));        floatset1 = (float) (font.measureString(text).getWidth() * Math.sqrt(2)/4);        float set2= (float) (font.measureString(text).getHeight() * Math.sqrt(2)/4);        for (inti = 0; i < pdf.getPages().getCount(); i++){            //获取页面           PdfPageBase page = pdf.getPages().get(i);            ////设置水印文本的透明度           page.getCanvas().setTransparency(0.8f);            ///设置坐标的偏移量           page.getCanvas().translateTransform(page.getCanvas().getSize().getWidth()/2- set1 - set2, page.getCanvas().getSize().getHeight()/2 + set1 - set2);            ////设置水印文字的旋转角度           page.getCanvas().rotateTransform(-45);            ////在页面上绘制水印           page.getCanvas().drawString(text, font, PdfBrushes.getDarkRed(), 0, 0);        }         //保存文档       pdf.saveToFile(result1.pdf");    }}

效果图:

Java 给PDF添加文本水印_PDF

平铺文本水印

代码解释:

类似于添加单个水印,它还创建了一个Pdfdocument对象,并加载了PDF示例文档。然后,循环到所有页面,并在每个页面上添加水印。然后通过PdftilingBrush创建一个铺装刷,并设置其透明度。然后,平移和旋转刷子以获得所需的位置和方向,然后用刷子在每个页面上绘制水印。

完整代码:

import com.spire.pdf.*;import com.spire.pdf.graphics.*;import com.spire.pdf.htmlconverter.qt.Size; import java.awt.*;import java.awt.geom.*;  public class insertTiledTextWatermark {    publicstatic void main(String[] args) {         ////创建Pdfdocument类的对象       PdfDocument pdf = new PdfDocument();         //加载PDF文件       pdf.loadFromFile("sample.pdf");         ///循环遍历PDF文档中的所有页面,逐个添加水印        PdfTrueTypeFontfont = new PdfTrueTypeFont(new Font(“黑体”,Font.BOLD, 20));        for (inti = 0; i < pdf.getPages().getCount(); i++){           PdfPageBase pageBase = pdf.getPages().get(i);           insertTextWatermark(pageBase, font, “机密”,3, 3);        }         //保存文档        pdf.saveToFile(result2.pdf");    }     static voidinsertTextWatermark(PdfPageBase page, PdfTrueTypeFont font, String watermark,int row, int column) {         ///计算两个偏移变量值计算坐标的平移量        floatset1 = (float)(font.measureString(watermark).getWidth() * Math.sqrt(2)/4);        floatset2 = (float)(font.measureString(watermark).getHeight() * Math.sqrt(2)/4);         ///创建平铺画刷       PdfTilingBrush brush = new PdfTilingBrush(new Dimension((int)(page.getActualSize().getWidth()/column), (int)(page.getActualSize().getHeight()/row)));        brush.getGraphics().setTransparency(0.8f);       brush.getGraphics().save();       brush.getGraphics().translateTransform(brush.getSize().getWidth()/2 -set1 - set2, brush.getSize().getHeight()/2 + set1 - set2);       brush.getGraphics().rotateTransform(-45);         ///画水印文本,平铺画       brush.getGraphics().drawString(watermark, font, PdfBrushes.getViolet(),0, 0);       brush.getGraphics().restore();         ///用平铺画画水印        page.getCanvas().drawRectangle(brush,new Rectangle(new Point(0, 0), new Dimension((int)(page.getActualSize().getWidth()),(int)(page.getActualSize().getHeight())));    }}

效果图:

Java 给PDF添加文本水印_PDF_02