源代码请从这里下载:

http://download.csdn.net/source/2984395

使用的是JSP编程

‍ 这是导出后的效果

这是数据库中的内容

‍ 部分代码:

<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>

<%@ page import="com.jwy.dao.*" %>

<%@ page import="com.lowagie.text.pdf.*" %>

<%@ page import="com.lowagie.text.*" %>

<%@ page import="java.io.*" %>

<html>

<head>

<title>'index.jsp'</title>

<!--

<link rel="stylesheet" type="text/css" href="styles.css">

-->

</head>

<body>

<%

out.clear();

out = pageContext.pushBody();

response.setHeader("Content-Disposition","attachment;filename=stuInfo.pdf");

response.setContentType("application/x-download; charset=utf-8");

java.util.List<String[]> list = new StuInfoDao().findByAll();

//创建一个对中文字符集支持的基础字体

BaseFont bfChinese = BaseFont.createFont("STSong-Light",

"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

//使用基础字体对象创建新字体对像,粗体12号红色字

Font font = new Font(bfChinese, 12, Font.BOLD);

Document document = new Document(PageSize.A4);//创建document对象

PdfWriter.getInstance(document, response.getOutputStream());//创建书写器

document.open();//打开文档

String title = "学生信息表"; //文档标题

Paragraph paragraph = new Paragraph(title, font); //创建段落,并设置字体

paragraph.setAlignment(Paragraph.ALIGN_CENTER);//设置段落居中

document.add(paragraph);//将段落添加到文档中

PdfPTable table = new PdfPTable(5);//建立一个5列的空白表格对象

table.setSpacingBefore(30f);//设置表格上面空白宽度

String[] tableTitle = { "学号", "姓名", "性别", "出生日期", "联系电话" };//表头

for (int i = 0; i < tableTitle.length; i++) {//循环写入表头

paragraph = new Paragraph(tableTitle[i], new Font(bfChinese, 10,Font.BOLD));

PdfPCell cell = new PdfPCell(paragraph);//建立一个单元格

cell.setHorizontalAlignment(Element.ALIGN_CENTER);//设置内容水平居中显示

cell.setVerticalAlignment(Element.ALIGN_MIDDLE);//设置垂直居中

table.addCell(cell);//将单元格加入表格

}

for(int i=0;i<list.size();i++){//循环写入表文

String[] stuInfo = list.get(i);

for(int j=1;j<stuInfo.length;j++){

PdfPCell cell = new PdfPCell(new Paragraph(stuInfo[j],

new Font(bfChinese, 10)));//建立一个单元格

cell.setHorizontalAlignment(Element.ALIGN_CENTER);//设置内容水平居中显示

cell.setVerticalAlignment(Element.ALIGN_MIDDLE);//设置垂直居中

table.addCell(cell);//将单元格加入表格

}

}

document.add(table);//将表格加入文档中

document.close();//关闭文档

%>

</body>

</html>

PDF的更多相关文章

  1. 【实战Java高并发程序设计 7】让线程之间互相帮助--SynchronousQueue的实现

    [实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象 ...

  2. 【实战Java高并发程序设计6】挑战无锁算法:无锁的Vector实现

    [实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象 ...

  3. 【实战Java高并发程序设计 5】让普通变量也享受原子操作

    [实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象 ...

  4. 【实战Java高并发程序设计 4】数组也能无锁:AtomicIntegerArray

    除了提供基本数据类型外,JDK还为我们准备了数组等复合结构.当前可用的原子数组有:AtomicIntegerArray.AtomicLongArray和AtomicReferenceArray,分别表 ...

  5. 【实战Java高并发程序设计 3】带有时间戳的对象引用:AtomicStampedReference

    [实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference AtomicReference无法解决上述问题的根 ...

  6. 【实战Java高并发程序设计 1】Java中的指针:Unsafe类

    是<实战Java高并发程序设计>第4章的几点. 如果你对技术有着不折不挠的追求,应该还会特别在意incrementAndGet() 方法中compareAndSet()的实现.现在,就让我 ...

  7. 《实战java高并发程序设计》源码整理及读书笔记

    日常啰嗦 不要被标题吓到,虽然书籍是<实战java高并发程序设计>,但是这篇文章不会讲高并发.线程安全.锁啊这些比较恼人的知识点,甚至都不会谈相关的技术,只是写一写本人的一点读书感受,顺便 ...

  8. 《实战Java高并发程序设计》读书笔记

    文章目录 第二章 Java并行程序基础 2.1 线程的基本操作 2.1.1 线程中断 2.1.2 等待(wait)和通知(notify) 2.1.3 等待线程结束(join)和谦让(yield) 2. ...

  9. 《实战Java高并发程序设计》读书笔记三

    第三章 JDK并发包 1.同步控制 重入锁:重入锁使用java.util.concurrent.locks.ReentrantLock类来实现,这种锁可以反复使用所以叫重入锁. 重入锁和synchro ...

  10. 《实战Java高并发程序设计》读书笔记二

    第二章  Java并行程序基础 1.线程的基本操作 线程:进程是线程的容器,线程是轻量级进程,是程序执行的最小单位,使用多线程而不用多进程去进行并发程序设计是因为线程间的切换和调度的成本远远的小于进程 ...

随机推荐

  1. 第二章 git 工作区与reset,revert

    1.Git工作区原理图 要清楚理解git reset的三个模式的区别,首先应该搞明白Git的各个工作区的划分. 工作区(working directory):在当前仓库中,新增,更改,删除文件这些动作 ...

  2. MVC中的常见问题

    1.  The model backing the 'MusicStoreDBContext' context has changed since the database was created. ...

  3. C#实现:给定任意要给字符串,输出所有可能的回文的子字符串集合。

    class Program { static void Main(string[] args) { string testStr = "sdfadfdsfadfdsfsdf"; i ...

  4. Python 第五天 装饰器

    装饰器 装饰器是函数,只不过该函数可以具有特殊的含义,装饰器用来装饰函数或类,使用装饰器可以在函数执行前和执行后添加相应操作. def wrapper(func): def result(): pri ...

  5. 后台返回字符串类型function的处理 (递归算法)

    $(function(){ $.ajax({ type: "post", url: "${ctx}/modules/fos/reference/echart", ...

  6. SVN版本控制系统

    SVN 版本控制系统 1.SVN作用 防止代码丢失 : 因为没有哪个项目能够一次性开发完成 代码版本回退 : 你可以在开发过程中找到以前上传到服务器上面的所有版本 多人代码整合 : 公司中多个人开发同 ...

  7. 猿团YTFCloud--5分钟自制APP,开发从未如此简单

    9月15日,YTFCloud将正式开启内测, 这意味着猿团YTF框架产品线全面升级.同时,公测过后,YTFCloud的APP线上DIY服务将面向所有用户,让人人都能成为APP“开发商”. 什么是YTF ...

  8. java设计模式之-----桥接模式

    一.概念定义 将抽象部分和实现部分分离,使他们都可以独立的变化.(这句话有点抽象啊..) 在软件系统中,某种类型由于自身逻辑,具有多个维度的变化,如何利用面向对象的技术来使得该类型沿着多方向变化,而又 ...

  9. CentOS 7下设置DNS服务器

    在CentOS 7下,手工设置 /etc/resolv.conf 里的DNS,过了一会,发现被系统重新覆盖或者清除了.和CentOS 6下的设置DNS方法不同,有几种方式: 1.使用全新的命令行工具 ...

  10. Java实现Excel导入数据库,数据库中的数据导入到Excel

    private static void executeMethod(JobExecutionContext arg0) throws Exception{ try { TContrastService ...