pdf 添加水印 图片

package com.hcsoft.lotrelease.util;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.imageio.ImageIO;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Element;
import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

public class Test {
    public static void main(String[] args) throws Exception, IOException {
        Long start = System.currentTimeMillis(), end = null;
        //生成图片
        //graphicsGeneration();
        //添加水印
        PdfaddSy();
        end = System.currentTimeMillis() - start;
        System.out.println("===> Reading pdf times: " + (end / 1000));
    }

    /**
     * 添加水印
     * 
     * @throws Exception
     */
    public static void PdfaddSy() throws Exception {
        // 待加水印的文件
        PdfReader reader = new PdfReader("D:\\aa1\\YBH012520161.pdf");
        // 加完水印的文件
        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("D:\\aa1\\abc.pdf"));
        int total = reader.getNumberOfPages() + 1;
        PdfContentByte content;
        // 设置字体
        String ttfpath = "D:\\Workspaces\\MyEclipse 10\\jianybz\\webapp\\upload\\userCachetPath\\simhei.ttf";
        BaseFont base = BaseFont.createFont(ttfpath, BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
        // 水印文字
        String waterText = "中检院标准接收";
        // 高度
        // 循环对每页插入水印

        int pageNum = reader.getNumberOfPages();
        Rectangle pageRectangle = reader.getPageSize(pageNum);
        float x = pageRectangle.getWidth() / 2;
        float y = pageRectangle.getHeight() / 2;

        for (int i = 1; i < total; i++) {
            // 水印的起始
            content = stamper.getOverContent(i);// 获得PDF最顶层
            content.saveState();
            PdfGState gs = new PdfGState();
            gs.setFillOpacity(0.5f);// 设置透明度为0.2
            content.setGState(gs);
            content.beginText();
            content.setColorFill(BaseColor.GRAY);
            content.setFontAndSize(base, 40);
            content.showTextAligned(Element.ALIGN_CENTER, waterText, x, y, 35);// 水印文字成35度角倾斜
            content.endText();
            
            Image image = Image.getInstance("c:/1.jpg");
            image.setAbsolutePosition(0, 0); 
            image.scaleToFit(200, 200);
            content.addImage(image);
            
            content.restoreState();// 注意这里必须调用一次restoreState 否则设置无效
        }
        stamper.close();
    }

    /**
     * 生成图片
     * 
     * @return
     * @throws Exception
     */
    public static String graphicsGeneration() throws Exception {
        // 实际数据行数+标题+备注
        int imageWidth = 490;
        int imageHeight = 130;

        BufferedImage image = new BufferedImage(imageWidth, imageHeight,BufferedImage.TYPE_INT_RGB);
        Graphics2D g2d = (Graphics2D) image.getGraphics();
        g2d.setColor(Color.WHITE);
        g2d.fillRect(0, 0, imageWidth, imageHeight);

        // ---------- 增加下面的代码使得背景透明 -----------------
        // image =
        // g2d.getDeviceConfiguration().createCompatibleImage(imageWidth,
        // imageHeight, Transparency.TRANSLUCENT);
        // g2d.dispose();
        // g2d = image.createGraphics();
        // ---------- 背景透明代码结束 -----------------

        g2d.setColor(new Color(220, 240, 240));
        g2d.setStroke(new BasicStroke(3.0f));
        // 画横线
        g2d.setColor(Color.red);

        g2d.drawLine(10, 10, imageWidth - 10, 10);
        g2d.drawLine(10, imageHeight - 10, imageWidth - 10, imageHeight - 10);
        // 画竖线
        g2d.setColor(Color.red);
        g2d.drawLine(10, 10, 10, imageHeight - 10);
        g2d.drawLine(imageWidth - 10, 10, imageWidth - 10, imageHeight - 10);

        // 设置字体
        Font font = new Font("华文楷体", Font.BOLD, 25);
        g2d.setFont(font);
        // 写入内容
        g2d.setColor(Color.black);
        font = new Font("华文楷体", Font.BOLD, 25);
        g2d.setFont(font);
        g2d.drawString("人员:李某某", 12, 45);
        g2d.drawString("部门:综合业务处", 12, 100);

        g2d.drawString("下载次数:3次", 270, 45);
        g2d.drawString("时间:2018-10-15", 270, 100);

        String path = "C:/1.jpg";
        ImageIO.write(image, "jpg", new File(path));
        return path;
    }
}
 

你可能感兴趣的:(pdf 添加水印 图片)