【Java】使用 PdfPTable 生成 PDF 并导出步骤

一、我常用的几个对象

BaseFont

1、含义:创建各种类型字体的基类

2、创建字体

// 创建各种类型字体的基类。
BaseFont baseFont = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

// 根据创建的中文基类,就可以创建各种样式的字体
// 粗体,字体大小22
Font titleFont = new Font(baseFont, 22, Font.BOLD);
// 粗体,字体大小6
Font columnFont = new Font(baseFont, 6, Font.BOLD);
// 标准,字体大小6
Font dataFont = new Font(baseFont, 5, Font.NORMAL);

Paragraph

1、含义:段落

2、创建及设置文本和样式

Paragraph paragraph = new Paragraph();
// 水平居中
paragraph.setAlignment(Element.ALIGN_CENTER);
// 设置段落文本及字体
paragraph.add(new Phrase("段落文本", titleFont));

PdfPTable

1、含义:表格

2、创建及设置样式

// 括号里的 15 是表示 15 列
PdfPTable table = new PdfPTable(15);
// 表格设置上外边距
table.setSpacingBefore(20f);
// 表格设置下外边距
table.setSpacingAfter(20f);

PdfPCell

1、含义:单元格

2、创建、设置文本和样式、合并单元格操作

// columnName 填写单元格文本,font 填写上面设置的字体
PdfPCell cell = new PdfPCell(new Phrase(columnName, font));
// 垂直居中(setUseAscender:启用基于最大上升高度的第一行高度调整,不设置会居中偏低一点)
cell.setUseAscender(true);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
// 水平居中
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
// 设置最小高度
cell.setMinimumHeight(20f);
// 设置背景颜色
cell.setBackgroundColor(new BaseColor(217, 217, 217));
// 所占行数(这个和前端页面代码设置是一样的)
cell.setRowspan(rowSpan);
// 所占列数(这个和前端页面代码设置是一样的)
cell.setColspan(colspan);
// 去除边框
cell.disableBorderSide(15);

二、导出 PDF 代码

1、导出到指定文件里面

public void exportExcel() {
	OutputStream out = null;
	try {
		// 创建字体
		// 如果不需要表格直接用 Paragraph 段落即可
		// 如果需要表格则使用 PdfPTable 和 PdfPCell
		// 如果需要单元格里面一段文本居左一段文本居右也可以使用表格操作,去除边框即可

		// 输出到对应文件里面
	    out = new FileOutputStream("D:/test.pdf");
	    Document doc = new Document();
	    // PDF横向显示
	    doc.setPageSize(PageSize.LETTER.rotate());
	
	    // 将流写入文档中
	    PdfWriter.getInstance(doc, out);
	    doc.open();
	    // 记得将之前建的段落和表格添加到文档里面
	    doc.add(paragraph);
	    doc.add(table);
	    doc.close();
	} catch (Exception e) {
        e.printStackTrace();
        if (out != null) {
            try {
                out.close();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }
    }
}

2、浏览器导出

public void exportExcel(HttpServletResponse response) throws IOException, DocumentException {
	// 创建字体
	// 如果不需要表格直接用 Paragraph 段落即可
	// 如果需要表格则使用 PdfPTable 和 PdfPCell
	// 如果需要单元格里面一段文本居左一段文本居右也可以使用表格操作,去除边框即可

	String filename = "PDF文件名称.pdf";
	response.setContentType("application/pdf");
    response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(filename, "UTF-8"));

    Document doc = new Document();
    // PDF横向显示
    doc.setPageSize(PageSize.LETTER.rotate());
    // 将流输出到文档中
    PdfWriter.getInstance(doc, response.getOutputStream());	

    doc.open();
    // 记得将之前建的段落和表格添加到文档里面
    doc.add(paragraph);
    doc.add(table);
    doc.close();
}

3、如果代码太多,可以根据自己需求把代码部分代码提取出来

/**
 * 添加单元格
 *
 * @param table      表格
 * @param columnName 字段名
 * @param rowSpan    所占行数
 * @param colspan    所占列数
 * @param font       字体
 * @param isUseColor 是否使用颜色
 */
private void addPdfPCell(PdfPTable table, String columnName, Integer rowSpan, Integer colspan, Font font, Boolean isUseColor) {
    PdfPCell cell = new PdfPCell(new Phrase(columnName, font));
    cell.setMinimumHeight(20f);
    if (isUseColor) {
        cell.setBackgroundColor(new BaseColor(217, 217, 217));
    }
    if (rowSpan != null) {
        cell.setRowspan(rowSpan);
    }
    if (colspan != null) {
        cell.setColspan(colspan);
    }
    cell.setUseAscender(true);
    cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    table.addCell(cell);
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值