用pdfbox进行pdf转图片中文乱码,缺失字体

您所在的位置:网站首页 夸克pdf转换找不到图片 用pdfbox进行pdf转图片中文乱码,缺失字体

用pdfbox进行pdf转图片中文乱码,缺失字体

2023-09-08 20:14| 来源: 网络整理| 查看: 265

PDDocument pdDocument = PDDocument.load(inputStreamByUrl); PDFRenderer pdfRenderer = new PDFRenderer(pdDocument); BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(i, 144F, ImageType.RGB);

使用pdfbox读取pdf转图片的时候,如果缺失字体,中文会乱码。

运行在Windows的提示

2020-03-20 19:14:53.598 [Thread-13] WARN o.a.pdfbox.pdmodel.font.FileSystemFontProvider - New fonts found, font cache will be re-built 2020-03-20 19:14:53.598 [Thread-13] WARN o.a.pdfbox.pdmodel.font.FileSystemFontProvider - Building on-disk font cache, this may take a while 2020-03-20 19:14:53.704 [Thread-13] WARN o.a.pdfbox.pdmodel.font.FileSystemFontProvider - Finished building on-disk font cache, found 447 fonts 2020-03-20 19:14:53.711 [Thread-13] WARN org.apache.pdfbox.pdmodel.font.PDCIDFontType0 - Using fallback DengXian for CID-keyed font AdobeKaitiStd-Regular 2020-03-20 19:14:53.829 [Thread-13] WARN org.apache.pdfbox.pdmodel.font.PDCIDFontType0 - Using fallback DengXian for CID-keyed font AdobeKaitiStd-Regular 2020-03-20 19:14:53.860 [Thread-13] WARN org.apache.pdfbox.pdmodel.font.PDCIDFontType0 - Using fallback MalgunGothic-Semilight for CID-keyed font STSong-Light 2020-03-20 19:14:53.916 [Thread-13] WARN org.apache.pdfbox.rendering.CIDType0Glyph2D - No glyph for 21271 (CID 041a) in font STSong-Light 2020-03-20 19:14:53.918 [Thread-13] WARN org.apache.pdfbox.rendering.CIDType0Glyph2D - No glyph for 20140 (CID 08d8) in font STSong-Light 2020-03-20 19:14:53.660 [Thread-13] ERROR o.a.pdfbox.pdmodel.font.FileSystemFontProvider - Could not load font file: C:\WINDOWS\FONTS\mstmc.ttf java.io.EOFException: null at org.apache.fontbox.ttf.TTFDataStream.readUnsignedInt(TTFDataStream.java:152) at org.apache.fontbox.ttf.TTFParser.readTableDirectory(TTFParser.java:309) at org.apache.fontbox.ttf.TTFParser.parse(TTFParser.java:139) at org.apache.fontbox.ttf.TTFParser.parse(TTFParser.java:87)

运行在Linux的提示

2020-03-25 14:17:28.686 WARN 1 --- [ Thread-3] o.a.pdfbox.pdmodel.font.PDCIDFontType0 : Using fallback LiberationSans for CID-keyed font AdobeKaitiStd-Regular 2020-03-25 14:17:28.766 WARN 1 --- [ Thread-3] o.a.pdfbox.rendering.CIDType0Glyph2D : No glyph for 1050 (CID 041a) in font AdobeKaitiStd-Regular 2020-03-25 14:17:28.767 WARN 1 --- [ Thread-3] o.a.pdfbox.rendering.CIDType0Glyph2D : No glyph for 2264 (CID 08d8) in font AdobeKaitiStd-Regular

Using fallback LiberationSans for CID-keyed font AdobeKaitiStd-Regular

Using fallback LiberationSans for CID-keyed font STSong-Light

这个提示是说当前环境缺少CID-keyed font AdobeKaitiStd-Regular字体和CID-keyed font STSong-Light字体,pdfbox使用使用LiberationSans字体进行替换。

这两个字体可以用AdobeKaitiStd-Regular.otf和SimSun.ttf两个字体文件。

找字体文件可以在自己的电脑上找,可以在这个C:\Windows\Fonts找到,或者用everything工具查找,没有的话可以在网上找

有些字体实在找不到,也可以修改pdfbox的源码,修改字体的替换规则,

替换的规则在org.apache.pdfbox.pdmodel.font.FontMapperImpl可以查看到

可以看到这个集合里,如果key的字体缺失,就会依次找value指定的字体进行替换。

pdf文件用到了哪些字体,可以用福昕之类的pdf编辑工具查看

可以看到项目提示信息指的字体,所使用的实际字体是什么名字,查找这个字体就可以。

至于报错的那个缺少字体mstmc.ttf,这个字体找了很久没找到,不过也无所谓了,反正项目最后是布在Linux上的。

找到字体之后将字体安装在服务器环境就可以。

要进到这个路径

/usr/share/fonts/

然后新建一个文件夹,把字体文件放到新建的文件夹里

然后执行下面三条命令

mkfontscale

mkfontdir

fc-cache -fv

执行完之后字体就安装成功了,可以使用fc-list命令查看已安装的字体。

如果是使用docker的话,记得要把刚刚新建的字体文件夹挂载到docker容器里,不然不会生效。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3