Java 添加动态图章和图片图章到PDF

Java基础

浏览数:36

2020-6-13

AD:资源代下载服务

在日常办公中,时常需对公司内部的规章制度或对外的文件、报告等进行盖印公章,使其具有法律效力。对于纸质版文档来说,只需手动盖印。而电子档则需通过特定的方式来添加,且不同性质的文档需添加不同的图章。本文将通过使用Java程序来演示如何添加动态图章和图片图章到PDF文档中。

使用工具:Free Spire.PDF for Java(免费版)

Jar文件获取及导入:

方法1:通过官网下载获取jar包。解压后将lib文件夹下的Spire.Pdf.jar文件导入Java程序。(如下图)

方法2:通过maven仓库安装导入。具体安装详解参见此网页

【示例1】添加动态图章

动态图章通常由动态文字(如日期、时间)、经办人/组织名称、“已审核”等字样组成。

import com.spire.pdf.PdfDocument;  
import com.spire.pdf.PdfPageBase;  
import com.spire.pdf.annotations.PdfRubberStampAnnotation;  
import com.spire.pdf.annotations.appearance.PdfAppearance;  
import com.spire.pdf.graphics.*;  
import java.awt.*;  
import java.awt.geom.Point2D;  
import java.awt.geom.Rectangle2D;  
import java.text.SimpleDateFormat;  
  
public class DynamicStamp {  
    public static void main(String[] args) {  
        //创建PdfDocument对象  
  PdfDocument document = new PdfDocument();  
  
        //加载PDF文档  
  document.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample.pdf");  
  
        //获取第1页  
  PdfPageBase page = document.getPages().get(0);  
  
        //创建PdfTamplate对象  
  PdfTemplate template = new PdfTemplate(185, 50);  
  
        //创建两种字体  
  PdfTrueTypeFont font1 = new PdfTrueTypeFont(new Font("Arial Unicode MS", Font.PLAIN ,15), true);  
        PdfTrueTypeFont font2 = new PdfTrueTypeFont(new Font("Arial Unicode MS", Font.PLAIN ,10), true);  
  
        //创建单色画刷和渐变画刷  
  PdfSolidBrush solidBrush = new PdfSolidBrush(new PdfRGBColor(Color.blue));  
        Rectangle2D rect1 = new Rectangle2D.Float();  
        rect1.setFrame(new Point2D.Float(0,0),template.getSize());  
        PdfLinearGradientBrush linearGradientBrush = new PdfLinearGradientBrush(rect1,new PdfRGBColor(Color.white),new PdfRGBColor(Color.orange),PdfLinearGradientMode.Horizontal);  
  
        //创建圆角矩形路径  
  int CornerRadius = 20;  
        PdfPath path = new PdfPath();  
        path.addArc(template.getBounds().getX(), template.getBounds().getY(), CornerRadius, CornerRadius, 180, 90);  
        path.addArc(template.getBounds().getX() + template.getWidth() - CornerRadius,template.getBounds().getY(), CornerRadius, CornerRadius, 270, 90);  
        path.addArc(template.getBounds().getX() + template.getWidth() - CornerRadius, template.getBounds().getY()+ template.getHeight() - CornerRadius, CornerRadius, CornerRadius, 0, 90);  
        path.addArc(template.getBounds().getX(), template.getBounds().getY() + template.getHeight() - CornerRadius, CornerRadius, CornerRadius, 90, 90);  
        path.addLine( template.getBounds().getX(), template.getBounds().getY() + template.getHeight() - CornerRadius, template.getBounds().getX(), template.getBounds().getY() + CornerRadius / 2);  
  
        //绘制路径到模板,并进行填充  
  template.getGraphics().drawPath(linearGradientBrush, path);  
        template.getGraphics().drawPath(PdfPens.getBlue(), path);  
  
        //在模板上绘制文字及动态日期  
  String s1 = "已审核\n";  
        String s2 = "销售部 " + dateToString(new java.util.Date(),"yyyy-MM-dd HH:mm:ss");  
        template.getGraphics().drawString(s1, font1, solidBrush, new Point2D.Float(5, 5));  
        template.getGraphics().drawString(s2, font2, solidBrush, new Point2D.Float(5, 28));  
  
        //创建PdfRubberStampAnnotation对象,并指定其位置和大小  
  Rectangle2D rect2= new Rectangle2D.Float();  
        rect2.setFrame(new Point2D.Float((float)(page.getActualSize().getWidth()-250),(float)(page.getActualSize().getHeight()-120)),  template.getSize());  
        PdfRubberStampAnnotation stamp = new PdfRubberStampAnnotation(rect2);  
  
        //创建PdfAppearance对象,应用模板为一般状态  
  PdfAppearance appearance = new PdfAppearance(stamp);  
        appearance.setNormal(template);  
  
        //应用样式到图章  
  stamp.setAppearance(appearance);  
  
        //添加图章到Annotation集合  
  page.getAnnotationsWidget().add(stamp);  
  
        //保存文档  
  document.saveToFile("output/DynamicStamp.pdf");  
        document.close();  
    }  
  
    //将日期转化成字符串  
  public static String dateToString(java.util.Date poDate,String pcFormat) {  
        SimpleDateFormat loFormat = new SimpleDateFormat(pcFormat);  
        return loFormat.format(poDate);  
    }  
}

动态图章添加效果:

【示例2】添加图片图章

图片图章是以图片格式保存的现有印章。

import com.spire.pdf.FileFormat;  
import com.spire.pdf.PdfDocument;  
import com.spire.pdf.PdfPageBase;  
import com.spire.pdf.annotations.PdfRubberStampAnnotation;  
import com.spire.pdf.annotations.appearance.PdfAppearance;  
import com.spire.pdf.graphics.PdfImage;  
import com.spire.pdf.graphics.PdfTemplate;  
import java.awt.geom.Rectangle2D;  
  
public class ImageStamp {  
    public static void main(String[] args) {  
        //创建PdfDocument对象,加载PDF测试文档  
        PdfDocument doc = new PdfDocument();  
        doc.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample.pdf");  
  
        //获取文档第1页  
  PdfPageBase page = doc.getPages().get(0);  
  
        //加载印章图片  
  PdfImage image = PdfImage.fromFile("C:\\Users\\Test1\\Desktop\\Image.png");  
        //获取印章图片的宽度和高度  
  int width = image.getWidth();  
        int height = image.getHeight();  
  
        //创建PdfTemplate对象  
  PdfTemplate template = new PdfTemplate(width, height);  
        //将图片绘制到模板  
  template.getGraphics().drawImage(image, 0, 0, width, height);  
  
        //创建PdfRubebrStampAnnotation对象,指定大小和位置  
  Rectangle2D rect = new Rectangle2D.Float((float) (page.getActualSize().getWidth() - width - 10), (  
                float) (page.getActualSize().getHeight() - height - 60), width, height);  
        PdfRubberStampAnnotation stamp = new PdfRubberStampAnnotation(rect);  
  
        //创建PdfAppearance对象  
  PdfAppearance pdfAppearance = new PdfAppearance(stamp);  
        //将模板应用为PdfAppearance的一般状态  
  pdfAppearance.setNormal(template);  
        //将PdfAppearance 应用为图章的样式  
  stamp.setAppearance(pdfAppearance);  
  
        //添加图章到PDF  
  page.getAnnotationsWidget().add(stamp);  
  
        //保存文档  
  doc.saveToFile("output/ImageStamp.pdf",FileFormat.PDF);  
    }  
}

图片图章添加效果:

(本文完)

作者:Tina_Tang