91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中PDF轉圖片出現亂碼如何解決

發布時間:2021-06-30 17:49:48 來源:億速云 閱讀:2233 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關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文件,所以只能使用第二種方案了,下面展示下成功轉換的效果

<!-- PDF轉圖片 --><dependency>   <groupId>org.apache.pdfbox</groupId>   <artifactId>pdfbox</artifactId>   <version>2.0.12</version></dependency><dependency>   <groupId>org.apache.pdfbox</groupId>   <artifactId>fontbox</artifactId>   <version>2.0.12</version></dependency>
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轉圖片出現亂碼如何解決了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

师宗县| 咸宁市| 托里县| 达日县| 嘉善县| 阳江市| 苍南县| 高邑县| 谷城县| 金堂县| 榆社县| 建水县| 鹰潭市| 佛坪县| 宿迁市| 五华县| 安康市| 巩留县| 徐汇区| 新余市| 荆州市| 蒲城县| 三台县| 保山市| 绥宁县| 临泉县| 灵宝市| 余干县| 双辽市| 额敏县| 井研县| 龙江县| 清涧县| 平原县| 尼勒克县| 海南省| 绩溪县| 洛扎县| 方城县| 剑川县| 五家渠市|