封装导出pdf报表

下载bcprov-jdk15-139.jar,
iText-2.1.7.jar,
iTextAsian.jar,
iTextAsianCmaps.jar夹包
前台index.jsp如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html; charset=utf-8" isELIgnored="false"%>
<%
String path = request.getContextPath();
%>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>欢迎来到pdf打印功能实现网站</title>
<head>
<script type="text/javascript" language="javascript" src="<%=path %>/js/jquery.js"></script>
<script type="text/javascript">
function export_report(){
var tableHeader="";
var tableBody="";
//获取表格信息
$("#tableResult tr").each(function(i,_tr){
$(_tr).children().each(function(k,_td){
if(i==0){
tableHeader+=$.trim($(_td).text())+",";
}else{
tableBody+=$.trim($(_td).text())+"##";
}
});
if(i>0){
tableBody+="@@";
}
});
if(tableHeader==""){
alert("表头未初始化!");
return false;
}
if(tableBody==""){
alert("表格体没内容!");
return false;
}
$("#report_tableHeader").val(tableHeader);
$("#report_tableBody").val(tableBody);
$("#report_form").submit();
}
</script>
</head>

<body>
<form action="#" method="post" target="_self" name="naturalPerson" id="naturalPerson">
<div class="dispaly-div" >
<table id="tableResult" width="100%" border="1" align="center" cellpadding="0" cellspacing="0" style="border-collapse: collapse;" class="sortable">
<thead>
<tr style="cursor: pointer;">
<td height="28" align="center" class="td_LTBG">户人编号</td>
<td height="28" align="center" class="td_LTBG">户编号</td>
<td height="28" align="center" class="td_LTBG">姓名</td>
<td height="28" align="center" class="td_LTBG">性别</td>
<td height="28" align="center" class="td_LTBG">现居住地</td>
<td height="28" align="center" class="td_LTBG">户籍所在地</td>
<td height="28" align="center" class="td_LTBG">身份证号码</td>
<td height="28" align="center" class="td_LTBG">出生日期</td>
<td height="28" align="center" class="td_LTBG">民族</td>
<td height="28" align="center" class="td_LTBG">文化程度</td>
<td height="28" align="center" class="td_LTBG">户口性质</td>
<td height="28" align="center" class="td_LTBG">婚姻状况</td>
</tr>
</thead>
<tr>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
</tr>
<tr>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
</tr>
<tr>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
</tr>
<tr>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
</tr>
<tr>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
</tr>
<tr>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
</tr>
<tr>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
</tr>
<tr>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
</tr>
<tr>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
</tr>
<tr>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
</tr>
<tr>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
</tr>
<tr>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
<td height="28" align="center" class="td_TRB">显示不下</td>
</tr>
<tr>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
<td height="28" align="center" class="td_TRB">显示</td>
</tr>
<tr>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
<td height="28" align="center" class="td_TRB">不显示</td>
</tr>
</table>
</div>
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="25" align="right" class="td_RB">
<span style="margin-right: 3%;">
<a id="expor_pdf" οnclick="return export_report();" style="cursor: pointer;">打印PDF</a>
</span>
</td>
</tr>
</table>
</form>
<form action="<%=path%>/ExportServletPdf" method="post" id="report_form">
<input type="hidden" name="type" id="report_type"/>
<input type="hidden" name="tableHeader" id="report_tableHeader"/>
<input type="hidden" name="tableBody" id="report_tableBody"/>
</form>
</body>
</html>
后台CommonPdf.java封装类如下:
public class CommonPdf {
private static String CHINA_FONT_SONGTI = "STSongStd-Light"; //宋体
private static String ENCODE_GB = "UniGB-UCS2-H"; // 中文编码GB(横版)

/**
* 取得基本字体
* @param font
* @param encode
* @return
*/
public BaseFont getBaseFont(String font, String encode){
BaseFont bfChinese = null;
try {
bfChinese = BaseFont.createFont(font, encode, false);
} catch (Exception e) {
e.printStackTrace();
}
return bfChinese;
}

/**
*取得具体字体
* @param baseFont 基本字体
* @param fontSize 字体大小 ,如12
* @param fontStyle 字体样式, 如com.lowagie.text.Font.BOLD(粗), Font.ITALIC(斜), Font.BOLDITALIC(粗斜),Font.NORMAL(普通)
* @param color 字体颜色 ,如:java.awt.Color.BLACK ,Color.BLUE
* @return
*/
public Font getFont(BaseFont baseFont, float fontSize, int fontStyle, Color color){
Font font = new Font(baseFont, fontSize, fontStyle, color);
return font;
}

/**
* 取得任意对齐方式的字体
* @param str 显示字体
* @param font 字体对象
* @param i 显示位置 如左:0,中:1,右:2
* @return
*/
public Paragraph getFreeFont(String str,Font font,int i){
Paragraph par = new Paragraph(str, font);
par.setAlignment(i);
return par;
}

/**
* 取得中文基本字体(横向)
* @return
*/
public BaseFont getCnBaseFont(){
return getBaseFont(CHINA_FONT_SONGTI, ENCODE_GB);
}

/**
* 取得正常字体
* @param fontSize 字体大小 ,如12
* @param color 字体颜色 ,如Color.BLACK
* @return
*/
public Font getCnFont(float fontSize, Color color){
BaseFont bfCn = getCnBaseFont();
Font boldFont = getFont(bfCn, fontSize, Font.NORMAL, color);
return boldFont;
}

/**
* 取得加粗字体
* @param fontSize 字体大小 ,如12
* @param color 字体颜色 ,如Color.BLACK
* @return
*/
public Font getCnBoldFont(float fontSize, Color color){
BaseFont bfCn = getCnBaseFont();
Font boldFont = getFont(bfCn, fontSize, Font.BOLD, color);
return boldFont;
}


/**
* 取得斜体
* @param fontSize 字体大小 ,如12
* @param color 字体颜色 ,如Color.BLACK
* @return
*/
public Font getCnItalicFont(float fontSize, Color color){
BaseFont bfCn = getCnBaseFont();
Font boldFont = getFont(bfCn, fontSize, Font.ITALIC, color);
return boldFont;
}

/**
* 取得粗斜体
* @param fontSize 字体大小 ,如12
* @param color 字体颜色 ,如Color.BLACK
* @return
*/
public Font getCnBoldItalicFont(float fontSize, Color color){
BaseFont bfCn = getCnBaseFont();
Font boldFont = getFont(bfCn, fontSize, Font.BOLDITALIC, color);
return boldFont;
}

/**
* 取得下划线字体
* @param fontSize 字体大小 ,如12
* @param color 字体颜色 ,如Color.BLACK
* @return
*/
public Font getCnUnderlineFont(float fontSize, Color color){
BaseFont bfCn = getCnBaseFont();
Font boldFont = getFont(bfCn, fontSize, Font.UNDERLINE, color);
return boldFont;
}

/**
* 插入图片
* @param url
* @param imgWidth
* @param imgHeigth
* @param leftPos
* @param topPos
* @return
* @throws Exception
*/
public Image setImage(String url, float imgWidth, float imgHeigth, float leftPos, float topPos)
throws Exception {
Image img = Image.getInstance(url);
img.scaleAbsolute(imgWidth, imgHeigth);// 图片大小
img.setAbsolutePosition(leftPos, topPos);// 图片位置
return img;
}

/**
* 页眉
* @param document
* @param str
* @param flag
* @throws Exception
*/
public void setHeader(Document document, String str) throws Exception {
// 设置页眉
HeaderFooter header = new HeaderFooter(new Phrase(str,getCnFont(12,Color.black)), false);
header.setBorder(Rectangle.NO_BORDER);
header.setAlignment(Element.ALIGN_RIGHT);
document.setHeader(header);
}

/**
* 页脚
* @param document
* @param str
* @throws Exception
*/
public void setFooter(Document document, String str) throws Exception{
// 设置页脚
HeaderFooter footer = new HeaderFooter(new Phrase(str,getCnFont(8,Color.black)), true);
// 设置页脚是否有边框
// 0表示无
// 1上边框
// 2下边框
// 3上下边框都有 默认都有
footer.setBorder(0);
//footer.setBorder(1);
//footer.setBorder(2);
//footer.setBorder(3);
footer.setAlignment(Element.ALIGN_CENTER);
document.setFooter(footer);
}

/**
* pdf加密处理
* @param inputFile 文件路径
* @param outputFile 输出路径
* @param userPsw
* null或"",表示不用密码(读)
* @param ownerPsw
* null或"",表示不用密码(写)
* @param permissions ALLOW_SCREENREADERS 只读 PdfWriter.ALLOW_COPY 允许复制
* PdfWriter.ALLOW_PRINTING 允许打印,其他叁考PdfWriter常量
*/
public void encrypt(String inputFile, String outputFile, String userPsw,
String ownerPsw, int permissions) {
try {
PdfReader reader = new PdfReader(inputFile);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));
stamper.setEncryption(userPsw.getBytes(),ownerPsw.getBytes(), permissions, false);
stamper.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}

/**
* 增加水印
* @param pdfWriter
*/
public void addWaterMark(PdfWriter pdfWriter, String str, float leftPos, float topPos){
PdfContentByte over;
//under = stamp.getUnderContent(1);
//under.addImage(img);
over = pdfWriter.getDirectContentUnder();
over.beginText();
over.setFontAndSize(getBaseFont(CHINA_FONT_SONGTI,ENCODE_GB), 30);
over.showTextAligned(Element.ALIGN_LEFT, str, leftPos, topPos, 45);
over.endText();
}

}
打印pdf类ExportServletPdf.java如下:
public class ExportServletPdf extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public ExportServletPdf() {
super();
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.reset();
try {
// 表头
String tableHeader=request.getParameter("tableHeader");
// 表格内容
String tableBody=request.getParameter("tableBody");
// pdf共通类
CommonPdf cellutil = new CommonPdf();
// 创建文档
Document document = new Document(PageSize.A4,50,50,50,50);
// 定义字节输出流
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
// 打印pdf
PdfWriter writer = PdfWriter.getInstance(document,byteArrayOutputStream);
// 设置页眉页脚
cellutil.setHeader(document, "中华人民共和国");
cellutil.setFooter(document,"页码:");
// 打开文档
document.open();
// 标题
Font font = cellutil.getCnFont(15, Color.RED);
Paragraph par = cellutil.getFreeFont("公司开支发票", font, 1);
document.add(par);
// 获取表头
String[] head = tableHeader.split(",");
// 分隔每一行记录
String[] content = tableBody.split("@@");
// 创建表格
Table table=new Table(head.length);
table.setWidth(100);
table.setBorder(1);
table.setAlignment(Element.ALIGN_CENTER);
table.setPadding(1);
// 列名
for (int i = 0; i < head.length; i++) {
Font trFont = cellutil.getCnFont(8, Color.BLACK);
Cell cell=new Cell(new Phrase(head[i],trFont));
//cell.setUseAscender(true);
cell.setUseDescender(true);
cell.setVerticalAlignment(Cell.ALIGN_MIDDLE);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中
cell.setVerticalAlignment(Element.ALIGN_CENTER);//垂直居中
cell.setHeader(true);
cell.setBackgroundColor(new Color(231,231,231));
cell.setVerticalAlignment(Element.ALIGN_CENTER);
table.addCell(cell);
}
table.endHeaders();
// 列值
// 循环每条记录
for (int i = 0; i < content.length; i++) {
Cell cell=null;
//取出每个单元格的值
String[] value=content[i].split("##");
for (int j = 0; j < value.length; j++) {
Font tdFont = cellutil.getCnFont(8, Color.BLACK);
cell = new Cell(new Phrase(value[j],tdFont));
//cell.setUseAscender(true); //单元格垂直对齐
cell.setUseDescender(true); //单元格水平对齐
cell.setVerticalAlignment(Cell.ALIGN_MIDDLE);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setVerticalAlignment(Element.ALIGN_CENTER);
table.addCell(cell);
}
}
// 添加表格
document.add(table);
// 添加图片
Image image = cellutil.setImage("D:/ad.jpg", 100, 50, 430, 420);
document.add(image);
// 添加水印
cellutil.addWaterMark(writer,"钓 鱼 岛 是 中 国 的",220,500);
// 关闭文档
document.close();
// 关闭读写流
writer.close();
// 输出pdf文件
String fileName = new String(new String(("封装打印报表" + ".pdf").getBytes("gb2312"),"ISO-8859-1"));
response.setContentType("application/pdf;charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename="+ fileName);
ServletOutputStream outputStream = response.getOutputStream();
byteArrayOutputStream.writeTo(outputStream);
// 加密
//cellutil.encrypt(fileName,"D:/测试pdf.pdf","123","123456789",PdfWriter.ALLOW_COPY);
//删除以前没有加密文件
/*File file =new File(fileName);
if(file.exists())
{
file.delete();
}*/
// 关闭流
outputStream.flush();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值