java Spire PDF 加图片和文字水印

 添加文字和水印

package cn.zjdyit.pubabroad.web.rest;


import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.*;

import java.awt.*;
import java.awt.geom.Dimension2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
public class Test2 {
    public static void main(String[] args) throws Exception {
        //加载PDF文档
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("C:\\Users\\pony\\Desktop\\stamp\\ImageStamp.pdf");

        //调用AddImageWatermark方法给PDF第一页添加图片水印
        AddImageWatermark(pdf.getPages().get(0), "timg.jpg");

        //调用AddTextWatermark方法给PDF第二页添加文字水印
        AddTextWatermark(pdf.getPages().get(1), "已审阅");

        //保存
        pdf.saveToFile("C:\\Users\\马永强\\Desktop\\stamp\\ImageStamp.pdf");
        //关闭
        pdf.close();

    }

    static void AddImageWatermark(PdfPageBase page, String imageFile)
    {
        page.setBackgroundImage(imageFile);
        Rectangle2D rect = new Rectangle2D.Float();
        rect.setFrame(page.getClientSize().getWidth()/2 - 100, page.getClientSize().getHeight()/2 - 100, 200, 200);
        page.setBackgroundRegion(rect);
    }

    /**
     * @param page
     * 要添加水印的页面
     * @param textWatermark
     * 水印文字
     */
    static void AddTextWatermark(PdfPageBase page, String textWatermark)
    {
        Dimension2D dimension2D = new Dimension();
        dimension2D.setSize(page.getCanvas().getClientSize().getWidth() / 2, page.getCanvas().getClientSize().getHeight() / 3);
        PdfTilingBrush brush = new PdfTilingBrush(dimension2D);
        brush.getGraphics().setTransparency(0.3F);
        brush.getGraphics().save();
        brush.getGraphics().translateTransform((float) brush.getSize().getWidth() / 2, (float) brush.getSize().getHeight() / 2);
        brush.getGraphics().rotateTransform(-45);
        brush.getGraphics().drawString(textWatermark, new PdfTrueTypeFont(new Font("Arial Unicode MS",Font.PLAIN,30),true), PdfBrushes.getRed(), 0, 0, new PdfStringFormat(PdfTextAlignment.Center));
        brush.getGraphics().restore();
        brush.getGraphics().setTransparency(1);
        Rectangle2D loRect = new Rectangle2D.Float();
        loRect.setFrame(new Point2D.Float(0, 0), page.getCanvas().getClientSize());
        page.getCanvas().drawRectangle(brush, loRect);
    }

}

 添加文字

package cn.zjdyit.pubabroad.web.rest;

import com.itextpdf.text.Chunk;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.*;

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class Test{
    public static void main(String[] args) throws Exception {
        String filePath = "C:\\Users\\pony\\Desktop\\stamp\\domeT.pdf";
        String savePath = "C:\\Users\\pony\\Desktop\\stamp\\ImageStamp2.pdf";
        BaseFont baseFont = BaseFont.createFont("C:/WINDOWS/Fonts/SIMYOU.TTF", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
        Font font = new Font(baseFont);
        PdfReader reader = new PdfReader(new FileInputStream(filePath));
        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(savePath));
        for (int i = 1; i <= reader.getNumberOfPages(); i++) {
            PdfContentByte over = stamper.getOverContent(i);
            ColumnText columnText = new ColumnText(over);
            ColumnText columnText1 = new ColumnText(over);
            ColumnText columnText2 = new ColumnText(over);
            // llx 和 urx  最小的值决定离左边的距离. lly 和 ury 最大的值决定离下边的距离
            columnText.setSimpleColumn(460, 145, 1000, 0);
            columnText1.setSimpleColumn(500, 145, 1000, 0);
            columnText2.setSimpleColumn(530, 145, 1000, 0);
            Paragraph elements = new Paragraph(0, new Chunk("2020"));
            Paragraph elements1 = new Paragraph(0, new Chunk("05"));
            Paragraph elements2 = new Paragraph(0, new Chunk("06"));
            // 设置字体,如果不设置添加的中文将无法显示
            elements.setFont(font);
            columnText.addElement(elements);
            columnText.go();
            elements1.setFont(font);
            columnText1.addElement(elements1);
            columnText1.go();
            elements2.setFont(font);
            columnText2.addElement(elements2);
            columnText2.go();
        }
        stamper.close();
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值