首页 > 其他分享 >itext生成PDF文件报错“Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized.”

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

时间:2023-06-19 13:02:55浏览次数:43  
标签:包名 UCS2 STSong jar itextpdf itext 报错 iTextAsian com


最近需要写一个抽取表结构的工具,类似于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


标签:包名,UCS2,STSong,jar,itextpdf,itext,报错,iTextAsian,com
From: https://blog.51cto.com/u_13950417/6512494

相关文章

  • Tuxedo服务无法启动的问题解决(涉及MP下tlisten和TLOG的报错)
    今天同事说有一个Tuxedo应用在做测试,但重启了机器和Tuxedo环境后,服务仍无法启动,这次的问题排查和处理比较典型,值得梳理一次。应用环境:OS:SunOS5.9Tuxedo:9.1,MP双机环境问题现象:由于服务不可用,之前有同事使用kill干掉了一些Tuxedo进程,但无法确定具体范围。重启了服务器和Tuxedo......
  • 数据面节点kubelet一直报错找不到静态Pod路径
    问题现象问题分析pkg/kubelet/config/file_linux.gostartWatch方法pkg/kubelet/kubelet.gomakePodSourceConfig函数cmd/kubelet/app/options/options.goAddKubeletConfigFlags函数kubelet启动参数中--pod-manifest-path已是""说明有别的地方设置了默认值为/etc/kuberne......
  • 2023-06-19 uniapp云打包报错:app-plus.distribute.icons.android.hdpi 文件不存在
    详细报错:[HBuilder]11:02:51.408Manifest.json文件以下节点配置错误,请检查修复[HBuilder]11:02:51.408app-plus.distribute.icons.android.hdpi 文件不存在[HBuilder]11:02:51.408app-plus.distribute.icons.android.xxhdpi 文件不存在[HBuilder]11:02:51.408ap......
  • Jenkins windows节点拉取代码报错: Host key verification failed
    说明:新增一个windows节点之后,在该节点上拉取gitlab上的代码发现报错,代码无法正常拉取下来。解决办法:需要在节点上将公钥发送给gitlab服务器。因为是windwos的节点,所以下面所有的操作都是在git-bash中进行的。1、生成公钥ssh-keygen-trsa2、发送给gitlab主机ssh-copy-i......
  • Kali Linux 下搭建ctfd靶场(报错解决)
    准备环境:获取一台运行Linux的服务器或虚拟机,确保具备足够的计算资源和网络连接。安装所需的软件和依赖项,如Python、pip等。安装CTFd:打开终端并使用以下命令克隆CTFd的GitHub存储库gitclonehttps://github.com/CTFd/CTFd.git进入克隆的CTFd目录:cdCTFd......
  • git报错 failed: The TLS connection was non-properly terminated.
    问题现象:kali@kali:~$gitclonehttps://www.github.com/FluxionNetwork/fluxion.gitCloninginto'fluxion'...fatal:unabletoaccess'https://www.github.com/FluxionNetwork/fluxion.git/':gnutls_handshake()failed:TheTLSconnectionwasnon......
  • 安装openvas时候的报错 bash: openvas-setup: command not found
     由于kali官方默认没有安装openvas,但是kali源中有,需要我们使用apt命令手动安装。 错误一kali@kali:~$openvas-setupbash:openvas-setup:commandnotfound错误原因openvas官方在新版本中改名gvm解决方法 因此openvas命令改为gvm。 错误二kali@kali:~$sudogvm-setupER......
  • Azure Blob Storage Java SDK使用SAS Token授权读取文件403报错
    问题描述代码如下,内容十分简单,只是listpath的操作。点击查看代码DataLakeServiceClientdataLakeServiceClient=newDataLakeServiceClientBuilder().endpoint(blob).sasToken(sasToken).buildClient();DataLakeFileSystemClienttestFs=dataLakeServic......
  • OPCDA注册后 winform运行却报错
    此错误原因为未注册dll但是我已经注册了之所以会出现这个问题是因为平台不兼容将目标平台改成x86即可 ......
  • 执行存储过程报错:User does not have access to metadata required to determine stor
    在执行存储过程中,报错详细信息如下:java.sql.SQLException:Userdoesnothaveaccesstometadatarequiredtodeterminestoredprocedureparametertypes.Ifrightscannotbegranted,configureconnectionwith"noAccessToProcedureBodies=true"tohavedrivergener......