這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)Java中PDF轉(zhuǎn)圖片出現(xiàn)亂碼如何解決,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),高縣企業(yè)網(wǎng)站建設(shè),高縣品牌網(wǎng)站建設(shè),網(wǎng)站定制,高縣網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,高縣網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
第一種就是在服務(wù)器字體庫添加STSong-Light添字體(理論,因?yàn)闆]找到STSong-Light.ttf文件)
下載好STSong-Light.ttf文件之后把他復(fù)制到系統(tǒng)的字體庫
windows字體庫路徑:C:\Windows\Fonts,直接把文件復(fù)制到該目錄下就能自動(dòng)安裝該字體
linux字體庫路徑: /usr/share/fonts ,把文件復(fù)制過來之后需要該目錄下執(zhí)行以下命令,字體文件可以在Windows的字體庫上找
#將字體文件拷貝到這個(gè)文件夾下,在cd /usr/share/fonts/目錄下執(zhí)行以下命令 #mkfontscale #mkfontdir #fc-cache -fv //刷新字體緩存 #fc-list // 查看系統(tǒng)中所有的字體,可用于查看是否安裝字體成功
系統(tǒng)擁有這種字體后就不會(huì)亂碼了。
第二種就是創(chuàng)建PDF文件的時(shí)候使用系統(tǒng)已有的字體
這是使用默認(rèn)字體創(chuàng)建的Font對象,這種字體創(chuàng)建的PDF轉(zhuǎn)的圖片會(huì)亂碼
public static Font getFont(float size) throws Exception {// 使用默認(rèn)字體生成PDF BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", false); Font font = new Font(baseFont, size, 0); return font;}
由這個(gè)Font對象所用的字體 STSong-Light 系統(tǒng)里面沒有造成亂碼,并且STSong-Light的坑太多(例如沒有STSong-Light.ttf文件),所以我們換一種字體
下面的方案有2點(diǎn)需要注意
1.路徑后面必須加上“,0”,否在路徑會(huì)報(bào)錯(cuò)
2.linux包上面如果不存在指定的字體文件,需要從windows復(fù)制到linux的字體庫上,流程和第一種方案的linux復(fù)制字體流程一致
public static Font getFont(float size) throws Exception {//獲取系統(tǒng)字體的路徑 String fontPath = ""; String os = System.getProperties().getProperty("os.name");//獲取系統(tǒng)類型 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("獲取到的系統(tǒng)的字體路徑為:" + fontPath); BaseFont b = null; try { b = BaseFont.createFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); logger.info("使用系統(tǒng)的宋體字體生成pdf!"); } catch (Exception e) { e.printStackTrace(); //如果發(fā)生異常執(zhí)行默認(rèn)的字體 b = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); logger.info("沒有獲取系統(tǒng)的simsun字體,使用pdf默認(rèn)體字生成pdf!"); }return new Font(b, size, Font.NORMAL, BaseColor.BLACK);}
理論上上面2種方案都可以解決我這個(gè)場景下的問題,但是沒找到STSong-Light.ttf文件,所以只能使用第二種方案了,下面展示下成功轉(zhuǎn)換的效果
<!-- PDF轉(zhuǎn)圖片 --><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 {//設(shè)置存儲(chǔ)路徑 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,第二個(gè)參數(shù)是設(shè)置縮放比(即像素) BufferedImage image = renderer.renderImage(i, 1f); //第二個(gè)參數(shù)越大生成圖片分辨率越高,轉(zhuǎn)換時(shí)間也就越長 //文件路徑 File img = new File("圖片輸入路徑"); // 如果不包含文件夾則創(chuàng)建 if(!img.getParentFile().exists()) img.getParentFile().mkdirs(); ImageIO.write(image, "JPG", img); } } catch (IOException e) { e.printStackTrace(); } }
上述就是小編為大家分享的Java中PDF轉(zhuǎn)圖片出現(xiàn)亂碼如何解決了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站標(biāo)題:Java中PDF轉(zhuǎn)圖片出現(xiàn)亂碼如何解決
分享網(wǎng)址:http://aaarwkj.com/article16/igijgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、企業(yè)建站、微信公眾號、網(wǎng)站內(nèi)鏈、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)