欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中Word與PDF轉(zhuǎn)換為圖片的方法詳解

 更新時(shí)間:2024年10月22日 10:31:06   作者:摘星喵Pro  
這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)將Word與PDF轉(zhuǎn)換為圖片,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

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軟件包,這是處理字體配置和緩存的工具??梢允褂脃um命令進(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)文章

  • MyBatis中SQL片段復(fù)用使用方法詳解

    MyBatis中SQL片段復(fù)用使用方法詳解

    在使用 MyBatis 進(jìn)行數(shù)據(jù)庫操作時(shí),常常會(huì)遇到一些 SQL 語句的部分內(nèi)容重復(fù)出現(xiàn)的情況,比如多個(gè)查詢語句都涉及相同的字段列表,這時(shí),MyBatis 的 SQL 片段復(fù)用功能就派上用場了,接下小編給大家介紹了MyBatis中SQL片段復(fù)用使用方法,需要的朋友可以參考下
    2024-12-12
  • Java實(shí)現(xiàn)多人聊天室(含界面)

    Java實(shí)現(xiàn)多人聊天室(含界面)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)多人聊天室,包含界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java事務(wù)管理學(xué)習(xí)之Spring和Hibernate詳解

    Java事務(wù)管理學(xué)習(xí)之Spring和Hibernate詳解

    這篇文章主要給大家介紹了Java事務(wù)管理學(xué)習(xí)之Spring和Hibernate的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們可以參考借鑒,下面來一起看看吧。
    2017-03-03
  • java中的分布式事務(wù)解決方式

    java中的分布式事務(wù)解決方式

    分布式事務(wù)是分布式系統(tǒng)中確保數(shù)據(jù)一致性的重要機(jī)制,它涉及多個(gè)數(shù)據(jù)源或參與者,要么所有操作全部成功,要么全部失敗,常見的解決方案包括2PC(兩階段提交協(xié)議)、3PC(三階段提交協(xié)議)和TCC(Try-Confirm-Cancel),2PC雖然簡單但存在單點(diǎn)故障等問題
    2024-09-09
  • Java多線程深入理解

    Java多線程深入理解

    這篇文章主要介紹了java多線程編程實(shí)例,分享了幾則多線程的實(shí)例代碼,具有一定參考價(jià)值,加深多線程編程的理解還是很有幫助的,需要的朋友可以參考下
    2021-07-07
  • 使用javafx更新UI的方法

    使用javafx更新UI的方法

    這篇文章主要介紹了使用javafx更新UI的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 聊聊@RequestBody和Json之間的關(guān)系

    聊聊@RequestBody和Json之間的關(guān)系

    這篇文章主要介紹了@RequestBody和Json之間的關(guān)系,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 如何解決@Data和@Builder的沖突問題

    如何解決@Data和@Builder的沖突問題

    在使用@Data和@Builder注解時(shí),可能會(huì)導(dǎo)致無法使用無參構(gòu)造方法創(chuàng)建實(shí)體類實(shí)例的問題,本文提出了兩種解決方法:一是手動(dòng)添加無參構(gòu)造并使用@Tolerate注解兼容;二是同時(shí)添加@AllArgsConstructor和@NoArgsConstructor注解,既添加無參構(gòu)造也添加全參構(gòu)造
    2024-10-10
  • Idea如何導(dǎo)入一個(gè)SpringBoot項(xiàng)目的方法(圖文教程)

    Idea如何導(dǎo)入一個(gè)SpringBoot項(xiàng)目的方法(圖文教程)

    這篇文章主要介紹了Idea如何導(dǎo)入一個(gè)SpringBoot項(xiàng)目的方法(圖文教程),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java?Socket編程從零到實(shí)戰(zhàn)詳解(完整實(shí)戰(zhàn)案例)

    Java?Socket編程從零到實(shí)戰(zhàn)詳解(完整實(shí)戰(zhàn)案例)

    這篇文章主要介紹了Java?Socket編程從零到實(shí)戰(zhàn)詳解,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-04-04

最新評(píng)論