- 浏览: 762174 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (241)
- 个人思考 (1)
- 数据库 (5)
- java基础 (32)
- 软件工程 (2)
- zk开源框架 (15)
- 设计模式 (25)
- javascript (12)
- css (9)
- UML (2)
- CMMI软件需求 (3)
- CMMI软件设计 (2)
- CMMI软件实现 (1)
- CMMI软件测试 (1)
- 正则表达式 (4)
- 系统日志配置 (4)
- 应用服务器 (1)
- spring (7)
- XML (6)
- java web (10)
- Ajax (3)
- RichFaces (14)
- 问题 (1)
- 评论文章 (2)
- fushioncharts (2)
- MAVN (4)
- jquery (26)
- Ext js学习 (2)
- 学习心得 (2)
- CSS兼容问题 (3)
- XSL-FOP (1)
- Quartz (0)
- OSGI (1)
- spring--security (6)
- apache tools (1)
- eclispe 小技巧 (2)
- Ant (1)
- 杂记 (1)
- spring3系列 (5)
- java cache (4)
- EffectiveJava (2)
- 代码重构 (0)
最新评论
-
psz6696:
可以说是超级简单的Demo了,可惜没有演示设值注入和构造注入两 ...
模拟spring中的ClassPathXmlApplicationContext类的实现 -
ziyourJava:
[flash=200,200][img][url][list] ...
spring security进级篇 V 自定义标签控制显示 -
ztw1122:
...
zk组件开发指南(目录) -
zjysuv:
容我说一句 在座的各位都是垃圾 spring 3.2以后的@C ...
三. spring mvc 异常统一处理 -
chengwu1201:
二 基于Spring的异常体系处理
最近,一直在做报表的展示,其中表头斜线实现是个技术问题,组内讨论,有经验的同事,说直接用servlet产生图片就可以了,于是,对产生表头图片的例子做了测试,测试通过了,给大家show一下,同时,自己在学习中也得到了提高,下面是展现的效果。
中式报表表头斜线
最关键的servlet代码如下:
package com.cvicse.report.portal.servlet; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGEncodeParam; import com.sun.image.codec.jpeg.JPEGImageEncoder; /** * 生成单元格斜线图片 * */ public class CreateImageServlet extends HttpServlet { /* (non-Javadoc) * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("image/jpeg"); String type = (String) request.getParameter("type"); try { if (type.equals("1")) createImage1(request, response.getOutputStream()); else if (type.equals("2")) createImage2(request, response.getOutputStream()); else if (type.equals("3")) createImage3(request, response.getOutputStream()); else System.out.println("Error slash type"); } catch (Exception ex) { throw new ServletException(ex); } } // topdown /** * @param request * @param out * @throws Exception */ private void createImage1(HttpServletRequest request, OutputStream out) throws Exception { int width = new Integer(request.getParameter("width")); int height = new Integer(request.getParameter("height")); String borderweight = request.getParameter("borderweight") == null ? "0" : request.getParameter("borderweight"); String bordercolor = request.getParameter("bordercolor"); String backcolor = request.getParameter("backcolor"); String forecolor = request.getParameter("forecolor"); String str1 = request.getParameter("str1"); String str2 = request.getParameter("str2"); String fontname = request.getParameter("fontname"); int fontsize = new Integer(request.getParameter("fontsize")) * 96 / 72; boolean isBold = new Boolean(request.getParameter("isBold")); boolean isItalic = new Boolean(request.getParameter("isItalic")); boolean isUnderline = new Boolean(request.getParameter("isUnderline")); boolean isStrikeThrough = new Boolean(request .getParameter("isStrikeThrough")); int style = 0; if (!(isBold && isItalic)) style = Font.PLAIN; else { if (isItalic) style = Font.ITALIC; if (isBold) style += Font.BOLD; } BufferedImage bi = new BufferedImage(width - 1, height - 1, BufferedImage.TYPE_INT_RGB); Graphics2D g = bi.createGraphics(); // set background: g.setBackground(new Color(Integer.parseInt(backcolor, 16))); // g.clearRect(borderweight, borderweight, width-borderweight*2, // height-borderweight*2); g.clearRect(0, 0, width - 1, height - 1); // set border color: g.setColor(new Color(Integer.parseInt(bordercolor, 16))); // 2009.03.25 设置线条粗细 float linewidth = Float.parseFloat(borderweight); BasicStroke bs = new BasicStroke(linewidth); g.setStroke(bs); // start draw: g.drawLine(0, 0, width - 1, height - 1); Font font = new Font(fontname, style, fontsize); g.setFont(font); FontMetrics fm = g.getFontMetrics(font); int ascent2 = fm.getMaxAscent(); int width2 = fm.stringWidth(str2); int height1 = fm.getHeight(); // g.drawString(str2, width-2-width2,ascent2); g.drawString(str2, width - width2, ascent2); // g.drawString(str1, 0,height-2); g.drawString(str1, 0, height - fm.getMaxDescent()); // end draw: g.dispose(); bi.flush(); // encode: JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi); param.setQuality(1.0f, false); encoder.setJPEGEncodeParam(param); try { encoder.encode(bi); } catch (IOException ioe) { ioe.printStackTrace(); } } // aggregation /** * @param request * @param out */ private void createImage2(HttpServletRequest request, OutputStream out) { int width = new Integer(request.getParameter("width")); int height = new Integer(request.getParameter("height")); String borderweight = request.getParameter("borderweight") == null ? "0" : request.getParameter("borderweight"); String bordercolor = request.getParameter("bordercolor"); String backcolor = request.getParameter("backcolor"); String forecolor = request.getParameter("forecolor"); String str1 = request.getParameter("str1"); String str2 = request.getParameter("str2"); String str3 = request.getParameter("str3"); String fontname = request.getParameter("fontname"); int fontsize = new Integer(request.getParameter("fontsize")) * 96 / 72; boolean isBold = new Boolean(request.getParameter("isBold")); boolean isItalic = new Boolean(request.getParameter("isItalic")); boolean isUnderline = new Boolean(request.getParameter("isUnderline")); boolean isStrikeThrough = new Boolean(request .getParameter("isStrikeThrough")); int style = 0; if (!(isBold && isItalic)) style = Font.PLAIN; else { if (isItalic) style = Font.ITALIC; if (isBold) style += Font.BOLD; } BufferedImage bi = new BufferedImage(width - 2, height - 2, BufferedImage.TYPE_INT_RGB); Graphics2D g = bi.createGraphics(); // set background: g.setBackground(new Color(Integer.parseInt(backcolor, 16))); g.clearRect(0, 0, width, height); // set border color: g.setColor(new Color(Integer.parseInt(bordercolor, 16))); // 2009.03.25 设置线条粗细 float linewidth = Float.parseFloat(borderweight); BasicStroke bs = new BasicStroke(linewidth); g.setStroke(bs); // start draw: g.drawLine(width / 2, 1, width - 1, height - 1); g.drawLine(1, height / 2, width - 1, height - 1); Font font = new Font(fontname, style, fontsize); g.setFont(font); FontMetrics fm = g.getFontMetrics(font); int ascent = fm.getMaxAscent(); int width1 = fm.stringWidth(str1); int width2 = fm.stringWidth(str2); int width3 = fm.stringWidth(str3); g.drawString(str1, 0, height); g.drawString(str2, 0, ascent); g.drawString(str3, width - width3, ascent); // end draw: g.dispose(); bi.flush(); // encode: JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi); param.setQuality(1.0f, false); encoder.setJPEGEncodeParam(param); try { encoder.encode(bi); } catch (IOException ioe) { ioe.printStackTrace(); } } // radiation /** * @param request * @param out */ private void createImage3(HttpServletRequest request, OutputStream out) { int width = new Integer(request.getParameter("width")); int height = new Integer(request.getParameter("height")); String borderweight = request.getParameter("borderweight") == null ? "0" : request.getParameter("borderweight"); String bordercolor = request.getParameter("bordercolor"); String backcolor = request.getParameter("backcolor"); String forecolor = request.getParameter("forecolor"); String str1 = request.getParameter("str1"); String str2 = request.getParameter("str2"); String str3 = request.getParameter("str3"); String fontname = request.getParameter("fontname"); int fontsize = new Integer(request.getParameter("fontsize")) * 96 / 72; boolean isBold = new Boolean(request.getParameter("isBold")); boolean isItalic = new Boolean(request.getParameter("isItalic")); boolean isUnderline = new Boolean(request.getParameter("isUnderline")); boolean isStrikeThrough = new Boolean(request .getParameter("isStrikeThrough")); int style = 0; if (!(isBold && isItalic)) style = Font.PLAIN; else { if (isItalic) style = Font.ITALIC; if (isBold) style += Font.BOLD; } BufferedImage bi = new BufferedImage(width - 1, height - 1, BufferedImage.TYPE_INT_RGB); Graphics2D g = bi.createGraphics(); // set background: g.setBackground(new Color(Integer.parseInt(backcolor, 16))); g.clearRect(0, 0, width - 1, height - 1); // set border color: g.setColor(new Color(Integer.parseInt(bordercolor, 16))); // 2009.03.25 设置线条粗细 float linewidth = Float.parseFloat(borderweight); BasicStroke bs = new BasicStroke(linewidth); g.setStroke(bs); // start draw: g.drawLine(0, 0, width - 1, height / 2 - 1); g.drawLine(0, 0, width / 2 - 1, height - 1); Font font = new Font(fontname, style, fontsize); g.setFont(font); FontMetrics fm = g.getFontMetrics(font); int ascent = fm.getMaxAscent(); int width1 = fm.stringWidth(str1); int width2 = fm.stringWidth(str2); int width3 = fm.stringWidth(str3); g.drawString(str1, 0, height - 2); g.drawString(str2, width - 2 - width2, height - 2); g.drawString(str3, width - 2 - width3, ascent); // end draw: g.dispose(); bi.flush(); // encode: JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi); param.setQuality(1.0f, false); encoder.setJPEGEncodeParam(param); try { encoder.encode(bi); } catch (IOException ioe) { ioe.printStackTrace(); } } }
发表评论
-
Web监听器
2013-01-05 16:57 2758监听器的主 ... -
DAO模式的异常的处理
2011-04-07 11:47 2260DAO执行的是数据库访问操作,可能抛出底层的SQLEx ... -
不能遗忘sevlet中可输出script代码
2009-11-13 23:13 879response .getWriter() ... -
url地址中含有中文跳转乱码问题解决
2009-10-28 16:57 46341、在jsp中可能用到iframe,如果iframe的src中 ... -
servlet实现文件下载
2009-10-23 17:28 1288/** * @author gao_jie * 文件下 ... -
关于jsp乱码问题的解决
2009-10-23 17:27 13661, 最基本的乱码问题。这个乱码问题是最简单的乱码问 ... -
在jsp中直接输出二进制图片
2009-10-21 20:11 3521<%@ page info="Random I ... -
servlet和jsp的内置对象对应表
2009-09-15 21:42 35261、servlet和jsp的内置对象对应表如下: ... -
servlet基本概念分析
2009-09-08 21:22 14801、Servlet的概念 ...
相关推荐
慕课网上jsp+servlet技术生成报表 一课的源码。并不完全,且要配数据库,但是基础知识点都是用到的,且能正常运行。希望对初学者有所帮助。我也是花了很多时间编写和调试的。
### JSP中利用Servlet生成验证码图片 在Web应用开发中,验证码被广泛应用于用户登录、表单提交等场景,以防止自动化的恶意攻击。本文将详细介绍如何在Java Server Pages (JSP) 和 Servlet 技术的基础上,实现一个...
本教程主要讲解如何利用Servlet来实现动态生成验证码的功能,这对于防止机器人或恶意自动化程序在网站上进行非法操作至关重要。验证码通常由一串随机字符组成,用户需要正确输入才能完成特定操作,如注册、登录或...
实验1: 利用servlet实现一个简单的聊天室 实验目的 (1) 理解servlet的工作原理 (2) 掌握servlet编程基本技能 实验内容及要求 1. 利用servlet技术实现一个简单的聊天室,实现多人同时交流。当发送聊天信息时,信息...
在IT行业中,Servlet是一种Java平台上的服务器端编程技术,用于生成动态Web内容。本文将深入讲解如何使用Servlet来创建图片验证码,确保用户交互的安全性。验证码的主要目的是防止自动化程序(如机器人)对网站进行...
在这个场景中,我们使用Servlet来生成图片验证码,这是一种防止恶意自动化程序(如机器人)进行非法操作的安全机制。验证码通常是一串随机生成的字符,以图像形式显示,用户需要在输入框中正确输入才能完成验证。 ...
下面将详细解释如何通过Servlet实现二维码图片生成的原理和步骤。 首先,理解二维码的基本概念。二维码是一种二维条形码,可以存储比传统一维条形码更多的信息,如文本、网址、联系人信息等。它由黑白相间的模块...
`servlet`生成验证码图片是通过服务器端动态创建一个包含随机字符的图像,用户需要输入图像中显示的文字或数字来验证其身份。以下将详细解释这个过程及其相关知识点: 1. **Servlet**:Servlet是Java中用于扩展...
这是当初初学zxing和sevlet的时候写的,保存路径在ToBeZxing里,这里用的是绝对路径所以在你的电脑上多半需要更改,有注释应该一眼能看出来。为了防止名字的重复,我使用的md5来为每一个二维码命名。...
本笔记将详细探讨如何使用Servlet来生成验证码。 一、验证码的原理与作用 验证码的主要目的是区分人类用户和自动化程序,通过要求用户输入图片上的文字或者完成简单的数学问题,来验证其为真实的人类。这有助于防止...
要生成动态验证码,首先需要在Servlet中创建一个`BufferedImage`对象,定义验证码的宽度和高度。然后,通过随机数生成器填充图像,可以绘制不同颜色的线条和字符,增加识别难度。使用`Random`类生成随机字符序列,...
在servlet中动态生成验证码图片,可被JSP或servlet引用,每次刷新都会改变验证码
正在学习Java,在教程书和网上不断的学习。servlet 提供了 Java 强大的 web 交互,在这个小项目中,我用servlet 实现了在web上生成验证码的功能,正在入门Java的同学不妨试试。
本教程将深入讲解如何使用Servlet生成随机验证码。 首先,让我们了解Servlet的基本概念。Servlet是一个Java类,遵循Servlet API规范,它被部署在Web服务器上,用于扩展服务器的功能,处理来自客户端(如浏览器)的...
本文将详细解析如何使用JSP和Servlet技术来生成并刷新验证码。 ### 一、理解Servlet与验证码 Servlet是Java EE的重要组成部分,它是一种运行在服务器端的小程序,主要用于处理来自客户端的HTTP请求,并生成响应。...
servlet生成动态验证码
在这个"利用Servlet求平方根的完美实例"中,我们可能会看到以下关键步骤: 1. **创建Servlet类**:在Java中,Servlet是一个实现了`javax.servlet.Servlet`或`javax.servlet.http.HttpServlet`接口的类。在这个例子...
用servlet生成用户登陆或者注册时的验证码
总的来说,"jsp+servlet 生成验证码"是一个典型的前后端交互的例子,它展示了如何利用Java Web技术实现动态的、安全的验证码功能,为Web应用提供了一道基础的安全屏障。对于初学者来说,理解和实现这个过程有助于...