最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA實(shí)現(xiàn)DOC轉(zhuǎn)PDF的示例代碼

 更新時(shí)間:2021年08月04日 09:17:26   作者:愛吃西瓜的小蔣  
Word作為目前主流的文本編輯軟件之一,功能十分強(qiáng)大,但是在傳輸?shù)臅r(shí)候不穩(wěn)定,那么如何從DOC轉(zhuǎn)PDF,本文就來介紹一下,感興趣的可以了解一下

Word作為目前主流的文本編輯軟件之一,功能十分強(qiáng)大,應(yīng)用人群廣,但是它也存在一些問題。像是Word文件在不同軟件或操作平臺(tái)之間傳輸?shù)臅r(shí)候,時(shí)不時(shí)會(huì)出現(xiàn)各種格式的“變化”,也會(huì)有點(diǎn)“不穩(wěn)定”,例如內(nèi)容和格式經(jīng)常容易篡動(dòng)。

相較于Word,pdf格式文件顯然優(yōu)秀不少。雖然在內(nèi)容編輯和修改方面表現(xiàn)不佳,但pdf格式文件在不同平臺(tái)和軟件上的穩(wěn)定性表現(xiàn)著實(shí)出色。日常辦公中,越來越多的會(huì)選擇將編輯好的Word文件轉(zhuǎn)換成Pdf格式文件,然后再分享給第三方瀏覽。

如果只是1個(gè)Word文件轉(zhuǎn)換成Pdf文件,簡(jiǎn)直so easy;10個(gè)Word文件轉(zhuǎn)換成pdf文件,雖煩躁,但能忍;如果是將1000個(gè)word文件轉(zhuǎn)換成pdf文件呢?這會(huì)估計(jì)一股無名之火直沖天靈蓋,立馬想摔電腦的沖動(dòng)都有了。

但對(duì)于程序猿來說,操作起來顯然會(huì)容易很多,正好接到一個(gè)任務(wù),索性就來和大家分享一下:將docx轉(zhuǎn)成PDF文檔,還要以代碼的方式實(shí)現(xiàn)批量操作。先后參考了Apache poi java庫以及docx4j組件,于是選擇以docx4j組件來進(jìn)行文檔操作。

第一批次的文檔共90篇:

第一批次的文檔

以下開始實(shí)現(xiàn)docx4j的文檔轉(zhuǎn)PDF功能:

一、下載依賴

docx4j所有的依賴jar包使用marven去處理還是蠻簡(jiǎn)潔的:

<dependency>
	<groupId>org.docx4j</groupId>
	<artifactId>docx4j-JAXB-Internal</artifactId>
	<version>8.2.4</version>
</dependency>
<dependency>
	<groupId>org.docx4j</groupId>
	<artifactId>docx4j-export-fo</artifactId>
	<version>8.2.4</version>
</dependency>

就兩個(gè),短暫等待下載依賴之后發(fā)現(xiàn),docx4j的依賴jar包還是挺多的:

JAR包

手動(dòng)開始敲代碼吧。

二、代碼實(shí)現(xiàn)

package com.convert.test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import org.docx4j.Docx4J;
import org.docx4j.fonts.IdentityPlusMapper;
import org.docx4j.fonts.Mapper;
import org.docx4j.fonts.PhysicalFonts;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;


public class ConvertTest {
	
	public static void main(String[] args) {
		
		word2pdf("D:\\tran\\2.doc", "D:\\tran\\2.pdf");
		
	}
	
	public static void word2pdf(String source, String target) {
		
		try {
            WordprocessingMLPackage pkg = Docx4J.load(new File(source));

            Mapper fontMapper = new IdentityPlusMapper();
            fontMapper.put("隸書", PhysicalFonts.get("LiSu"));
            fontMapper.put("宋體", PhysicalFonts.get("SimSun"));
            fontMapper.put("微軟雅黑", PhysicalFonts.get("Microsoft Yahei"));
            fontMapper.put("黑體", PhysicalFonts.get("SimHei"));
            fontMapper.put("楷體", PhysicalFonts.get("KaiTi"));
            fontMapper.put("新宋體", PhysicalFonts.get("NSimSun"));
            fontMapper.put("華文行楷", PhysicalFonts.get("STXingkai"));
            fontMapper.put("華文仿宋", PhysicalFonts.get("STFangsong"));
            fontMapper.put("仿宋", PhysicalFonts.get("FangSong"));
            fontMapper.put("幼圓", PhysicalFonts.get("YouYuan"));
            fontMapper.put("華文宋體", PhysicalFonts.get("STSong"));
            fontMapper.put("華文中宋", PhysicalFonts.get("STZhongsong"));
            fontMapper.put("等線", PhysicalFonts.get("SimSun"));
            fontMapper.put("等線 Light", PhysicalFonts.get("SimSun"));
            fontMapper.put("華文琥珀", PhysicalFonts.get("STHupo"));
            fontMapper.put("華文隸書", PhysicalFonts.get("STLiti"));
            fontMapper.put("華文新魏", PhysicalFonts.get("STXinwei"));
            fontMapper.put("華文彩云", PhysicalFonts.get("STCaiyun"));
            fontMapper.put("方正姚體", PhysicalFonts.get("FZYaoti"));
            fontMapper.put("方正舒體", PhysicalFonts.get("FZShuTi"));
            fontMapper.put("華文細(xì)黑", PhysicalFonts.get("STXihei"));
            fontMapper.put("宋體擴(kuò)展", PhysicalFonts.get("simsun-extB"));
            fontMapper.put("仿宋_GB2312", PhysicalFonts.get("FangSong_GB2312"));
            fontMapper.put("新細(xì)明體", PhysicalFonts.get("SimSun"));
            pkg.setFontMapper(fontMapper);

            Docx4J.toPDF(pkg, new FileOutputStream(target));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (Docx4JException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
		
	}	
}

三、轉(zhuǎn)換結(jié)果

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Using pdbs 420=7mm
Using pdbs 420=7mm

有一點(diǎn)報(bào)錯(cuò),不過并不影響pdf的生成,打開生成的pdf,內(nèi)容也是完整的。算是完成了吧,只要再寫一個(gè)for循環(huán),去遍歷所有的文檔就可以了。但是后來發(fā)現(xiàn)轉(zhuǎn)換下來的pdf數(shù)量少了10個(gè),所有的文檔并沒有全都轉(zhuǎn)換成功。

四、后續(xù)研究

排查一番,發(fā)現(xiàn)這些文檔中有10個(gè)doc文檔,就該就是這10個(gè)沒有成功了,單獨(dú)拎出來轉(zhuǎn)換一下,結(jié)果就報(bào)錯(cuò)了:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
org.docx4j.openpackaging.exceptions.Docx4JException: This file seems to be a binary doc/ppt/xls, not an encrypted OLE2 file containing a doc/pptx/xlsx
	at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:612)
	at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:414)
	at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:287)
	at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:265)
	at org.docx4j.openpackaging.packages.WordprocessingMLPackage.load(WordprocessingMLPackage.java:168)
	at org.docx4j.Docx4J.load(Docx4J.java:232)
	at com.convert.test.ConvertTest.word2pdf(ConvertTest.java:26)
	at com.convert.test.ConvertTest.main(ConvertTest.java:19)

This file seems to be a binary doc/ppt/xls, not an encrypted OLE2 file containing a doc/pptx/xlsx
“此文件似乎是一個(gè)二進(jìn)制文件doc/ppt/xls,而不是包含doc/pptx/xlsx的加密OLE2文件”
貌似docx4j并不能完美的支持所有的word文檔,至少doc文檔并不能支持。我想到之前有小伙伴也遇到過這樣問題,后來說是用了永中的office轉(zhuǎn)換,索性今天自己也來嘗試一下。

三下五除二,一頓操作,永中office官網(wǎng)上的office直接就能把我的doc文檔轉(zhuǎn)成html展示在瀏覽器上,心細(xì)如塵的我,還在其官網(wǎng)上發(fā)現(xiàn)有一款“PDF工具集”的產(chǎn)品:

PDF工具集

在文章的右側(cè)有“開發(fā)者”選項(xiàng),可以直接點(diǎn)擊它進(jìn)入到轉(zhuǎn)換的界面。進(jìn)入之后,發(fā)現(xiàn)永中支持的格式還是不少的,在頁面的上半部分就列出了當(dāng)前支持的所有格式:

yozo支持格式

繼續(xù)向下滾動(dòng)鼠標(biāo)滾輪,到達(dá)文檔轉(zhuǎn)換的位置:

文檔轉(zhuǎn)換

可以直接點(diǎn)擊上傳一份doc文檔,等待上傳完畢,就可以直接將doc文檔轉(zhuǎn)換成PDF文檔了,這樣一來,不管多少個(gè)文件,都能一鍵實(shí)現(xiàn)word文件轉(zhuǎn)換成pdf文件,小伙伴們?cè)僖膊挥脫?dān)心了。

五、總結(jié)

其實(shí),目前市面上已有的文檔轉(zhuǎn)換類的產(chǎn)品非常多,市場(chǎng)競(jìng)爭(zhēng)十分激烈。但依舊不妨礙有好的產(chǎn)品涌現(xiàn)出來,受到一眾用戶的喜歡和追捧。

一款好的產(chǎn)品一定是契合用戶的本性,能夠?qū)τ脩粜纬梢环N強(qiáng)大的吸引力,將其牢牢“粘住”。就像永中的這款產(chǎn)品,緊跟市場(chǎng)需求,更看到了用戶的痛點(diǎn),真正做到用一款簡(jiǎn)單、實(shí)用、好操作的產(chǎn)品,贏得市場(chǎng),更贏得了用戶!

到此這篇關(guān)于JAVA實(shí)現(xiàn)DOC轉(zhuǎn)PDF的示例代碼的文章就介紹到這了,更多相關(guān)JAVA實(shí)現(xiàn)DOC轉(zhuǎn)PDF功能內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python安裝Jupyter Notebook配置使用教程詳解

    Python安裝Jupyter Notebook配置使用教程詳解

    這篇文章主要介紹了Python安裝Jupyter Notebook配置使用教程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • java實(shí)現(xiàn)俄羅斯方塊小游戲

    java實(shí)現(xiàn)俄羅斯方塊小游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)俄羅斯方塊小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • MyBatisPlus防全表更新與刪除的實(shí)現(xiàn)示例

    MyBatisPlus防全表更新與刪除的實(shí)現(xiàn)示例

    本文主要介紹了MyBatisPlus防全表更新與刪除的實(shí)現(xiàn)示例,針對(duì) update 和 delete 語句,阻止惡意的全表更新和全表刪除,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • java多線程解決生產(chǎn)者消費(fèi)者問題

    java多線程解決生產(chǎn)者消費(fèi)者問題

    這篇文章主要介紹了java多線程解決生產(chǎn)者消費(fèi)者問題的方法,實(shí)例分析了java采用多線程的方法解決生產(chǎn)者消費(fèi)者問題的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • java實(shí)戰(zhàn)小技巧之優(yōu)雅的實(shí)現(xiàn)字符串拼接

    java實(shí)戰(zhàn)小技巧之優(yōu)雅的實(shí)現(xiàn)字符串拼接

    字符串拼接是我們?cè)贘ava代碼中比較經(jīng)常要做的事情,就是把多個(gè)字符串拼接到一起,這篇文章主要給大家介紹了關(guān)于java實(shí)戰(zhàn)小技巧之優(yōu)雅的實(shí)現(xiàn)字符串拼接的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • nacos單機(jī)版啟動(dòng)失敗問題以及解決

    nacos單機(jī)版啟動(dòng)失敗問題以及解決

    這篇文章主要介紹了nacos單機(jī)版啟動(dòng)失敗問題以及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • java如何獲取指定文件夾下的所有文件名

    java如何獲取指定文件夾下的所有文件名

    這篇文章主要介紹了java如何獲取指定文件夾下的所有文件名問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java中的"找不到符號(hào)"錯(cuò)誤解決辦法

    Java中的"找不到符號(hào)"錯(cuò)誤解決辦法

    開發(fā)中遇到一個(gè)問題,當(dāng)我用idea開發(fā)工具將新的項(xiàng)目代碼從GitLab上面拉取下來,所有的Maven依賴也導(dǎo)入成功,然后啟動(dòng)項(xiàng)目,結(jié)果報(bào)錯(cuò):java:找不到符號(hào),這篇文章主要給大家介紹了關(guān)于Java中"找不到符號(hào)"錯(cuò)誤的解決辦法,需要的朋友可以參考下
    2023-10-10
  • maven實(shí)現(xiàn)jar包導(dǎo)入+導(dǎo)出方式

    maven實(shí)現(xiàn)jar包導(dǎo)入+導(dǎo)出方式

    這篇文章主要介紹了maven實(shí)現(xiàn)jar包導(dǎo)入+導(dǎo)出方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Spring Security攔截器引起Java CORS跨域失敗的問題及解決

    Spring Security攔截器引起Java CORS跨域失敗的問題及解決

    這篇文章主要介紹了Spring Security攔截器引起Java CORS跨域失敗的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論

孝昌县| 龙游县| 灌云县| 灯塔市| 南溪县| 铜川市| 清河县| 镇坪县| 阜康市| 海南省| 佛山市| 界首市| 太白县| 泰安市| 岳普湖县| 怀柔区| 安国市| 兰州市| 博白县| 绥中县| 东乌| 永胜县| 乌拉特前旗| 波密县| 芦山县| 保亭| 遵义县| 大荔县| 通州市| 宁国市| 资中县| 泽库县| 仁布县| 明水县| 高淳县| 石台县| 高邑县| 墨玉县| 同江市| 兰州市| 孝感市|