• 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包:

    • 相关阅读:
      JAVA设计模式-责任链模式
      编写汽车零部件开发问题分析报告培训与报告内容检查单
      LeetCode 704. 二分查找
      25张炫酷交互图表,一文入门Plotly
      浅析RSA非对称加密算法
      老卫带你学---leetcode刷题(43. 字符串相乘)
      【torchvision.datasets.ImageFolder类的使用】
      HTML+CSS简单的网页制作期末作业 关于我的家乡——四川文化网页介绍 DW大学生网页作业制作设计 Dreamweaver简单网页成品
      postman设置接口关联这样做,薪资直接涨3k
      一份 15w 字 Java 核心面试笔记!
    • 原文地址:https://blog.csdn.net/lishangke/article/details/132889592