自己以前折騰過java通過openOffice實現(xiàn)word,excel,ppt轉(zhuǎn)成pdf實現(xiàn)在線預(yù)覽,基本上滿足需求,但是只滿足了大部分格式,最近發(fā)現(xiàn)了kkFileView這個開源項目,他們把我上面折騰的那些基于openOffice實現(xiàn)在線預(yù)覽的這個功能用springboot很好的實現(xiàn)了一遍,只要拉下來,配置一下,啟動好就可以調(diào)服務(wù)用了,高效省事,源代碼也可以拉下來,根據(jù)自己的需求去定制,不過封裝好的就已經(jīng)夠用了。
官網(wǎng):https://kkfileview.keking.cn/
官網(wǎng)上有很詳細(xì)的文檔,可以去https://gitee.com/kekingcn/file-online-preview/releases
下載最新穩(wěn)定版本
環(huán)境要求
Java: 1.8+
OpenOffice(Windows下已內(nèi)置,CentOS或Ubuntu下會自動下載安裝,MacOS下需要自行安裝)
最新版本下載下來解壓之后(以linux版本為例),是如下的文件結(jié)構(gòu)
進(jìn)入bin目錄
在終端root用戶運行./startup.sh啟動應(yīng)用,如果系統(tǒng)沒有安裝openoffice會自己去下載安裝,安裝完之后會啟動這個springboot項目,./shutdown.sh是停止,跟tomcat的結(jié)構(gòu)差不多,在config文件夾下有application.properties配置文件,里面可以配置springboot項目的各種參數(shù),里面都是有中文注釋的,比如下面這樣:
#######################################不可動態(tài)配置,需要重啟生效#######################################
server.port = ${KK_SERVER_PORT:8012}
server.context-path = ${KK_CONTEXT_PATH:/}
spring.http.encoding.charset = utf8
## Freemarker 配置
spring.freemarker.template-loader-path = classpath:/web/
spring.freemarker.cache = false
spring.freemarker.charset = UTF-8
spring.freemarker.check-template-location = true
spring.freemarker.content-type = text/html
spring.freemarker.expose-request-attributes = true
spring.freemarker.expose-session-attributes = true
spring.freemarker.request-context-attribute = request
spring.freemarker.suffix = .ftl
server.tomcat.uri-encoding = UTF-8
#文件上傳限制
spring.http.multipart.max-request-size=500MB
spring.http.multipart.max-file-size=500MB
#文件資源路徑(默認(rèn)為打包根路徑下的file目錄下)
#file.dir = D:\\kkFileview\\
file.dir = ${KK_FILE_DIR:default}
#openoffice home路徑
#office.home = C:\\Program Files (x86)\\OpenOffice 4
office.home = ${KK_OFFICE_HOME:default}
#緩存實現(xiàn)類型,不配默認(rèn)為內(nèi)嵌RocksDB(type = default)實現(xiàn),可配置為redis(type = redis)實現(xiàn)(需要配置spring.redisson.address等參數(shù))和 JDK 內(nèi)置對象實現(xiàn)(type = jdk),
cache.type = ${KK_CACHE_TYPE:jdk}
#redis連接,只有當(dāng)cache.type = redis時才有用
spring.redisson.address = ${KK_SPRING_REDISSON_ADDRESS:127.0.0.1:6379}
spring.redisson.password = ${KK_SPRING_REDISSON_PASSWORD:123456}
#緩存是否自動清理 true 為開啟,注釋掉或其他值都為關(guān)閉
cache.clean.enabled = ${KK_CACHE_CLEAN_ENABLED:true}
#緩存自動清理時間,cache.clean.enabled = true時才有用,cron表達(dá)式,基于Quartz cron
cache.clean.cron = ${KK_CACHE_CLEAN_CRON:0 0 3 * * ?}
#######################################可在運行時動態(tài)配置#######################################
#提供預(yù)覽服務(wù)的地址,默認(rèn)從請求url讀,如果使用nginx等反向代理,需要手動設(shè)置
#base.url = https://file.keking.cn
base.url = ${KK_BASE_URL:default}
#信任站點,多個用','隔開,設(shè)置了之后,會限制只能預(yù)覽來自信任站點列表的文件,默認(rèn)不限制
#trust.host = file.keking.cn,kkfileview.keking.cn
trust.host = ${KK_TRUST_HOST:default}
#是否啟用緩存
cache.enabled = ${KK_CACHE_ENABLED:false}
#文本類型,默認(rèn)如下,可自定義添加
simText = ${KK_SIMTEXT:txt,html,htm,asp,jsp,xml,json,properties,md,gitignore,log,java,py,c,cpp,sql,sh,bat,m,bas,prg,cmd}
#多媒體類型,默認(rèn)如下,可自定義添加
media = ${KK_MEDIA:mp3,wav,mp4,flv}
#office類型文檔(word ppt)樣式,默認(rèn)為圖片(image),可配置為pdf(預(yù)覽時也有按鈕切換)
office.preview.type = ${KK_OFFICE_PREVIEW_TYPE:image}
#是否禁止下載轉(zhuǎn)換生成的pdf文件
pdf.download.disable = ${KK_PDF_DOWNLOAD_DISABLE:false}
#預(yù)覽源為FTP時 FTP用戶名,可在ftp url后面加參數(shù)ftp.username=ftpuser指定,不指定默認(rèn)用配置的
ftp.username = ${KK_FTP_USERNAME:ftpuser}
#預(yù)覽源為FTP時 FTP密碼,可在ftp url后面加參數(shù)ftp.password=123456指定,不指定默認(rèn)用配置的
ftp.password = ${KK_FTP_PASSWORD:123456}
#預(yù)覽源為FTP時, FTP連接默認(rèn)ControlEncoding(根據(jù)FTP服務(wù)器操作系統(tǒng)選擇,Linux一般為UTF-8,Windows一般為GBK),可在ftp url后面加參數(shù)ftp.control.encoding=UTF-8指定,不指定默認(rèn)用配置的
ftp.control.encoding = ${KK_FTP_CONTROL_ENCODING:UTF-8}
#水印內(nèi)容
#例:watermark.txt = ${WATERMARK_TXT:凱京科技內(nèi)部文件,嚴(yán)禁外泄}
#如需取消水印,內(nèi)容設(shè)置為空即可,例:watermark.txt = ${WATERMARK_TXT:}
watermark.txt = ${WATERMARK_TXT:}
#水印x軸間隔
watermark.x.space = ${WATERMARK_X_SPACE:10}
#水印y軸間隔
watermark.y.space = ${WATERMARK_Y_SPACE:10}
#水印字體
watermark.font = ${WATERMARK_FONT:微軟雅黑}
#水印字體大小
watermark.fontsize = ${WATERMARK_FONTSIZE:18px}
#水印字體顏色
watermark.color = ${WATERMARK_COLOR:black}
#水印透明度,要求設(shè)置在大于等于0.005,小于1
watermark.alpha = ${WATERMARK_ALPHA:0.2}
#水印寬度
watermark.width = ${WATERMARK_WIDTH:180}
#水印高度
watermark.height = ${WATERMARK_HEIGHT:80}
#水印傾斜度數(shù),要求設(shè)置在大于等于0,小于90
watermark.angle = ${WATERMARK_ANGLE:10}
可以修改里面的配置然后重啟項目就行了,上面配置的是8012端口,所以啟動之后運行http://127.0.0.1:8012/
如上圖可以看到
如果你的項目需要接入文件預(yù)覽項目,達(dá)到對docx、excel、ppt、jpg等文件的預(yù)覽效果,那么通過在你的項目中加入下面的代碼就可以 成功實現(xiàn):
var url = 'http://127.0.0.1:8080/file/test.txt'; //要預(yù)覽文件的訪問地址
window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(url));
新增多圖片同時預(yù)覽功能,接口如下:
var fileUrl =url1+"|"+"url2";//多文件使用“|”字符隔開
window.open('http://127.0.0.1:8012/picturesPreview?urls='+encodeURIComponent(fileUrl));
于是按照描述在自己的項目里新建了一個hello.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" >
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script th:src="@{${ctx} + '/js/jquery/jquery-3.2.1.min.js'}"></script>
<script>
$(function(){
var url = 'http://127.0.0.1:8082/staticFile/test1.ppt'; //要預(yù)覽文件的訪問地址
window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(url));
})
</script>
</head>
<body>
hello a
</body>
</html>
運行這個html轉(zhuǎn)pdf可以成功
哈哈請忽略ppt內(nèi)容,隨便寫了幾個字
注意:
有可能會遇到預(yù)覽亂碼,大部分都是字體問題
大部分Linux系統(tǒng)上并沒有預(yù)裝中文字體或字體不全,需要把常用字體拷貝到Linux服務(wù)器上,具體操作如下: 將Windows下的C:\Windows\Fonts 目錄下的文件完整拷貝到Linux下的 /usr/share/fonts目錄。然后依次執(zhí)行mkfontscale 、mkfontdir 、fc-cache使字體生效
更詳細(xì)配置可以去https://blog.csdn.net/chihujiang3132/article/details/100929989
這篇博文寫的比較詳細(xì)。