利用aspose轉word爲PDF實現文檔在線預覽

原始需求

java-web項目某頁面,用戶可上傳word文檔,上傳後的文檔名在頁面的表格中展示,需要提供word文檔的在線預覽、下載功能。

找尋解決方式

需求點主要有三個,分別是word文件的上傳、預覽和下載,文件的上傳和下載就不多說了,主要的難點在於預覽。找資料找到了下面幾種解決方式:

利用POI把word文檔轉換爲html

現在的POI對於word文檔處理是挺強大的,對於一些簡單文檔的處理問題不大,但是對於一些複雜文檔的處理就有點心累了,而且用戶上傳的文檔是相對比較複雜的文檔,除了複雜的表格外還有很多圖片,所以放棄這種方式。

利用微軟或者Google的在線文檔預覽服務

這個方法也是不可行的,使用微軟和Google的在線文檔預覽服務需要向他們提供word文檔的鏈接,而客戶的文件是需要保密,不能對外泄露的。

使用Apache OpenOffice的將word轉換爲PDF

Apache OpenOffice支持多種環境,而且是開源的,我沒有使用這種方式,想了解的話可以參考:https://blog.csdn.net/a1786223749/article/details/79461070

使用apose將word轉換爲PDF

apose是一個很強大的office文檔處理軟件,可以完美的實現word文檔轉換爲pdf文件,缺點就是軟件是需要付費的。但是網上可以找到很多的破解版jar包,測試效果還是很不錯的,而且使用簡單,項目中使用的就是這種方式。

使用apose轉換word爲PDF

import com.aspose.words.Document;
import com.aspose.words.License;
import com.aspose.words.SaveFormat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;

/**
 * <b><code>Word2PdfUtil</code></b>
 * <p>
 * Description: word to pdf util.
 * <p>
 * <b>Creation Time:</b> 2018/5/15 15:10
 *
 * @author 
 * @date 2018 /5/15
 * @since JDK 1.7
 */
public class Word2PdfUtil {

    /**
     * The constant LOG.
     *
     */
    private static final Logger LOG = LoggerFactory.getLogger(Word2PdfUtil.class);

    /**
     * 獲取license
     *
     * @return
     */
    private static boolean getLicense() {
        boolean result = false;
        try {
            // 憑證
            String licenseStr =
                    "<License>\n" +
                    "  <Data>\n" +
                    "    <Products>\n" +
                    "      <Product>Aspose.Total for Java</Product>\n" +
                    "      <Product>Aspose.Words for Java</Product>\n" +
                    "    </Products>\n" +
                    "    <EditionType>Enterprise</EditionType>\n" +
                    "    <SubscriptionExpiry>20991231</SubscriptionExpiry>\n" +
                    "    <LicenseExpiry>20991231</LicenseExpiry>\n" +
                    "    <SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber>\n" +
                    "  </Data>\n" +
                    "  <Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>\n" +
                    "</License>";
            InputStream license = new ByteArrayInputStream(licenseStr.getBytes("UTF-8"));
            License asposeLic = new License();
            asposeLic.setLicense(license);
            result = true;
        } catch (Exception e) {
            LOG.error("error:", e);
        }
        return result;
    }

    /**
     * Word 2 pdf.
     *
     * @param multipartFile the multipart file
     * @param pdfFilePath   the pdf file path
     */
    public static void word2Pdf(MultipartFile multipartFile, String pdfFilePath) {
        FileOutputStream fileOS = null;
        // 驗證License
        if (!getLicense()) {
            LOG.error("驗證License失敗!");
            return;
        }
        try {
            Document doc = new Document(multipartFile.getInputStream());
            fileOS = new FileOutputStream(new File(pdfFilePath));
            // 保存轉換的pdf文件
            doc.save(fileOS, SaveFormat.PDF);
        } catch (Exception e) {
            LOG.error("error:", e);
        } finally {
            try {
                if(fileOS != null){
                    fileOS.close();
                }
            } catch (IOException e) {
                LOG.error("error:", e);
            }
        }
    }
}  

apose的Jar包和maven-pom.xml

鏈接:https://pan.baidu.com/s/19clf3JPKMkr_O9uUFF8C0Q 密碼:bbu0

遇到的問題

WORD轉PDF功能在windows下轉換正常,Linux下中文亂碼

因爲轉換時需要系統裏有word文檔裏使用的字體,當找不到該字體的時候就會亂碼。
Linux下默認只有很少的中文字體,所以很可能會出現中文亂碼問題。
解決辦法也很簡單,只需在Linux系統中添加常用的字體即可。

1.查看系統支持的字體

fc-list

2.查看系統支持的中文字體

fc-list :lang=zh

3.創建字體目錄(需要root權限,linux系統默認的字體存放路徑爲/usr/share/fonts,沒有可自行創建)

cd /usr/share/fonts
mkdir windows

4.cp字體文件(將需要新增的字體文件拷貝到指定目錄中)

cd windows
cp ~/fonts/* ./

5.目錄和字體文件設置爲所有用戶可見

chmod 755 ../windows
chmod 755 ./*

6.應用字體

mkfontscale (如果提示 mkfontscale: command not found,需自行安裝 # yum install mkfontscale )
mkfontdir
fc-cache -fv (如果提示 fc-cache: command not found,則需要安裝# yum install fontconfig )

7.再次查看系統支持的字體

fc-list

 借鑑:https://www.jianshu.com/p/86716c7122ef

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章