檔案線上預覽(二)word、pdf檔案轉html以實現檔案線上預覽

2023-05-30 12:00:34

@


實現檔案線上預覽的方式除了上篇文章《檔案線上預覽(一)通過將txt、word、pdf轉成圖片實現線上預覽功能》說的將檔案轉成圖片的實現方式外,還有轉成pdf,前端通過pdf.js、pdfobject.js等外掛來實現線上預覽,以及本文將要說到的將檔案轉成html的方式來實現線上預覽。程式碼基於 aspose-words(用於word轉html),pdfbox(用於pdf轉html),所以事先需要在專案裡下面兩個依賴:

<dependency>    
    <groupId>com.luhuiguo</groupId>    
    <artifactId>aspose-words</artifactId>    
    <version>23.1</version></dependency>
<dependency>    
    <groupId>org.apache.pdfbox</groupId>    
    <artifactId>pdfbox</artifactId>    
    <version>2.0.4</version>
</dependency>

一、將檔案轉換成html字串

1、將word檔案轉成html字串

public static String wordToHtmlStr(String wordPath) {
        try {
            Document doc = new Document(wordPath); // Address是將要被轉化的word檔案
            String htmlStr = doc.toString();
            return htmlStr;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

驗證結果:

2、將pdf檔案轉成html字串

public static String pdfToHtmlStr(String pdfPath) throws IOException, ParserConfigurationException {
        PDDocument document = PDDocument.load(new File(pdfPath));
        Writer writer = new StringWriter();
        new PDFDomTree().writeText(document, writer);
        writer.close();
        document.close();
        return writer.toString();
    }

驗證結果:

二、將檔案轉換成html,並生成html檔案

有時我們是需要的不僅僅返回html字串,而是需要生成一個html檔案這時應該怎麼做呢?一個改動量小的做法就是使用org.apache.commons.io包下的FileUtils工具類寫入目標地址:

FileUtils類將html字串生成html檔案範例:

首先需要引入pom:

		<dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.8.0</version>
        </dependency>

相關程式碼:

String htmlStr = FileConvertUtil.pdfToHtmlStr("D:\\書籍\\電子書\\小說\\歷史小說\\最後的可汗.doc");
FileUtils.write(new File("D:\\test\\doc.html"), htmlStr, "utf-8");

除此之外,還可以對上面的程式碼進行一些調整,已實現生成html檔案,程式碼調整如下:

1、將word檔案轉換成html檔案

public static void wordToHtml(String wordPath, String htmlPath) {
        try {
            File sourceFile = new File(wordPath);
            String path = htmlPath + File.separator + sourceFile.getName().substring(0, sourceFile.getName().lastIndexOf(".")) + ".html";
            File file = new File(path); // 新建一個空白pdf檔案
            FileOutputStream os = new FileOutputStream(file);
            Document doc = new Document(wordPath); // Address是將要被轉化的word檔案
            HtmlSaveOptions options = new HtmlSaveOptions();
            options.setExportImagesAsBase64(true);
            options.setExportRelativeFontSize(true);
            doc.save(os, options);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

驗證結果:

2、將pdf檔案轉換成html檔案

public static void pdfToHtml(String pdfPath, String htmlPath) throws IOException, ParserConfigurationException {
        File file = new File(pdfPath);
        String path = htmlPath + File.separator + file.getName().substring(0, file.getName().lastIndexOf(".")) + ".html";
        PDDocument document = PDDocument.load(new File(pdfPath));
        Writer writer = new PrintWriter(path, "UTF-8");
        new PDFDomTree().writeText(document, writer);
        writer.close();
        document.close();
    }

圖片版PDF檔案驗證結果:

文字版PDF檔案驗證結果: