借助 iText 用代码在 PDF 中创建空白签名域

首选,要获取 PdfStamper 对象:

PdfStamper ps = new PdfStamper(reader, bos);

然后,要获取到需要创建签名域的矩形区域:

        // 创建数组签名域
        int x = 300, y = 400, width = 200, height = 200; // 坐标系远点位于页面左下角,左下角到右下角为  x 轴,左下角到左上角为 y 轴
        Rectangle areaSignatureRect = new Rectangle(// 签名域区域,由两个对角点构成的矩形区域
        		x, // 点1 x坐标
        		y, // 点1 y坐标
        		x + width, // 点2 x坐标
        		y + height // 点2 y坐标
        ); 
        int pageNo = 1; // PDF 文件的页码从 1 开始,而不是 0
        PdfFormField pdfFormField = PdfFormField.createSignature(ps.getWriter());
        pdfFormField.setFieldName("AREA_SIGNATURE"); // 签名域标识
        pdfFormField.setPage(pageNo);
        pdfFormField.setWidget(areaSignatureRect, PdfAnnotation.HIGHLIGHT_OUTLINE); // 高亮显示

中间,可以通过 PdfAppearance 对象对这块区域的外观做下调整:

        // 设置区域宽高和边框厚度,以及边框颜色,填充颜色
        PdfAppearance pdfAppearance = PdfAppearance.createAppearance(
        		ps.getWriter(), 
        		width, 
        		height
        );
        
        pdfAppearance.setColorStroke(BaseColor.LIGHT_GRAY); // 边框颜色
        pdfAppearance.setColorFill(BaseColor.YELLOW); // 填充颜色
        
        // 填充矩形区域-开始
        pdfAppearance.rectangle(
        		0, // x 轴偏移
        		0, // y 轴偏移
        		width, // 宽
        		height // 高
        );
        pdfAppearance.fillStroke();
        // 填充矩形区域-结束
        
        // 添加文字-开始
        pdfAppearance.setColorFill(BaseColor.BLACK); // 填充颜色重置为黑色,显示文字
        ColumnText.showTextAligned(
        		pdfAppearance, 
        		Element.ALIGN_CENTER, 
        		new Phrase("签名区域", new Font(bf)), 
        		width / 2, // x
        		height / 2, // y
        		0 // rotation
        );
        // 添加文字-结束

        // 将外观应用到签名域对象之上
        pdfFormField.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, pdfAppearance);

最后,将签名域对象作为标注添加到 PdfStamper 对象:

ps.addAnnotation(pdfFormField, pageNo);

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

HTML5&CSS3初学者指南(4)–Canvas使用

问题:我怎么才能收到你们公众号平台的推送文章呢? 介绍 传统的HTML主要用于文本的创建,可以通过标签插入图像,动画的实现则需要第三方插件。在这方面,传统的HT...

23080
来自专栏flutter开发者

自定义View【1】

在上一篇文章中,我们学习了自定义View的基本流程和一些相关知识,想必大家对自定义View多少都有了一定的了解。

15710
来自专栏梦魇小栈

JQuery分析及实现part6之动画模块功能及实现

10320
来自专栏lzj_learn_note

前端开发学习──CSS(1)

HTML 标签原本被设计为用于定义文档内容,但随着HTML的 发展,为了满足页面设计的更多要求,HTML增加了许多的显示功能,导致HTML变得越来越杂乱,页面也...

13810
来自专栏林德熙的博客

win10 uwp 拖动控件 Margin 移动Canvas 拖动控件Manipulation 拖动控件

我们会使用控件拖动,可以让我们做出好看的动画,那么我们如何移动控件,我将会告诉大家多个方法。其中第一个是最差的,最后的才是我希望大神你去用。

18500
来自专栏程序员的知识天地

div 等块级标签横向排列的方法总结

块级标签的默认文档流是上下排列的,再配上横向排列的方法,请过适当的嵌套,可以应对几乎所有常见的布局需求,因此,我决定总结一下 div 横向排列的方法。这也是我初...

32220
来自专栏flutter开发者

自定义View案例【CircleProgressBar】

在前面的文章中我们看了下如何通过自定义View简单实现了labelView的效果,其实实现起来非常的简单,就是根据用户传递来的参数来做不同的绘制而已。

27520
来自专栏技术小黑屋

自定义View:Padding与绘制内容

有些时候,扩展Android框架提供的view并不能很好地解决问题。很多情况下,我们需要进行view绘制来实现想要的效果。本文我们将介绍如何使用Canvas绘制...

14220
来自专栏大数据钻研

CSS基础

CSS基础 CSS基础知识 选择器(重要!!!) 继承、特殊性、层叠、重要性 CSS格式化排版 单位和值 盒模型 浮动 相对定位与绝对定位 布局初探 CSS基础...

38450
来自专栏Android Note

Android – Path画搜索动画

40340

扫码关注云+社区

领取腾讯云代金券