Java中Word與PDF轉(zhuǎn)換為圖片的方法詳解
Word、PDF轉(zhuǎn)換為圖片Java
需求要在小程序端展示文檔內(nèi)容,所以將文檔每頁轉(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()));
// 逐頁將 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; // 如果沒有找到點(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");
}
}
亂碼問題
如果在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)中已安裝的字體列表
- 通過grep命令搜索“simsun”來驗(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元素排序Comparable與Comparator的區(qū)別
這篇文章主要介紹了Java元素排序Comparable與Comparator的區(qū)別,二者都是頂級(jí)的接口,但擁有的方法和用法是不同的,下面我們分別來看看具體是怎樣的區(qū)別吧2022-05-05
Java后綴數(shù)組之求sa數(shù)組的實(shí)例代碼
后綴數(shù)組就是一個(gè)字符串所有后綴大小排序后的一個(gè)集合,然后我們根據(jù)后綴數(shù)組的一些性質(zhì)就可以實(shí)現(xiàn)各種需求。這篇文章主要介紹了Java后綴數(shù)組-求sa數(shù)組,需要的朋友可以參考下2018-04-04
項(xiàng)目中配置Maven為國(guó)內(nèi)源實(shí)現(xiàn)方式
這篇文章主要介紹了項(xiàng)目中配置Maven為國(guó)內(nèi)源實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2026-03-03
Mybatis配置映射文件中parameterType的用法講解
這篇文章主要介紹了Mybatis配置映射文件中parameterType的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Java enum關(guān)鍵字不識(shí)別的快速解決辦法
這篇文章主要介紹了Java enum關(guān)鍵字不識(shí)別的快速解決辦法,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-09-09
關(guān)于bootstrap.yml和bootstrap.properties的優(yōu)先級(jí)問題
這篇文章主要介紹了關(guān)于bootstrap.yml和bootstrap.properties的優(yōu)先級(jí)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
Java中的PrintWriter 介紹_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
PrintWriter 是字符類型的打印輸出流,它繼承于Writer。接下來通過本文給大家介紹java中的 PrintWriter 相關(guān)知識(shí),感興趣的朋友一起學(xué)習(xí)吧2017-05-05
Java自定義一個(gè)變長(zhǎng)數(shù)組的思路與代碼
有時(shí)我們希望將把數(shù)據(jù)保存在單個(gè)連續(xù)的數(shù)組中,以便快速、便捷地訪問數(shù)據(jù),但這需要調(diào)整數(shù)組大小或者對(duì)其擴(kuò)展,下面這篇文章主要給大家介紹了關(guān)于Java自定義一個(gè)變長(zhǎng)數(shù)組的思路與代碼,需要的朋友可以參考下2022-12-12

