网站建设资讯

NEWS

网站建设资讯

Java中PDF转图片出现乱码如何解决

这期内容当中小编将会给大家带来有关Java中PDF转图片出现乱码如何解决,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

创新互联公司是一家集网站建设,高县企业网站建设,高县品牌网站建设,网站定制,高县网站建设报价,网络营销,网络优化,高县网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

第一种就是在服务器字体库添加STSong-Light添字体(理论,因为没找到STSong-Light.ttf文件)

   下载好STSong-Light.ttf文件之后把他复制到系统的字体库

    windows字体库路径:C:\Windows\Fonts,直接把文件复制到该目录下就能自动安装该字体

    linux字体库路径: /usr/share/fonts ,把文件复制过来之后需要该目录下执行以下命令,字体文件可以在Windows的字体库上找

        #将字体文件拷贝到这个文件夹下,在cd /usr/share/fonts/目录下执行以下命令        #mkfontscale   
        #mkfontdir
        #fc-cache -fv           //刷新字体缓存        #fc-list    // 查看系统中所有的字体,可用于查看是否安装字体成功

系统拥有这种字体后就不会乱码了。

第二种就是创建PDF文件的时候使用系统已有的字体

这是使用默认字体创建的Font对象,这种字体创建的PDF转的图片会乱码

public static Font getFont(float size) throws Exception {// 使用默认字体生成PDF    BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", false);    Font font = new Font(baseFont, size, 0);    return font;}

由这个Font对象所用的字体 STSong-Light 系统里面没有造成乱码,并且STSong-Light的坑太多(例如没有STSong-Light.ttf文件),所以我们换一种字体

下面的方案有2点需要注意

1.路径后面必须加上“,0”,否在路径会报错
2.linux包上面如果不存在指定的字体文件,需要从windows复制到linux的字体库上,流程和第一种方案的linux复制字体流程一致

public static Font getFont(float size) throws Exception {//获取系统字体的路径    String fontPath = "";    String os = System.getProperties().getProperty("os.name");//获取系统类型    if (os.startsWith("win") || os.startsWith("Win")) { //win下获取字体的路径, fontPath = "C:" + File.separator + "Windows" + File.separator + "Fonts" + File.separator + "simsun.ttc,0";    } else {   // linux下获取字体的路径,linux如果没有该fontPath = File.separator + "usr" + File.separator + "share" + File.separator + "fonts" + File.separator + "simsun.ttc,0";    }logger.info("获取到的系统的字体路径为:" + fontPath);    BaseFont b = null;    try {
        b = BaseFont.createFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);        logger.info("使用系统的宋体字体生成pdf!");    } catch (Exception e) {
        e.printStackTrace();        //如果发生异常执行默认的字体        b = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);        logger.info("没有获取系统的simsun字体,使用pdf默认体字生成pdf!");    }return new Font(b, size, Font.NORMAL, BaseColor.BLACK);}

理论上上面2种方案都可以解决我这个场景下的问题,但是没找到STSong-Light.ttf文件,所以只能使用第二种方案了,下面展示下成功转换的效果

   org.apache.pdfbox   pdfbox   2.0.12   org.apache.pdfbox   fontbox   2.0.12
public static void createQrCodeImage(){
    File pdfFile = new File("PDF文件路径");    try {//设置存储路径        String fileAdd = DateUtils.getDateFormatToString(new Date(), "yyyyMMdd");        //读取pdf文件        PDDocument doc = PDDocument.load(pdfFile);        PDFRenderer renderer = new PDFRenderer(doc);        int pageCount = doc.getNumberOfPages();        for (int i = 0; i < pageCount; i++) {// 方式2,第二个参数是设置缩放比(即像素)            BufferedImage image = renderer.renderImage(i, 1f);  //第二个参数越大生成图片分辨率越高,转换时间也就越长            //文件路径            File img = new File("图片输入路径");            // 如果不包含文件夹则创建            if(!img.getParentFile().exists()) img.getParentFile().mkdirs();            ImageIO.write(image, "JPG", img);        }
    } catch (IOException e) {
        e.printStackTrace();    }
}

上述就是小编为大家分享的Java中PDF转图片出现乱码如何解决了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。


文章名称:Java中PDF转图片出现乱码如何解决
链接地址:http://cdweb.net/article/igijgg.html