Java 生成「学生成绩单」PDF 示例(Template)
Template2 页 A4 · 37 KB
学生成绩单表格版式,课程成绩一目了然。

输出规格
- PDF 页数
- 2
- 图表类型
- Template
- 模板行数
- 247
- 源码行数
- 160
Java 源码 · JQuickBiz88Transcript.java
以下代码即生成上方 PDF 的完整测试类,可直接复制运行;Maven 依赖见快速开始章节。
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Copyright (c) [2025-2099] Martin ([email protected])
*/
package com.github.paohaijiao.biz.scenario;
import com.github.paohaijiao.config.JPdfConfig;
import com.github.paohaijiao.executor.JQuickPdfFactory;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Map;
public class JQuickBiz88Transcript {
private static final String PDF_DIR = "D:/test/pdf/";
private static final String IMG_DIR = "D:/test/image/";
private static final String OUT_FILE = PDF_DIR + "88_transcript.pdf";
private static final String TEMPLATE = "report/biz/88_transcript.txt";
/** 课程原始数据:名称 / 学分 / 成绩。 */
private static final String[][] COURSES = {
{"高等数学(下)", "5.0", "92"},
{"线性代数", "3.0", "88"},
{"概率论与数理统计", "3.0", "85"},
{"数据结构", "4.0", "94"},
{"操作系统", "4.0", "89"},
{"计算机网络", "3.5", "86"},
{"数据库原理", "3.5", "91"},
{"Java 程序设计", "3.0", "96"},
{"软件工程", "2.5", "83"},
{"编译原理", "3.0", "76"},
{"算法设计与分析", "3.0", "87"},
{"大学英语(四)", "2.0", "82"},
{"毛泽东思想概论", "2.0", "79"},
{"体育(四)", "1.0", "90"},
{"计算方法", "2.5", "81"},
{"信息安全导论", "2.0", "88"},
{"机器学习基础", "3.0", "93"},
{"分布式系统", "2.5", "86"},
{"专业英语", "2.0", "78"},
{"生产实习", "3.0", "89"},
{"毕业设计(开题)", "4.0", "85"}};
public static void main(String[] args) throws IOException {
mkdirs();
generateSeal(IMG_DIR + "88_seal.png");
Map<String, Object> data = new LinkedHashMap<String, Object>();
data.put("studentName", "顾清和");
data.put("studentNo", "20220101 0347");
data.put("college", "计算机科学与技术学院");
data.put("major", "软件工程(卓越工程师班)");
data.put("term", "2025-2026 学年 第一学期");
data.put("issueDate", "2026年10月19日");
BigDecimal totalCredit = BigDecimal.ZERO;
BigDecimal weighted = BigDecimal.ZERO;
for (int i = 0; i < COURSES.length; i++) {
String name = COURSES[i][0];
BigDecimal credit = new BigDecimal(COURSES[i][1]);
int score = Integer.parseInt(COURSES[i][2]);
BigDecimal point = gradePoint(score);
totalCredit = totalCredit.add(credit);
weighted = weighted.add(credit.multiply(point));
String remark = score < 60 ? "不及格" : (score >= 90 ? "优秀" : "");
data.put("courseName" + (i + 1), name);
data.put("courseCredit" + (i + 1), credit.toPlainString());
data.put("courseScore" + (i + 1), String.valueOf(score));
data.put("coursePoint" + (i + 1), point.toPlainString());
data.put("courseRemark" + (i + 1), remark);
}
BigDecimal gpa = totalCredit.signum() == 0 ? BigDecimal.ZERO
: weighted.divide(totalCredit, 2, RoundingMode.HALF_UP);
data.put("totalCredit", totalCredit.toPlainString());
data.put("gpa", gpa.toPlainString());
JPdfConfig config = new JPdfConfig();
config.getLayoutConfig().setFlexLayout(true);
config.getDoc().setMargins(Arrays.asList(52, 52, 58, 52));
config.getFooterConfig().setEnabled(true);
config.getFooterConfig().setFontSize(8);
config.getFooterConfig().setPageNumberFormat("第 %d 页");
JQuickPdfFactory factory = new JQuickPdfFactory(config);
factory.bindAll(data);
byte[] pdf = factory.executeResource(TEMPLATE);
FileOutputStream out = new FileOutputStream(OUT_FILE);
out.write(pdf);
out.close();
System.out.println("已生成:" + OUT_FILE);
}
/** 按百分制成绩换算绩点。 */
private static BigDecimal gradePoint(int score) {
if (score >= 90) {
return new BigDecimal("4.0");
} else if (score >= 85) {
return new BigDecimal("3.7");
} else if (score >= 82) {
return new BigDecimal("3.3");
} else if (score >= 78) {
return new BigDecimal("3.0");
} else if (score >= 75) {
return new BigDecimal("2.7");
} else if (score >= 72) {
return new BigDecimal("2.3");
} else if (score >= 68) {
return new BigDecimal("2.0");
} else if (score >= 64) {
return new BigDecimal("1.5");
} else if (score >= 60) {
return new BigDecimal("1.0");
}
return BigDecimal.ZERO;
}
private static void mkdirs() {
new File(PDF_DIR).mkdirs();
new File(IMG_DIR).mkdirs();
}
private static void generateSeal(String path) throws IOException {
int size = 200;
BufferedImage image = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = image.createGraphics();
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
Color red = new Color(0xC6, 0x28, 0x28);
g.setColor(red);
g.setStroke(new BasicStroke(6f));
g.drawOval(8, 8, size - 16, size - 16);
g.setFont(new Font("Microsoft YaHei", Font.BOLD, 15));
g.drawString("××大学", size / 2 - 27, 62);
g.setFont(new Font("Microsoft YaHei", Font.BOLD, 17));
g.drawString("教务处", size / 2 - 27, size / 2 + 28);
g.dispose();
ImageIO.write(image, "png", new File(path));
}
}最小调用(3 行)
不想读完整测试类?核心就是这三行:绑定图表 SVG,执行模板,拿到 PDF 字节流。可直接复制到你的项目里。
// config 可省略;svg 来自 JChartRendererFactory.renderChart(...),见下方完整源码
byte[] pdf = new JQuickPdfFactory(config).executeResource("report/biz/88_transcript.txt");模板文件 · 88_transcript.txt
类 HTML + 内联 CSS 的模板语法,绑定数据后渲染为 PDF。下方为完整模板,可直接复制,也可下载原始文件。
<pdf>
<body>
<h1 style="fontSize:14pt; bold:true; color:#1F4E79; textAlignment:center; characterSpacing:4pt">'××大学 教务管理系统'</h1>
<h2 style="fontSize:19pt; bold:true; color:#1A2733; textAlignment:center; characterSpacing:6pt; marginTop:4px">'学 生 成 绩 单'</h2>
<p style="fontSize:8.5pt; color:#5A6B7C; textAlignment:center; marginBottom:8px">'ACADEMIC TRANSCRIPT · '${term}</p>
<table style="width:100%; fontSize:9pt">
<tr>
<td style="width:70px; padding:5px; backgroundColor:#E8EDF2; bold:true; border:1px solid #C3CDD8">'姓名'</td>
<td style="width:120px; padding:5px; border:1px solid #C3CDD8">${studentName}</td>
<td style="width:70px; padding:5px; backgroundColor:#E8EDF2; bold:true; border:1px solid #C3CDD8">'学号'</td>
<td style="padding:5px; border:1px solid #C3CDD8">${studentNo}</td>
</tr>
<tr>
<td style="padding:5px; backgroundColor:#E8EDF2; bold:true; border:1px solid #C3CDD8">'院系'</td>
<td style="padding:5px; border:1px solid #C3CDD8">${college}</td>
<td style="padding:5px; backgroundColor:#E8EDF2; bold:true; border:1px solid #C3CDD8">'专业'</td>
<td style="padding:5px; border:1px solid #C3CDD8">${major}</td>
</tr>
</table>
<!-- 成绩表:第 1 页(1~20 门) -->
<table style="width:100%; fontSize:8.5pt; marginTop:6px">
<tr>
<th style="padding:4px; backgroundColor:#1F4E79; color:white; textAlign:center; border:1px solid #1F4E79; width:7%">'序号'</th>
<th style="padding:4px; backgroundColor:#1F4E79; color:white; textAlign:center; border:1px solid #1F4E79; width:45%">'课程名称'</th>
<th style="padding:4px; backgroundColor:#1F4E79; color:white; textAlign:center; border:1px solid #1F4E79; width:10%">'学分'</th>
<th style="padding:4px; backgroundColor:#1F4E79; color:white; textAlign:center; border:1px solid #1F4E79; width:10%">'成绩'</th>
<th style="padding:4px; backgroundColor:#1F4E79; color:white; textAlign:center; border:1px solid #1F4E79; width:13%">'绩点'</th>
<th style="padding:4px; backgroundColor:#1F4E79; color:white; textAlign:center; border:1px solid #1F4E79">'备注'</th>
</tr>
<tr>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">'1'</td>
<td style="padding:4px; border:1px solid #C3CDD8">${courseName1}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseCredit1}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseScore1}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${coursePoint1}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseRemark1}</td>
</tr>
<tr>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">'2'</td>
<td style="padding:4px; border:1px solid #C3CDD8">${courseName2}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseCredit2}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseScore2}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${coursePoint2}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseRemark2}</td>
</tr>
<tr>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">'3'</td>
<td style="padding:4px; border:1px solid #C3CDD8">${courseName3}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseCredit3}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseScore3}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${coursePoint3}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseRemark3}</td>
</tr>
<tr>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">'4'</td>
<td style="padding:4px; border:1px solid #C3CDD8">${courseName4}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseCredit4}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseScore4}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${coursePoint4}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseRemark4}</td>
</tr>
<tr>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">'5'</td>
<td style="padding:4px; border:1px solid #C3CDD8">${courseName5}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseCredit5}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseScore5}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${coursePoint5}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseRemark5}</td>
</tr>
<tr>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">'6'</td>
<td style="padding:4px; border:1px solid #C3CDD8">${courseName6}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseCredit6}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseScore6}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${coursePoint6}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseRemark6}</td>
</tr>
<tr>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">'7'</td>
<td style="padding:4px; border:1px solid #C3CDD8">${courseName7}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseCredit7}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseScore7}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${coursePoint7}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseRemark7}</td>
</tr>
<tr>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">'8'</td>
<td style="padding:4px; border:1px solid #C3CDD8">${courseName8}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseCredit8}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseScore8}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${coursePoint8}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseRemark8}</td>
</tr>
<tr>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">'9'</td>
<td style="padding:4px; border:1px solid #C3CDD8">${courseName9}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseCredit9}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseScore9}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${coursePoint9}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseRemark9}</td>
</tr>
<tr>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">'10'</td>
<td style="padding:4px; border:1px solid #C3CDD8">${courseName10}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseCredit10}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseScore10}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${coursePoint10}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseRemark10}</td>
</tr>
<tr>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">'11'</td>
<td style="padding:4px; border:1px solid #C3CDD8">${courseName11}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseCredit11}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseScore11}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${coursePoint11}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseRemark11}</td>
</tr>
<tr>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">'12'</td>
<td style="padding:4px; border:1px solid #C3CDD8">${courseName12}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseCredit12}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseScore12}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${coursePoint12}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseRemark12}</td>
</tr>
<tr>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">'13'</td>
<td style="padding:4px; border:1px solid #C3CDD8">${courseName13}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseCredit13}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseScore13}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${coursePoint13}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseRemark13}</td>
</tr>
<tr>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">'14'</td>
<td style="padding:4px; border:1px solid #C3CDD8">${courseName14}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseCredit14}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseScore14}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${coursePoint14}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseRemark14}</td>
</tr>
<tr>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">'15'</td>
<td style="padding:4px; border:1px solid #C3CDD8">${courseName15}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseCredit15}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseScore15}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${coursePoint15}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseRemark15}</td>
</tr>
<tr>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">'16'</td>
<td style="padding:4px; border:1px solid #C3CDD8">${courseName16}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseCredit16}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseScore16}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${coursePoint16}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseRemark16}</td>
</tr>
<tr>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">'17'</td>
<td style="padding:4px; border:1px solid #C3CDD8">${courseName17}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseCredit17}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseScore17}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${coursePoint17}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseRemark17}</td>
</tr>
<tr>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">'18'</td>
<td style="padding:4px; border:1px solid #C3CDD8">${courseName18}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseCredit18}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseScore18}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${coursePoint18}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseRemark18}</td>
</tr>
<tr>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">'19'</td>
<td style="padding:4px; border:1px solid #C3CDD8">${courseName19}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseCredit19}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseScore19}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${coursePoint19}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseRemark19}</td>
</tr>
<tr>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">'20'</td>
<td style="padding:4px; border:1px solid #C3CDD8">${courseName20}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseCredit20}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseScore20}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${coursePoint20}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseRemark20}</td>
</tr>
</table>
<areaBreak></areaBreak>
<!-- 成绩表:第 2 页(第 21 门 + 汇总) -->
<p style="fontSize:8.5pt; color:#5A6B7C; marginBottom:4px">${studentName}' '${studentNo}' (续表)'</p>
<table style="width:100%; fontSize:8.5pt">
<tr>
<th style="padding:4px; backgroundColor:#1F4E79; color:white; textAlign:center; border:1px solid #1F4E79; width:7%">'序号'</th>
<th style="padding:4px; backgroundColor:#1F4E79; color:white; textAlign:center; border:1px solid #1F4E79; width:45%">'课程名称'</th>
<th style="padding:4px; backgroundColor:#1F4E79; color:white; textAlign:center; border:1px solid #1F4E79; width:10%">'学分'</th>
<th style="padding:4px; backgroundColor:#1F4E79; color:white; textAlign:center; border:1px solid #1F4E79; width:10%">'成绩'</th>
<th style="padding:4px; backgroundColor:#1F4E79; color:white; textAlign:center; border:1px solid #1F4E79; width:13%">'绩点'</th>
<th style="padding:4px; backgroundColor:#1F4E79; color:white; textAlign:center; border:1px solid #1F4E79">'备注'</th>
</tr>
<tr>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">'21'</td>
<td style="padding:4px; border:1px solid #C3CDD8">${courseName21}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseCredit21}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseScore21}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${coursePoint21}</td>
<td style="padding:4px; textAlign:center; border:1px solid #C3CDD8">${courseRemark21}</td>
</tr>
</table>
<table style="width:100%; fontSize:9pt; marginTop:4px">
<tr>
<td style="padding:6px; backgroundColor:#E8EDF2; bold:true; border:1px solid #C3CDD8; width:120px">'总学分'</td>
<td style="padding:6px; border:1px solid #C3CDD8; width:110px">${totalCredit}</td>
<td style="padding:6px; backgroundColor:#E8EDF2; bold:true; border:1px solid #C3CDD8; width:120px">'平均绩点 GPA'</td>
<td style="padding:6px; border:1px solid #C3CDD8; bold:true; color:#B71C1C">${gpa}</td>
</tr>
</table>
<div style="borderLeft:3px solid #2F5597; backgroundColor:#F7F9FC; padding:6px 8px; marginTop:8px">
<p style="fontSize:8pt; color:#5A6B7C">'绩点换算:90 分及以上 4.0;85-89 为 3.7;82-84 为 3.3;78-81 为 3.0;75-77 为 2.7;72-74 为 2.3;68-71 为 2.0;64-67 为 1.5;60-63 为 1.0;60 分以下为 0。'</p>
<p style="fontSize:8pt; color:#5A6B7C">'GPA = Σ(学分 × 绩点) / Σ学分,计算结果四舍五入保留两位小数。'</p>
</div>
<div style="display:flex; justifyContent:space-between; marginTop:16px">
<div style="width:250px">
<p style="fontSize:8.5pt; color:#8a939b">'本成绩单由教务管理系统生成,加盖教务处公章后生效。'</p>
<p style="fontSize:8.5pt; color:#8a939b; marginTop:3px">'打印日期:'${issueDate}</p>
<p style="fontSize:8.5pt; color:#8a939b; marginTop:3px">'校验码:EDU-'${studentNo}'-'${term}</p>
</div>
<div style="width:180px; textAlignment:center">
<image src='D:/test/image/88_seal.png' style="width:96px; height:96px"></image>
<p style="fontSize:9pt; bold:true; color:#1A2733; textAlignment:center">'××大学教务处'</p>
<p style="fontSize:9pt; color:#333333; textAlignment:center">${issueDate}</p>
</div>
</div>
</body>
</pdf>同分组示例
本页 PDF、预览图、模板与源码均由 JQuick-Pdf 真实运行产出,可自由复制到你的项目中使用。