利用aspose轉(zhuǎn)word為PDF實(shí)現(xiàn)文檔在線預(yù)覽

原始需求

java-web項(xiàng)目某頁面,用戶可上傳word文檔迅诬,上傳后的文檔名在頁面的表格中展示佩谷,需要提供word文檔的在線預(yù)覽旁壮、下載功能辞做。

找尋解決方式

需求點(diǎn)主要有三個(gè),分別是word文件的上傳寡具、預(yù)覽和下載秤茅,文件的上傳和下載就不多說了,主要的難點(diǎn)在于預(yù)覽童叠。找資料找到了下面幾種解決方式:

利用POI把word文檔轉(zhuǎn)換為html

現(xiàn)在的POI對(duì)于word文檔處理是挺強(qiáng)大的框喳,對(duì)于一些簡(jiǎn)單文檔的處理問題不大,但是對(duì)于一些復(fù)雜文檔的處理就有點(diǎn)心累了厦坛,而且用戶上傳的文檔是相對(duì)比較復(fù)雜的文檔五垮,除了復(fù)雜的表格外還有很多圖片,所以放棄這種方式杜秸。

利用微軟或者Google的在線文檔預(yù)覽服務(wù)

這個(gè)方法也是不可行的放仗,使用微軟和Google的在線文檔預(yù)覽服務(wù)需要向他們提供word文檔的鏈接,而客戶的文件是需要保密撬碟,不能對(duì)外泄露的诞挨。

使用Apache OpenOffice的將word轉(zhuǎn)換為PDF

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

使用apose將word轉(zhuǎn)換為PDF

apose是一個(gè)很強(qiáng)大的office文檔處理軟件,可以完美的實(shí)現(xiàn)word文檔轉(zhuǎn)換為pdf文件其障,缺點(diǎn)就是軟件是需要付費(fèi)的银室。但是網(wǎng)上可以找到很多的破解版jar包,測(cè)試效果還是很不錯(cuò)的励翼,而且使用簡(jiǎn)單蜈敢,項(xiàng)目中使用的就是這種方式。

使用apose轉(zhuǎn)換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;
        // 驗(yàn)證License
        if (!getLicense()) {
            LOG.error("驗(yàn)證License失斊А抓狭!");
            return;
        }
        try {
            Document doc = new Document(multipartFile.getInputStream());
            fileOS = new FileOutputStream(new File(pdfFilePath));
            // 保存轉(zhuǎn)換的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轉(zhuǎn)PDF功能在windows下轉(zhuǎn)換正常,Linux下中文亂碼

因?yàn)檗D(zhuǎn)換時(shí)需要系統(tǒng)里有word文檔里使用的字體殊橙,當(dāng)找不到該字體的時(shí)候就會(huì)亂碼辐宾。
Linux下默認(rèn)只有很少的中文字體狱从,所以很可能會(huì)出現(xiàn)中文亂碼問題膨蛮。
解決辦法也很簡(jiǎn)單,只需在Linux系統(tǒng)中添加常用的字體即可季研。

  1. 查看系統(tǒng)支持的字體
fc-list
  1. 查看系統(tǒng)支持的中文字體
fc-list :lang=zh
  1. 創(chuàng)建字體目錄(需要root權(quán)限敞葛,linux系統(tǒng)默認(rèn)的字體存放路徑為/usr/share/fonts,沒有可自行創(chuàng)建)
cd /usr/share/fonts
mkdir windows
  1. cp字體文件(將需要新增的字體文件拷貝到指定目錄中)
cd windows
cp ~/fonts/* ./
  1. 目錄和字體文件設(shè)置為所有用戶可見
chmod 755 ../windows
chmod 755 ./*
  1. 應(yīng)用字體
mkfontscale (如果提示 mkfontscale: command not found与涡,需自行安裝 # yum install mkfontscale )
mkfontdir
fc-cache -fv (如果提示 fc-cache: command not found惹谐,則需要安裝# yum install fontconfig )
  1. 再次查看系統(tǒng)支持的字體
fc-list

前端預(yù)覽PDF文件

關(guān)于前端預(yù)覽pdf文件可以使用pdf.js預(yù)覽持偏。另推薦一個(gè)Angular2+的PDF預(yù)覽插件:https://github.com/VadimDez/ng2-pdf-viewer

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市氨肌,隨后出現(xiàn)的幾起案子鸿秆,更是在濱河造成了極大的恐慌,老刑警劉巖怎囚,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卿叽,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡恳守,警方通過查閱死者的電腦和手機(jī)考婴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來催烘,“玉大人沥阱,你說我怎么就攤上這事∫寥海” “怎么了考杉?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)舰始。 經(jīng)常有香客問我奔则,道長(zhǎng),這世上最難降的妖魔是什么蔽午? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任易茬,我火速辦了婚禮,結(jié)果婚禮上及老,老公的妹妹穿的比我還像新娘抽莱。我一直安慰自己,他們只是感情好骄恶,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布食铐。 她就那樣靜靜地躺著,像睡著了一般僧鲁。 火紅的嫁衣襯著肌膚如雪虐呻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天寞秃,我揣著相機(jī)與錄音斟叼,去河邊找鬼。 笑死春寿,一個(gè)胖子當(dāng)著我的面吹牛朗涩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绑改,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼谢床,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼兄一!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起识腿,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤出革,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后渡讼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹋盆,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年硝全,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了栖雾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伟众,死狀恐怖析藕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情凳厢,我是刑警寧澤账胧,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站先紫,受9級(jí)特大地震影響治泥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜遮精,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一居夹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧本冲,春花似錦准脂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至添怔,卻和暖如春湾戳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背广料。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工砾脑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人性昭。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓拦止,卻偏偏與公主長(zhǎng)得像县遣,于是被迫代替她去往敵國(guó)和親糜颠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子汹族,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,969評(píng)論 3 119
  • Ubuntu的發(fā)音 Ubuntu榴徐,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音匀归。了解發(fā)音是有意...
    螢火蟲de夢(mèng)閱讀 99,201評(píng)論 9 467
  • 1.我認(rèn)為電商改變了傳統(tǒng)的供給和需求的方便和快捷坑资,沒有改變?nèi)藗儗?duì)產(chǎn)品的要求 2.(1)電子商務(wù)發(fā)展的基礎(chǔ)是各種多媒...
    b07c0ccac007閱讀 197評(píng)論 2 2
  • 第一程:2月2日珠海動(dòng)車至昆明10:25—20:21。23:03臥鋪至大理(2月3日5:30抵達(dá)大理)穆端,背包寄存袱贮,...
    萍兒放歌閱讀 278評(píng)論 0 0
  • 紫莖閱讀 89評(píng)論 0 0