Java中Word與PDF轉(zhuǎn)換為圖片的方法詳解
Word、PDF轉(zhuǎn)換為圖片Java
需求要在小程序端展示文檔內(nèi)容,所以將文檔每頁(yè)轉(zhuǎn)換為圖片后顯示
參考和其他等方案:
Java實(shí)現(xiàn)PDF轉(zhuǎn)圖片的三種方法
Java實(shí)現(xiàn)word文檔轉(zhuǎn)成圖片的示例詳解
Word轉(zhuǎn)換為圖片
<!-- word轉(zhuǎn)圖工具 --> <dependency> <groupId>com.deepoove</groupId> <artifactId>poi-tl</artifactId> <version>1.8.0</version> </dependency> <dependency> <groupId>com.luhuiguo</groupId> <artifactId>aspose-words</artifactId> <version>23.1</version> </dependency>
import com.aspose.words.Document; import com.aspose.words.SaveFormat; import lombok.extern.slf4j.Slf4j; import java.io.File; import java.nio.file.Files; import java.util.ArrayList; import java.util.List; @Slf4j public class WordToImageUtil { public static void main(String[] args) { wordToImage("C:\\Users\\Administrator\\Documents\\錄入腳本\\324\\", "xxxx.doc"); } public static List<String> wordToImage(String filePath, String fileName) { log.info("開始word轉(zhuǎn)換為圖片"); List<String> resultList = new ArrayList<String>(); // 獲取文件路徑分隔符 String separator = File.separator; try { // 填充數(shù)據(jù)完畢的test.docx,在轉(zhuǎn)換成圖片 File file1 = new File(filePath + separator + fileName); // 使用系統(tǒng)的路徑分隔符 // 打開生成的 Word 文件 Document doc = new Document(Files.newInputStream(file1.toPath())); // 逐頁(yè)將 Word 文件保存為圖片(PNG格式) for (int i = 0; i < doc.getPageCount(); i++) { Document extractedPage = doc.extractPages(i, 1); // 拼接上文件名 String path = filePath + separator + "tmpImg" + separator + removeFileExtension(fileName) + separator + "img" + System.currentTimeMillis() + "_" + i + ".png"; // 使用系統(tǒng)的路徑分隔符 // 創(chuàng)建目錄(如果不存在的話) File tmpDir = new File(filePath + separator + "tmpImg" + separator + removeFileExtension(fileName)); if (!tmpDir.exists()) { tmpDir.mkdirs(); // 創(chuàng)建目錄 } // 將 Word 文件保存為圖片PNG格式 extractedPage.save(path, SaveFormat.PNG); resultList.add(path); } } catch (Exception e) { e.printStackTrace(); return new ArrayList<>(); } log.info("結(jié)束word轉(zhuǎn)換為圖片"); return resultList; } /** * 去掉后綴名 * @param fileName * @return */ public static String removeFileExtension(String fileName) { int dotIndex = fileName.lastIndexOf("."); if (dotIndex == -1) { return fileName; // 如果沒(méi)有找到點(diǎn),則返回原始文件名 } return fileName.substring(0, dotIndex); // 返回去掉后綴名的文件名 } }
PDF轉(zhuǎn)換為圖片
<!--PDF轉(zhuǎn)換為圖片--> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>fontbox</artifactId> <version>2.0.9</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.9</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency>
import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.PDFRenderer; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; public class PdfToImage { /** * 使用pdfbox將整個(gè)pdf轉(zhuǎn)換成圖片 * * @param fileAddress 文件地址 如:C:\\Users\\user\\Desktop\\test * @param filename PDF文件名不帶后綴名 * @param type 圖片類型 png 和jpg */ public static void pdf2png(String fileAddress, String filename, String type) { long startTime = System.currentTimeMillis(); // 將文件地址和文件名拼接成路徑 注意:線上環(huán)境不能使用\\拼接 File file = new File(fileAddress + "\\" + filename + ".pdf"); try { // 寫入文件 PDDocument doc = PDDocument.load(file); PDFRenderer renderer = new PDFRenderer(doc); int pageCount = doc.getNumberOfPages(); for (int i = 0; i < pageCount; i++) { // dpi為144,越高越清晰,轉(zhuǎn)換越慢 BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI // 將圖片寫出到該路徑下 ImageIO.write(image, type, new File(fileAddress + "\\" + filename + "_" + (i + 1) + "." + type)); } long endTime = System.currentTimeMillis(); System.out.println("共耗時(shí):" + ((endTime - startTime) / 1000.0) + "秒"); //轉(zhuǎn)化用時(shí) } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { pdf2png("C:\\Users\\Administrator\\Documents\\xxx\\pdf", "文件名", "png"); } }
亂碼問(wèn)題
如果在linux運(yùn)行遇到中文亂碼,可嘗試安裝字體然后重啟程序運(yùn)行
參考:
在CentOS系統(tǒng)中安裝中文字體
- 將Windows系統(tǒng)下的simsun.ttc字體文件復(fù)制到CentOS系統(tǒng)中,并修改字體文件名為simsun.ttc,一般字體位置在:/usr/share/fonts下
- 安裝fontconfig軟件包,這是處理字體配置和緩存的工具。可以使用yum命令進(jìn)行安裝,例如:yum -y install fontconfig(查看是否已經(jīng)存在)
- 刷新字體緩存,使得新安裝的字體能夠被系統(tǒng)識(shí)別。使用fc-cache命令完成這一步驟。
- 使用 fc-list 命令查看系統(tǒng)中已安裝的字體列表
- 通過(guò)grep命令搜索“simsun”來(lái)驗(yàn)證simsun.ttc字體是否成功安裝
1、從本地找到字體:C:\Windows\Fonts
2、復(fù)制到Linux,我這里用的centos,復(fù)制字體到 /usr/share/fonts
3、安裝fontconfig工具 yum -y install fontconfig
4、刷新字體緩存 fc-cache
5、查看字體列表是否完成安裝 fc-list
以上就是Java中Word與PDF轉(zhuǎn)換為圖片的方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Java Word PDF轉(zhuǎn)圖片的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
淺談Java中幾種常見的比較器的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇淺談Java中幾種常見的比較器的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10Spring Task定時(shí)任務(wù)的配置和使用詳解
本篇文章主要介紹了Spring Task定時(shí)任務(wù)的配置和使用詳解,實(shí)例分析了Spring Task定時(shí)任務(wù)的配置和使用的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-04-04spring?boot整合mongo查詢converter異常排查記錄
這篇文章主要為大家介紹了spring?boot整合mongo查詢時(shí)拋出converter異常的排查解決記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-03-03Gradle在國(guó)內(nèi)配置鏡像加速的實(shí)現(xiàn)步驟
在國(guó)內(nèi)使用 Gradle 構(gòu)建項(xiàng)目時(shí),最大的痛點(diǎn)就是 依賴下載賊慢,甚至卡死,下面教你如何 配置國(guó)內(nèi)鏡像加速 Gradle 下載依賴,主要是通過(guò)改寫 repositories 中的源地址來(lái)實(shí)現(xiàn),親測(cè)有效,需要的朋友可以參考下2025-05-05Springboot根據(jù)配置文件動(dòng)態(tài)注入接口實(shí)現(xiàn)類詳解
這篇文章主要介紹了Springboot根據(jù)配置文件動(dòng)態(tài)注入接口實(shí)現(xiàn)類詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,需要的朋友可以參考下,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10