【itext学习之路】-------(第四篇)给pdf增加文本水印和图片水印

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tomatocc/article/details/80668701

一般而言,许多公司在做pdf之后,都会将公司的logo或者网址以水印的方式添加到pdf文件中。本篇文章,我们将介绍在制作pdf的时候,如何将水印加入到pdf中去。

package cn.tomtocc.pdf;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfWriter;

public class pdfTest {

    public static void main(String[] args) throws FileNotFoundException,
            DocumentException {
        //实现A4纸页面 并且横向显示(不设置则为纵向)
        Document document = new Document(PageSize.A4.rotate());
        PdfWriter pdfWriter = PdfWriter.getInstance(document,new FileOutputStream("d:/demo.pdf"));
        // 打开文档
        document.open();
        // 创建第一页(如果只有一页的话,这一步可以省略)
        document.newPage();

        // 加入水印
        PdfContentByte waterMar = pdfWriter.getDirectContentUnder();
        // 开始设置水印
        waterMar.beginText();
        // 设置水印透明度
        PdfGState gs = new PdfGState();
        // 设置填充字体不透明度为0.4f
        gs.setFillOpacity(0.4f);
        try {
            // 设置水印字体参数及大小                                  (字体参数,字体编码格式,是否将字体信息嵌入到pdf中(一般不需要嵌入),字体大小)
            waterMar.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED), 60);
            // 设置透明度
            waterMar.setGState(gs);
            // 设置水印对齐方式 水印内容 X坐标 Y坐标 旋转角度
            waterMar.showTextAligned(Element.ALIGN_RIGHT, "www.tomatocc.com" , 500, 430, 45);
            // 设置水印颜色
            waterMar.setColorFill(BaseColor.GRAY);
            //结束设置
            waterMar.endText();
            waterMar.stroke();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            waterMar = null;
            gs = null;
        }


        // 加入文档内容
        document.add(new Paragraph("my first pdf demo"));
        // 关闭文档
        document.close();
        pdfWriter.close();
    }
}
  • 然后我们打开我们的pdf,如下:
    这里写图片描述

这里要说明一点:水印是要放在pdf中的,因此在创建PdfContentByte对象之前,一定要先 document.newPage();。二者顺序是不能反过来的,如果反过来的意思就是先画水印,在创建一个pdf页面,显然不符合逻辑了。

  • 接下来,我们继续操作“图片水印”
package cn.tomtocc.pdf;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfWriter;

public class pdfTest {

    public static void main(String[] args) throws FileNotFoundException,
            DocumentException {
        //实现A4纸页面 并且横向显示(不设置则为纵向)
        Document document = new Document(PageSize.A4.rotate());
        PdfWriter pdfWriter = PdfWriter.getInstance(document,new FileOutputStream("d:/demo.pdf"));
        // 打开文档
        document.open();
        // 创建第一页(如果只有一页的话,这一步可以省略)
        document.newPage();

        // 加入水印
        PdfContentByte waterMar = pdfWriter.getDirectContentUnder();
        // 开始设置水印
        waterMar.beginText();
        // 设置水印透明度
        PdfGState gs = new PdfGState();
        // 设置笔触字体不透明度为0.4f
        gs.setStrokeOpacity(0.4f);
        try {
            Image image = Image.getInstance("d:/tomatocc.jpg");
            // 设置坐标 绝对位置 X Y
            image.setAbsolutePosition(200, 300);
            // 设置旋转弧度
            image.setRotation(30);// 旋转 弧度
            // 设置旋转角度
            image.setRotationDegrees(45);// 旋转 角度
            // 设置等比缩放
            image.scalePercent(90);// 依照比例缩放
            // image.scaleAbsolute(200,100);//自定义大小
            // 设置透明度
            waterMar.setGState(gs);
            // 添加水印图片
            waterMar.addImage(image);
            // 设置透明度
            waterMar.setGState(gs);
            //结束设置
            waterMar.endText();
            waterMar.stroke();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            waterMar = null;
            gs = null;
        }


        // 加入文档内容
        document.add(new Paragraph("my first pdf demo"));
        // 关闭文档
        document.close();
        pdfWriter.close();
    }
}

然后我们打开文档,就可以看到一个带图片水印的pdf了

这里写图片描述

  • 到目前为止,关于pdf的简单操作就介绍到这里,在下篇文章中,我们将要介绍印章水印。

【itext学习之路】系列教程

【itext学习之路】—–(第一篇)创建一个简单的pdf文档
【itext学习之路】—–(第二篇)设置pdf的一些常用属性
【itext学习之路】—–(第三篇)对pdf文档进行加密和权限设置
【itext学习之路】—–(第四篇)给pdf增加文本水印和图片水印
【itext学习之路】—–(第五篇)对pdf进行盖章/签章/数字签名

猜你喜欢

转载自blog.csdn.net/tomatocc/article/details/80668701