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

一般而言,许多公司在做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官方英文API+中文使用说明》

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值