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);

}

}

图片图章添加效果:


(本文完)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容

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