• 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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    实现上下标代码:

    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());
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    • 相关阅读:
      数据计算-第15届蓝桥杯第一次STEMA测评Scratch真题精选
      Node简介
      Vite 启动默认只能访问localhost解决方法
      图 - 06 关键路径
      海外代理IP哪个可靠?如何测试代理的稳定性?
      vue的use和extend的理解
      UniPro荣获鲲鹏应用创新大赛三等奖 国产信创产品“携手”共赢
      【漏洞复现】Progress Flowmon 命令注入漏洞CVE-2024-2389
      基于PHP+html的学生课外活动成果统计系统
      C++对象模型(15)-- 构造函数语义学:移动构造函数和移动赋值运算符
    • 原文地址:https://blog.csdn.net/lishangke/article/details/132889592