JavaWeb itext 导出Pdf
前两天刚刚写了一篇:JavaWeb POI 导出Excel的文章,现在来说一下:怎么将数据导出为:Pdf格式的简单文章,其实他们的基本逻辑思路都是一样的,只不过用的工具类不一样而已。废话不多说,下面是将数据导出为Pdf格式的具体过程,这个是根据我自己公司的项目的逻辑来写一个实现类,大家可以根据自己的需求做修改就行了。
ExportPdf(导出Pdf的工具类)
1. 创建一些导出Pdf页面所需要的对象
//创建一个byte型别数组的缓冲区,利用ByteArrayOutputStream的实例向数组中写入数据
private ByteArrayOutputStream baos;
//定义PdfWriter对象
private PdfWriter writer;
//定义一个Pdf页面
private Document document;
//定义一个写入数据的Table
private PdfPTable table;
//定义Pdf的字体对象
private BaseFont baseFont;
private Font font;
//定义每一列的宽度的比例
float[] widths = {20, 20, 20, 20};
2. 初始化Table
//初始化Table
public void init() throws DocumentException, IOException {
//设置Pdf页面的大小
document = new Document(PageSize.A4.rotate(), -20, -20, 20, 20);
baos = new ByteArrayOutputStream();
writer = PdfWriter.getInstance(document, baos);
document.open();
//设置字体
baseFont = BaseFont.createFont("simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
}
3. 生成Pdf标题
//生成Pdf页面标题
public void buildPdfTitile() throws DocumentException {
//new 一个只有一列的Table
table = new PdfPTable(1);
//设置字体样式
font = new Font(baseFont, 16, Font.BOLD, new BaseColor(0, 0, 0));
PdfPCell cell = getPdfCell("学生表", font, 0, Element.ALIGN_CENTER);
//插入数据
table.addCell(cell);
//把table添加到Document对象
document.add(table);
}
4. 生成Pdf页面的表头
//生成Pdf表头
public void buildPdfTableHeader() throws DocumentException {
String[] tableHeaders = {"学号", "姓名", "年龄", "性别"};
table = new PdfPTable(widths);
//设置字体样式
font = new Font(baseFont, 12, Font.BOLD, new BaseColor(0, 0, 0));
for (int i = 0; i < tableHeaders.length; i++) {
table.addCell(getPdfCell(tableHeaders[i], font, 1, Element.ALIGN_CENTER));
}
document.add(table);
}
5. 写入Pdf表数据
//写入Pdf表数据
public void buildPdfTableBody(List<Student> list) throws DocumentException {
table = new PdfPTable(widths);
//定义每个单元格的默认边框宽度
table.getDefaultCell().setBorderWidth((float) 0.1);
//定义每个单元格的默认横向排列方式
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
//设置字体样式
font = new Font(baseFont, 12, Font.NORMAL, new BaseColor(0, 0, 0));
//Pdf加入表数据
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
table.addCell(getPdfCell(student.getSno(), font, 1, Element.ALIGN_LEFT));
table.addCell(getPdfCell(student.getName(), font, 1, Element.ALIGN_LEFT));
table.addCell(getPdfCell(student.getAge(), font, 1, Element.ALIGN_RIGHT));
table.addCell(getPdfCell(student.getSex(), font, 1, Element.ALIGN_LEFT));
}
document.add(table);
}
6. 上面生成Pdf的过程都有一个getPdfCell()的方法,下面是这个方法的代码:
//获得每个不同单元格的style,方法里面的参数分别为(单元格的值, 字体样式, 边框宽度, 水平位置)
public PdfPCell getPdfCell(String value, Font font, float borderWidth, int align) {
Phrase phrase = new Phrase(value, font);
PdfPCell cell = new PdfPCell();
cell.setPhrase(phrase);
//设置边框宽度
cell.setBorderWidth(borderWidth);
//设置水平位置
cell.setHorizontalAlignment(align);
return cell;
}
7. 实现导出Pdf的主方法exportPdf();
//导出为Pdf
public ByteArrayOutputStream exportPdf(List<Student> list) throws DocumentException, IOException {
init();
buildPdfTitile();
buildPdfTableHeader();
buildPdfTableBody(list);
document.close();
return baos;
}
Action层调用Pdf工具类的主方法,得到导出Pdf的结果
//导出Pdf
public void exportPdf() throws DocumentException, IOException {
//设置页面编码格式
response.setContentType("text/plain;charaset=utf-8");
response.setContentType("application/vnd.ms-pdf");
response.setHeader("Content-Disposition", "attachment; filename=student.pdf");
//List集合
List<Student> list = new ArrayList<>();
list.add(new Student("001", "A", "20", "男"));
list.add(new Student("002", "B", "20", "男"));
list.add(new Student("003", "C", "20", "女"));
ExportPdf export = new ExportPdf();
ByteArrayOutputStream baos = export.exportPdf(list);
response.setContentLength(baos.size());
OutputStream out = response.getOutputStream();
baos.writeTo(out);
baos.close();
out.close();
}
前台JS代码:
<script>
function exportPdf(){
location.href="export/Pdf";
<!--这里不能用ajax请求,ajax请求无法弹出下载保存对话框-->
}
</script>
<a onclick="exportPdf()">导出Pdf</a>
点击查看更多内容
7人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦