JAVA:实现Excel和PDF上下标

news/2024/7/21 4:55:50 标签: java, excel, pdf

1、简介

最近项目需要实现26个小写字母的上下标功能,自己去网上找了所有Unicode的上下标形式,缺少一些关键字母,顾后面考虑自己创建上下标字体样式,以此来记录。

2、Excel

Excel本身是支持上下标,我们可以通过Excel单元格的样式来设置当前字体上下标,因使用的是POI的maven包,这边就以POI的样例实现。

首先pom.xml引用:

<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>3.9</version>
</dependency>
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>3.9</version>
</dependency>

实现上下标代码:

XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Sheet1");
XSSFRow row = sheet.createRow(0);
XSSFCell cell = row.createCell(0);

XSSFFont font = workbook.createFont();
font.setTypeOffset(XSSFFont.SS_SUB); // 上标
font.setTypeOffset(XSSFFont.SS_SUPER);//下标

XSSFRichTextString richTextString = new XSSFRichTextString("Hcu");
richTextString.applyFont(1, 2, font); // 设置第二个字符为上标 "c"
richTextString.applyFont(2, 3, font); // 设置第三个字符为下标 "u"

cell.setCellValue(richTextString);
Path tempFile =  Paths.get("E:\\dist\\pdf0.xlsx");

try(OutputStream os = Files.newOutputStream(tempFile)){
   
	workbook.write(os);
	logger.error("xssfWorkbook-end:" + tempFile.toAbsolutePath());
}

3、造字

因某些字母没有对应的上下标字形,所以通过FontCreate软件来造上下标,至于软件可以去网上下载破解版,还有就是Unicode指定的数量就那么多,所以我们可以通过改变已有Unicode编码字符来作为我们上下标的编码。

可以通过找到当前分支少的Unicode字符做插入:比如选中西里尔字母这个分类点击 插入->字符:
在这里插入图片描述
然后我们对已有的字符做修改和做删除自己造:
在这里插入图片描述
最后形成我们自己所需要的字符:
在这里插入图片描述

4、PDF

生成的PDF,采用开源的是开放源码的站点sourceforge一个项目itextpdf,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。因项目通过Excel来转PDF,但是因itextpdf无法识别Excel上下标,并且缺少了关键上下标。

首先pom.xml引用:

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.10</version>
</dependency>

输出中文,还要引入下面itext-asian.jar包:


http://www.niftyadmin.cn/n/5047544.html

相关文章

单目3D目标检测——SMOKE 环境搭建|模型训练

本文分享SMOKE最新的版本的环境搭建&#xff0c;以及模型训练&#xff1b;环境关键库版本&#xff1a;pytorch 1.12.0、CUDA 11.3、cudnn 8.3.2、python 3.7、DCNv2。 目录 1、docker 获取Nvidia 镜像 2、安装Conda 3、创建SMOKE环境 4、编译SMOKE环境 5、下载kitti 3D目标…

python读取图片

要在Python中读取图片&#xff0c;你可以使用第三方库Pillow&#xff08;Python Imaging Library&#xff0c;PIL&#xff09;或OpenCV。以下是使用这两个库的示例&#xff1a; 使用Pillow库读取图片&#xff1a; 首先&#xff0c;确保你已经安装了Pillow库。如果还没有安装&am…

ElementUI实现登录注册+axios全局配置+CORS跨域

一、搭建项目 1.1 安装 Element-UI 先确保是否安装了vue-cli脚手架工具 !!! 安装vue脚手架可以看看我的上一篇博客 构建好项目后通过npm安装element-ui cd 项目根路径 #进入新建项目的根目录 npm install element-ui -S #安装…

5、质量保证实践

1、风行内容仓的增效之路 - 前言 2、从“键鼠套装”到“全键盘游戏化”审核 3、从“人等机器”到“人机和谐” 4、绩效管理实践 早期内容仓的质量控制主要依靠主管抽查&#xff0c;因为主管还有很多其他的工作&#xff0c;而且个人精力有限&#xff0c;无法保证抽查频率和覆…

Golang结构体按某一成员变量排序

结构体排序使用sort包中的sort.SliceStable() 函数。该函数需要传入一个结构体数组参数和一个匿名函数&#xff08;排序方式&#xff09; e.g. type inte struct {l, r int } //调用排序函数&#xff0c;按inte中l从小到大的方式排序 sort.SliceStable(intes, func(i, j int) …

在北京多有钱能称为富

背景 首先声明&#xff0c;此讨论仅限个人的观点&#xff0c;因为我本身不富嘛&#xff0c;所以想法应该非常局限。 举个栗子 富二代问我朋友&#xff0c;100~1000w之间&#xff0c;推荐一款车&#xff1f; 一开始听到这个问题的时候&#xff0c;有被唬住&#xff0c;觉得预…

Golang 结构化日志包 log/slog 详解(四):分组、上下文和属性值类型

上一篇文章讲解了 log/slog 包中的自定义日志属性字段和日志级别&#xff0c;本文讲解下分组、上下文和属性值类型 分组输出 slog 支持将字段放在组中并且可以给分组指定名称。如何展示分组的内容&#xff0c;取决于使用的 handler&#xff0c;例如 TextHandler 使用点号分隔…

为什么小说写到结婚就完结了?原因让人心酸!

为什么很多小说往往在主角结婚后就匆忙结束&#xff0c;令人感到意犹未尽&#xff1f; 其实&#xff0c;这并非巧合。结婚对于小说来说是一个重要的转折点&#xff0c;因为它标志着一个人物从单身生活迈向家庭生活&#xff0c;从相对简单的个体在变小为说复中杂&#xff0c;的结…