使用pdfBox实现pdf转图片,解决中文方块乱码等问题

一、引入依赖

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>fontbox</artifactId>
    <version>2.0.13</version>
</dependency>
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.13</version>
</dependency>

二、PDF转PNG代码

String pdfBase64 = "XXXXX";
PDDocument pdDocument = PDDocument.load(Base64Utils.decodeFromString(pdfBase64));
PDFRenderer renderer = new PDFRenderer(pdDocument);
BufferedImage bufferedImage = renderer.renderImage(0);
ImageIO.write(bufferedImage, "png", new File("xxx.png"));

三、PNG中文方块乱码

  查看linux服务器上的字体库如下。

  

  转换后的PNG如下。

  

  日志中打印出类似这样的日志(例:Using fallback XXX for CID-keyed font STSong-Light),就说明系统没有安装STSong-Light字体,pdfbox使用XXX字体来替代了。如果出现方块,就说明没有这种字体,并且替代字体也没有,日志也有相应的其他提示。

四、linux添加字体库

  可以选择STSong-Light字体,而我这里选择simsun.ttf字体。

#cd /usr/share/fonts/   // 进入系统自带的字体目录
#mkdir myfonts  // myfonts 是你自己随便取得文件夹名字,一定要有这一步
#将字体文件拷贝到这个文件夹下,在cd /usr/share/fonts/目录下执行以下命令
#mkfontscale
#mkfontdir
#fc-cache -fv           //更新字体缓存
#fc-list    // 查看系统中所有得字体,可用于测试是否安装字体成功

如果 /usr/share/fonts/ 目录当前用户没有权限,可以在 ~/.fonts/ 目录下新增字体库,操作步骤和上面一样。注意:一定要创建字体对应的文件夹,如果字体直接放在fonts目录,不会生效。

  新增字体之后,可以看到字体库列表中有如下 宋体 的字样了。

  

  最终转换后正常的PNG如下。

  

原文地址:https://www.cnblogs.com/hujunzheng/p/10508044.html

时间: 2024-11-05 20:30:34

使用pdfBox实现pdf转图片,解决中文方块乱码等问题的相关文章

PHP文件上传并解决中文文件名乱码问题

PHP文件上传并解决中文文件名乱码问题 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 if(isset($_FILES['file'])){ ? ????$upload='upload/'.$_FILES['file']['name']; ????? ????? ????if(is_uploaded_file($_FILES['file']['tmp_name'])){ ????????//iconv函数解决上传文件中文名乱码的问题,但是不提倡文

Struts2 .apk 文件下载及解决中文文件名乱码问题(转)

1.Tomcat服务器不能下载 .apk类型文件 Android的APK安装包不能下载或下载文件是以 .zip为后缀名而不是 .apk为文件后缀名时,需在 Tomcat 的 web.xml 配置文件中加入以下 MIME 类型: 1 <mime-mapping> 2 <extension>apk</extension> 3 <mime-type>application/vnd.android.package-archive</mime-type>

Arcgis for Android解决中文字体乱码的问题

首先,在此感谢Arcgis for Android群里的一位成员,大家可以加进来QQ群号:337469080. 不论是Arcgis for Android的哪个版本,都没无法解决中文乱码的问题,这个与Android中自带的字体库有关,可以参考http://mobile.51cto.com/android-265238.htm这篇文章. 所以,要在Arcgis for Android中显示中文,需要对字体进行设置,如下: TextSymbol ts = new TextSymbol(25, add

BeautifulSoup解决中文网页乱码

以下代码,在执行结果中的中文出现乱码. from bs4 import BeautifulSoup import urllib2 request = urllib2.Request('http://www.163.com') response = urllib2.urlopen(request) html_doc = response.read() soup = BeautifulSoup(html_doc) print soup.find_all('a') 因为中文页面编码是gb2312,gb

将中文库导入到ARM板子中以解决中文显示乱码的教程

1.将中文字符集导入到ARM板子中的/usr/fonts/目录下 在这里我们使用的字符集为:DroidSansFallback.ttf 下载地址为:https://pan.baidu.com/s/1ARn2Y6Vh6MsRhjHP18yMwQ 中文字符集具体的导入过程如下: (1)将字符集DroidSansFallback.ttf拷贝到SD卡中. (2)在板子的/usr目录下新建文件夹fonts,同时提高文件夹的权限. 命令如下: mkdir fonts chmod 777 fonts 命令 (

Debian 9.5 解决中文显示乱码

一.首先检查LOCALE情况 说明:DEBIAN因为基于GNU所以,对不同地域进行了不同的包支持,以LOCALE形式存在. 1.启动终端 #apt-get install locales 2.重新配置LOCALE #dpkg-reconfigure locales 在界面中我勾选的是“en_US.UTF-8”和“zh_CN.UTF-8”.然后选择zh_CN.UTF-8为默认的LOCALE,则系统为中文界面(这里也可以选en_US.UTF-8,使系统为英文界面). 3.运行LOCALE命令检查当前

Qt做发布版,解决声音和图片、中文字体乱码问题(需要在main里写上QApplication::addLibraryPath(&quot;./plugins&quot;)才能加载图片,有图片,很清楚)

前些天做Qt发布版,发现居然不显示图片,后来才发现原来还有图片的库没加!找找吧,去qt的安装包,我装在了F盘,在F盘F:/QT/qt/plugins,找到了plugins,这里面有个 imageformats是图片的库,里面有jpg,gif等,你用到那种格式就加那种!加的时候一点过要注意,将imageformats这个文件夹考到你的程序当前文件夹内!并在主函数里加:QApplication::addLibraryPath("./plugins"); 这样你的带图片的发布版就做好了! 看

在Java代码中使用pdfBox将PDF转换为图片

生成图片 // 生成图片 PDDocument pd = PDDocument.load(new File(filePath)); PDFRenderer pdfRenderer = new PDFRenderer(pd); BufferedImage combined = null; for (int page = 0; page < pd.getNumberOfPages(); ++page) { BufferedImage bim = pdfRenderer.renderImageWith

MySQL数据库:完美解决中文数据乱码

首先声明:这是解决我的问题的方法,个人笔记,仅供参考. 环境:win server 2003 + MySQL5.0 + Navicat 10 问题现象:通过Java WEB 页面提交数据到MySQL数据,发生中文乱码,每个汉字显示为?号,例如:"标题1"显示为"??1". 解决方法:找到MySQL5.0安装目录下编辑打开my.ini文件,修改为: [client] port=3306 [mysql] default-character-set=utf8 # The