文档章节

因工作需要在j2ee的环境中做电子印章 于是用水印做了一个 支持圆形带五角星 方形印章

番茄酱汁
 番茄酱汁
发布于 2014/04/14 13:04
字数 1074
阅读 572
收藏 12
点赞 0
评论 2

/**

* 输出图片的公用方法

* @param message

*            弧度上的字 (基本都是从数据库读取)

* @param centerName

*            中间要显示的名字

* @param width

*            中间字体的宽度

* @param height

*            中间字体的高度

* @return

* @throws FileNotFoundException

* @throws IOException

*/

public static BufferedImage bufferedImageUtil(String message,

String centerName, int width, int height)

throws FileNotFoundException, IOException {

BufferedImage image = null;

if (message != null) {

final int CENTERX = 90;

final int CENTERY = 90;

final int radius = 76;

// 获取get_png文件夹

ActionContext ac = ActionContext.getContext();

ServletContext sc = (ServletContext) ac

.get(ServletActionContext.SERVLET_CONTEXT);

String filePath = sc.getRealPath(File.separator + "style"

+ File.separator + "imgs");

String path = filePath;

image = ImageIO.read(new FileInputStream(path + File.separator

+ "newIcon.jpg"));

Graphics2D g2 = image.createGraphics();// 得到图形上下文

g2.setColor(Color.RED); // 设置画笔颜色

// 设置字体

g2.setFont(new Font("宋体", Font.LAYOUT_LEFT_TO_RIGHT, 15));// 写入签名

if (centerName != null) {

g2.drawString(centerName, width, height);

}

// 根据输入字符串得到字符数组

String[] messages2 = message.split("", 0);

String[] messages = new String[messages2.length - 1];

System.arraycopy(messages2, 1, messages, 0, messages2.length - 1);

// 输入的字数

int ilength = messages.length;

// 设置字体属性

int fontsize = 16;

Font f = new Font("", Font.BOLD, fontsize);

FontRenderContext context = g2.getFontRenderContext();

Rectangle2D bounds = f.getStringBounds(message, context);

// 字符宽度=字符串长度/字符数

double char_interval = (bounds.getWidth() / ilength);

// 上坡度

double ascent = -bounds.getY();

int first = 0, second = 0;

boolean odd = false;

if (ilength % 2 == 1) {

first = (ilength - 1) / 2;

odd = true;

} else {

first = (ilength) / 2 - 1;

second = (ilength) / 2;

odd = false;

}

double radius2 = radius - ascent;

double x0 = CENTERX;

double y0 = CENTERY - radius + ascent;

// 旋转角度

double a = 2 * Math.asin(char_interval / (2 * radius2));

if (odd) {

g2.setFont(f);

g2.drawString(messages[first],

(float) (x0 - char_interval / 2), (float) y0);

// 中心点的右边

for (int i = first + 1; i < ilength; i++) {

double aa = (i - first) * a;

double ax = radius2 * Math.sin(aa);

double ay = radius2 - radius2 * Math.cos(aa);

AffineTransform transform = AffineTransform

.getRotateInstance(aa);// ,x0 + ax, y0 + ay);

Font f2 = f.deriveFont(transform);

g2.setFont(f2);

g2

.drawString(messages[i],

(float) (x0 + ax - char_interval / 2

* Math.cos(aa)),

(float) (y0 + ay - char_interval / 2

* Math.sin(aa)));

}

// 中心点的左边

for (int i = first - 1; i > -1; i--) {

double aa = (first - i) * a;

double ax = radius2 * Math.sin(aa);

double ay = radius2 - radius2 * Math.cos(aa);

AffineTransform transform = AffineTransform

.getRotateInstance(-aa);// ,x0 + ax, y0 + ay);

Font f2 = f.deriveFont(transform);

g2.setFont(f2);

g2

.drawString(messages[i],

(float) (x0 - ax - char_interval / 2

* Math.cos(aa)),

(float) (y0 + ay + char_interval / 2

* Math.sin(aa)));

}

} else {

// 中心点的右边

for (int i = second; i < ilength; i++) {

double aa = (i - second + 0.5) * a;

double ax = radius2 * Math.sin(aa);

double ay = radius2 - radius2 * Math.cos(aa);

AffineTransform transform = AffineTransform

.getRotateInstance(aa);// ,x0 + ax, y0 + ay);

Font f2 = f.deriveFont(transform);

g2.setFont(f2);

g2

.drawString(messages[i],

(float) (x0 + ax - char_interval / 2

* Math.cos(aa)),

(float) (y0 + ay - char_interval / 2

* Math.sin(aa)));

}

// 中心点的左边

for (int i = first; i > -1; i--) {

double aa = (first - i + 0.5) * a;

double ax = radius2 * Math.sin(aa);

double ay = radius2 - radius2 * Math.cos(aa);

AffineTransform transform = AffineTransform

.getRotateInstance(-aa);// ,x0 + ax, y0 + ay);

Font f2 = f.deriveFont(transform);

g2.setFont(f2);

g2

.drawString(messages[i],

(float) (x0 - ax - char_interval / 2

* Math.cos(aa)),

(float) (y0 + ay + char_interval / 2

* Math.sin(aa)));

}

}

g2.dispose();

}

return image;

}

---------------------------------上述为圆形带五角星的章-------------------------

/**

* 方形名字章

* @param message

*            要刻的名字

* @return

* @throws FileNotFoundException

* @throws IOException

*/

public static BufferedImage getSquarePng(String message)

throws FileNotFoundException, IOException {

BufferedImage image = null;

if (message != null) {

ActionContext ac = ActionContext.getContext();

ServletContext sc = (ServletContext) ac

.get(ServletActionContext.SERVLET_CONTEXT);

String filePath = sc.getRealPath(File.separator + "style"

+ File.separator + "imgs");

String path = filePath;

image = ImageIO.read(new FileInputStream(path + File.separator

+ "squarePng.png"));

Graphics2D g2 = image.createGraphics();// 得到图形上下文

g2.setColor(Color.RED); // 设置画笔颜色

// 设置字体

g2.setFont(new Font("宋体", Font.LAYOUT_LEFT_TO_RIGHT, 80));// 写入签名

if (message != null) {

String newMessage = null;

// 如果三个 则 XXX章 如果两个则 XX之章 大于3个 则 取前三

if (message.length() == 2) {

newMessage = message + "之章";

} else if (message.length() == 3) {

newMessage = message + "章";

} else if (message.length() > 3) {

newMessage = message.substring(0, 3) + "章";

}

char[] charArray = newMessage.toCharArray();

g2.drawString(new String(new char[] { charArray[0] }), 90, 70);  // 写文字

g2.drawString(new String(new char[] { charArray[1] }), 90, 160); // 写文字

g2.drawString(new String(new char[] { charArray[2] }), 10, 70);  // 写文字

g2.drawString(new String(new char[] { charArray[3] }), 10, 160); // 写文字

}

}

return image;

}

---------------------------------方形章---------------------------------------

---------------------------------调用方法------------------------------------

/**

* 获取方形印章

* @return

*/

public String getSquarePngByUserName() {

String info = null;

BufferedImage image = null;

try {

ActionContext ac = ActionContext.getContext();

HttpServletResponse response = (HttpServletResponse) ac

.get(ServletActionContext.HTTP_RESPONSE);

response.setContentType("image/JPEG");

OutputStream output = response.getOutputStream();

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output);

Users user = (Users) SiteAction.getEntity("loginUser");

if (user != null) {

String userName = user.getUName();

if (userName != null) {

image = OutPicture.getSquarePng(userName);

}

}

if (image != null) {

encoder.encode(image);

}

output.flush();

output.close();

} catch (Exception e) {

return ERROR;

}

return info;

}


// 工商行政管理局(圆形


)

public String noticeOfRegistrationPng() {

String info = null;

try {

ActionContext ac = ActionContext.getContext();

HttpServletResponse response = (HttpServletResponse) ac

.get(ServletActionContext.HTTP_RESPONSE);

response.setContentType("image/JPEG");

OutputStream output = response.getOutputStream();

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output);

BufferedImage image = OutPicture.bufferedImageUtil("工商行政管理局", null,

48, 150);

if (image != null) {

encoder.encode(image);

}

output.flush();

output.close();

} catch (Exception e) {

info = Action.ERROR;

}

return info;

}

--------------------------------效果--------------------------------

© 著作权归作者所有

共有 人打赏支持
番茄酱汁
粉丝 7
博文 8
码字总数 2665
作品 0
朝阳
程序员
加载中

评论(2)

番茄酱汁
番茄酱汁

引用来自“osborn”的评论

你好,想请教一下椭圆印章如何生成,不知道有没有类似的源代码。
不好意思,很久没有玩开源中国了,看到你提的这个问题,我觉得你应该没有好好的查看源代码,因为这个说的水印,也就是往图片上写字,所以,如果要做椭圆的话,只需要改变背景图片和写字时候的弧度即可。
o
osborn
你好,想请教一下椭圆印章如何生成,不知道有没有类似的源代码。
JSP 学习总结---学习笔记

什么是JSP 1)为什么说,Servlet是一个动态Web开发技术呢? Servlet是基于服务端的一种动态交互技术, HttpServletRequest表示客户端到服务端的对象 HttpServletResponse表示服务端到客户端的...

知止内明 ⋅ 04/18 ⋅ 0

spring data jpa 详解

本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求。这里不讲解JPA和Spring-data-jpa单独使用,所有的内容都是在和Spring整合的环境中实现...

无敌小学僧 ⋅ 05/30 ⋅ 0

jpa----spring-data-jpa 复杂查询,包括多表关联,分页,排序等

转载:由于此转载文章的出处也是转载的,所以原作者不详 本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求。这里不讲解JPA和Spring-data...

u010775025 ⋅ 05/29 ⋅ 0

tomcat、weblogic、jboss的区别,容器的作用

一、tomcat Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,它是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及...

水墨如丹青 ⋅ 04/13 ⋅ 0

Tomcat,JBoss与JBoss Web

最近接触到应用服务器JBoss,此外JBoss Web与Tomcat也同为web服务器,便查阅资料对三者进行比较,供大家参考。 一、Tomcat Tomcat 服务器是免费开源的Web 应用服务器。支持最新的Servlet 和J...

thinkyoung ⋅ 2014/11/16 ⋅ 0

Servlet的一些细节--学习笔记

Servlet细节 1)浏览器访问的url-pattern只是一个符合格式的任意字符串,以/开头 2)一个Servlet的url-pattern可以是1个或多个,有二种形式; a).xx b)/xx/ 注意:/不能一起直接使用 3)/和....

知止内明 ⋅ 04/17 ⋅ 0

Java Web(一) Servlet详解!!

一、什么是servlet?     处理请求和发送响应的过程是由一种叫做Servlet的程序来完成的,并且Servlet是为了解决实现动态页面而衍生的东西。理解这个的前提是了解一些http协议的东西,并且...

architect刘源源 ⋅ 05/08 ⋅ 0

JavaWeb开发比较重要的面试题

JavaWeb开发比较重要的面试题 1. 编码转换:怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串? 答:示例代码如下: String s1=”你好”; String s2=new String(s1.getBytes(“GB2312”...

xj_9264 ⋅ 05/06 ⋅ 0

web服务器,应用程序服务器,http服务器的区别

WEB服务器、应用程序服务器、HTTP服务器有何区别?IIS、Apache、Tomcat、Weblogic、WebSphere都各属于哪种服务器? 这个概念很重要。 Web服务器的基本功能就是提供Web信息浏览服务。它只需支持...

水墨如丹青 ⋅ 04/13 ⋅ 0

Java面试题之JavaWeb高级

一、Filter和Listener Filter:从J2EE1.3开始,Servlet2.3规范中加入对Filter的支持。Filter就称之为过滤器,它是Servlet技术中最激动人心的技术WEB开发人员通过Filter技术可以对web服务器管理...

年轻诠释我们的梦想_705b ⋅ 06/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ学习以及与Spring的集成(三)

本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。 在RabbitMQ的Spring配置文件中,首先需要增加命名空间。 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 其次是模...

onedotdot ⋅ 19分钟前 ⋅ 0

JAVA实现仿微信红包分配规则

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教。 算法介绍 一、红包金额限制 对于微...

楠木楠 ⋅ 31分钟前 ⋅ 0

Python 数电表格格式化 xlutils xlwt xlrd的使用

需要安装 xlutils xlwt xlrd 格式化前 格式化后 代码 先copy读取的表格,然后按照一定的规则修改,将昵称中的学号提取出来替换昵称即可 from xlrd import open_workbookfrom xlutils.copy ...

阿豪boy ⋅ 今天 ⋅ 0

面试题:使用rand5()生成rand7()

前言 读研究生这3 年,思维与本科相比变化挺大的,这几年除了看论文、设计方案,更重要的是学会注重先思考、再实现,感觉更加成熟吧,不再像个小P孩,人年轻时总会心高气傲。有1 道面试题:给...

初雪之音 ⋅ 今天 ⋅ 0

Docker Toolbox Looks like something went wrong

Docker Toolbox 重新安装后提示错误:Looks like something went wrong in step ´Checking if machine default exists´ 控制面板-->程序与应用-->启用或关闭windows功能:找到Hyper-V,如果处......

随你疯 ⋅ 今天 ⋅ 0

Guacamole 远程桌面

本文将Apache的guacamole服务的部署和应用,http://guacamole.apache.org/doc/gug/ 该链接下有全部相关知识的英文文档,如果水平ok,可以去这里仔细查看。 一、简介 Apache Guacamole 是无客...

千里明月 ⋅ 今天 ⋅ 0

nagios 安装

Nagios简介:监控网络并排除网络故障的工具:nagios,Ntop,OpenVAS,OCS,OSSIM等开源监控工具。 可以实现对网络上的服务器进行全面的监控,包括服务(apache、mysql、ntp、ftp、disk、qmail和h...

寰宇01 ⋅ 今天 ⋅ 0

AngularDart注意事项

默认情况下创建Dart项目应出现以下列表: 有时会因为不知明的原因导致列表项缺失: 此时可以通过以下步骤解决: 1.创建项目涉及到的包:stagehand 2.执行pub global activate stagehand或pub...

scooplol ⋅ 今天 ⋅ 0

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部