pdf加水印

本文介绍了一种使用Java为PDF文档添加文字和图片水印的方法。通过itext和iTextAsian库,实现了自定义水印内容(如公司名、日期等),并能够将水印应用于PDF文档的所有页面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pdf加水印

  1. 相关jar包

    • itext-2.1.7.jar
    • iTextAsian.jar
  2. 代码如下

package com.solex.waterPrint;

import java.awt.Color;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Image;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;
/**
 * 给PDF添加水印
 * @author solexit06
 *
 */
public class TestWaterPdf {
    public static void main(String[] args) throws DocumentException,IOException {
        //要输出的文件
        String outFile="C:/Users/solexit06/Desktop/WaterPrint.pdf";
        //要加水印的原文件
        String inputFile="C:/Users/solexit06/Desktop/testWaterPrint.pdf";
        //水印内容:公司、日期、内容
        String company="**科技有限公司";
        Date date = Calendar.getInstance().getTime();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String waterMarkDate=sdf.format(date);
        String content="受控文件";
        // 将文件先加水印然后输出
        setWatermark(outFile,inputFile,company,waterMarkDate,content);
    }

    public static void setWatermark(String outFile, String inputFile,String company,
            String waterMarkDate,String content) throws DocumentException,IOException {

        PdfReader reader = new PdfReader(inputFile);//获取需要加水印的输入文件
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(outFile)));
        PdfStamper stamper = new PdfStamper(reader, bos);

        int total = reader.getNumberOfPages();//获取输入文件页数
        for (int i = 1; i <= total; i++) {
            PdfContentByte contentOver = stamper.getOverContent(i);//在内容上方加水印
            /*添加图片水印*/
            String imgUrl="C:/Users/solexit06/Desktop/Border.png";
            Image img = Image.getInstance(imgUrl);//获取要作为水印的图片
            img.setAbsolutePosition(200, 450);//图片距离文档的左下边距
            img.scaleToFit(150, 240);//图片水印的大小
            img.setRotationDegrees(10);//旋转
            contentOver.addImage(img);//添加图片水印

            /*添加文字水印*/
            contentOver.beginText();
            BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.EMBEDDED);//字体实例,影响中文字体显示
            contentOver.setColorFill(Color.RED);//水印颜色

            contentOver.setFontAndSize(bf, 16);//字体样式和大小
            contentOver.showTextAligned(Element.ALIGN_LEFT, company, 215, 520,10);//左边距、下边距

            contentOver.setFontAndSize(bf, 10);//字体样式和大小
            contentOver.showTextAligned(Element.ALIGN_LEFT, waterMarkDate, 260, 505,10);//左边距、下边距

            contentOver.setFontAndSize(bf, 24);//字体样式和大小
            contentOver.showTextAligned(Element.ALIGN_LEFT, content, 240, 465,10);//左边距、下边距
            contentOver.endText();

        }
        stamper.close();
        System.out.println("添加水印成功");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值