itext生成PDF文件报错“Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized.”

简介: 最近需要写一个抽取表结构的工具,类似于powerdesigner中的表图,其中有一步用到了itext这个第三方jar包来生成pdf文件,碰到了一个问题,记录于此。

最近需要写一个抽取表结构的工具,类似于powerdesigner中的表图,其中有一步用到了itext这个第三方jar包来生成pdf文件,碰到了一个问题,记录于此。

 

问题描述:

工程使用maven构建,pom.xml中对于jar包的定义如下:

<dependency>
   <groupId>com.lowagie</groupId>
   <artifactId>itext</artifactId>
   <version>2.1.7</version>
  </dependency>
  <dependency>
   <groupId>com.itextpdf</groupId>
   <artifactId>itext-asian</artifactId>
   <version>5.2.0</version>
  </dependency>

执行BaseFont bfChinesebfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);时报错:

"Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized."

 

解决

1. 首先尝试替换itext的包版本,他在maven中央库的位置是/maven2/com/lowagie/itext/,最高版本是4.2.2,但尝试后发现问题依旧。

2. 注意到itext-asian的包路径是com.itextpdf,于是继续找,发现/maven2/com/itextpdf/itextpdf中有itextpdf的各个版本,从5.0.6到5.5.6。

3. 搜索一些帖子,发现itext从5.x版本开始,改名为itextpdf,符合上面(1)和(2)对应的版本号。

4. 问题可以确定了,就是上面itext-asian和itext的版本不对应,改为:

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

再次运行,ok了。

有些文章提到了itextasian包名未更新也会导致这个问题,但我用的5.2.0这个包,解压后看到包名是正确的,也许新版本已经改了,这点不深究了。

摘要:

找到CJKFont类, 从中看到 
   InputStream is = getResourceStream(RESOURCE_PATH + "cjkfonts.properties"); 
   cjkFonts.load(is); 
   is.close(); 
   is = getResourceStream(RESOURCE_PATH + "cjkencodings.properties"); 
   cjkEncodings.load(is); 
   is.close(); 
他的font和encoding文件都是从String RESOURCE_PATH = "com/itextpdf/text/pdf/fonts/"; 这里加载的,而老itextasian.jar的包名是com.lowagie.text.pdf.fonts, 应该是包名重新命名了, 而没有及时更新itextasian.jar, 改了一下itextasian.jar包路径, 重新运行程序, OK,搞定. 

×××××××××××××××××××××××××××××××××××××××××××

更改iTextAsian.jar包名的方法如下
1)使用winrar解压缩程序将原来的iTextAsian.jar解压,目录结构如下
  iTextAsian
      --com
         --lowagie
           --text
             --pdf
               --fonts
                 --...(字体属性文件)
2)将加压后com目录下的包名lowagie更改为itextpdf
3)在命令行转至iTextAsian目录,重新打包为iTextAsian.jar文件
  命令如下:
  jar cvf iTextAsian.jar com/itextpdf/text/pdf/fonts/*
  执行后,将新的iTextAsian.jar加入到classpath路径

 

参考:

http://endual.iteye.com/blog/1623327

http://blog.csdn.net/wang12/article/details/5661106

http://bbs.csdn.net/topics/390283201

目录
相关文章
|
12天前
|
Java Apache Maven
将word文档转换成pdf文件方法
在Java中,将Word文档转换为PDF文件可采用多种方法:1) 使用Apache POI和iText库,适合处理基本转换需求;2) Aspose.Words for Java,提供更高级的功能和性能;3) 利用LibreOffice命令行工具,适用于需要开源解决方案的场景。每种方法都有其适用范围,可根据具体需求选择。
|
13天前
|
Java Apache Maven
Java将word文档转换成pdf文件的方法?
【10月更文挑战第13天】Java将word文档转换成pdf文件的方法?
34 1
|
23天前
|
索引 Python
PDF文件页面提取操作小指南
PDF文件页面提取操作小指南
45 4
|
23天前
|
Python
Python对PDF文件页面的旋转和切割
Python对PDF文件页面的旋转和切割
35 3
|
22天前
|
计算机视觉 Python
Python操作PDF文件
Python操作PDF文件
25 1
|
24天前
|
人工智能 计算机视觉 Python
ChatGPT编程省钱、方便小示例——实现PDF转成PNG文件
ChatGPT编程省钱、方便小示例——实现PDF转成PNG文件
28 1
|
14天前
|
JavaScript 前端开发 容器
Vue生成PDF文件攻略:html2canvas与jspdf联手,中文乱码与自动换行难题攻克
Vue生成PDF文件攻略:html2canvas与jspdf联手,中文乱码与自动换行难题攻克
23 0
|
3月前
|
XML 缓存 JSON
为什么浏览器中有些图片、PDF等文件点击后有些是预览,有些是下载
为什么浏览器中有些图片、PDF等文件点击后有些是预览,有些是下载
232 0
|
25天前
|
JSON 数据格式
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
48 2
|
26天前
|
存储 安全 网络安全
Python编程--使用PyPDF解析PDF文件中的元数据
Python编程--使用PyPDF解析PDF文件中的元数据
25 1