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

       在日常办公中,时常需对公司内部的规章制度或对外的文件、报告等进行盖印公章,使其具有法律效力。对于纸质版文档来说,只需手动盖印。而电子档则需通过特定的方式来添加,且不同性质的文档需添加不同的图章。本文将通过使用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);

}

}

图片图章添加效果:


(本文完)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在PDF文档中,图层可以使部分内容选择性地被隐藏或显示。通过添加图层,我们可以将文本、图片、表格等元素精确定位于...
    Tina_Tang阅读 557评论 0 1
  • 页眉和页脚通常是显示文档的附加信息,常用来插入页码、时间、日期、个人信息、微标等。特别是其中插入的页码,通...
    Tina_Tang阅读 1,988评论 0 1
  • 在日常办公中,PDF文件的使用越来越普遍。为了防止自己撰写的文件内容被抄袭或者被他人盗用,给PDF文件添加上水印是...
    Tina_Tang阅读 955评论 0 0
  • 在一篇文章里,配有与文本信息相得益彰的图片,不仅能够活跃与美化版面,同时也有利于提高文章的可读性和阅读效果,...
    Tina_Tang阅读 1,528评论 0 3
  • 筱语喜欢上了一位明星。 在高三这个低气压的特殊时期,教室里只听得到唰唰的笔声,每个人的头上像被安装了一个定时按钮,...
    BBVI阅读 172评论 0 0