自己以前折腾过java通过openOffice实现word,excel,ppt转成pdf实现在线预览,基本上满足需求,但是只满足了大部分格式,最近发现了kkFileView这个开源项目,他们把我上面折腾的那些基于openOffice实现在线预览的这个功能用springboot很好的实现了一遍,只要拉下来,配置一下,启动好就可以调服务用了,高效省事,源代码也可以拉下来,根据自己的需求去定制,不过封装好的就已经够用了。

环境要求

Java: 1.8+

OpenOffice(Windows下已内置,CentOS或Ubuntu下会自动下载安装,MacOS下需要自行安装)

最新版本下载下来解压之后(以linux版本为例),是如下的文件结构

kkFileReview解压目录结构

进入bin目录

kkFileReviewbin目录

在终端root用户运行./startup.sh启动应用,如果系统没有安装openoffice会自己去下载安装,安装完之后会启动这个springboot项目,./shutdown.sh是停止,跟tomcat的结构差不多,在config文件夹下有application.properties配置文件,里面可以配置springboot项目的各种参数,里面都是有中文注释的,比如下面这样:

#######################################不可动态配置,需要重启生效#######################################

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

#文件资源路径(默认为打包根路径下的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}

#缓存实现类型,不配默认为内嵌RocksDB(type = default)实现,可配置为redis(type = redis)实现(需要配置spring.redisson.address等参数)和 JDK 内置对象实现(type = jdk),

cache.type = ${KK_CACHE_TYPE:jdk}

#redis连接,只有当cache.type = redis时才有用

spring.redisson.address = ${KK_SPRING_REDISSON_ADDRESS:127.0.0.1:6379}

spring.redisson.password = ${KK_SPRING_REDISSON_PASSWORD:123456}

#缓存是否自动清理 true 为开启,注释掉或其他值都为关闭

cache.clean.enabled = ${KK_CACHE_CLEAN_ENABLED:true}

#缓存自动清理时间,cache.clean.enabled = true时才有用,cron表达式,基于Quartz cron

cache.clean.cron = ${KK_CACHE_CLEAN_CRON:0 0 3 * * ?}

#######################################可在运行时动态配置#######################################

#提供预览服务的地址,默认从请求url读,如果使用nginx等反向代理,需要手动设置

#base.url = https://file.keking.cn

base.url = ${KK_BASE_URL:default}

#信任站点,多个用','隔开,设置了之后,会限制只能预览来自信任站点列表的文件,默认不限制

#trust.host = file.keking.cn,kkfileview.keking.cn

trust.host = ${KK_TRUST_HOST:default}

#是否启用缓存

cache.enabled = ${KK_CACHE_ENABLED:false}

#文本类型,默认如下,可自定义添加

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}

#多媒体类型,默认如下,可自定义添加

media = ${KK_MEDIA:mp3,wav,mp4,flv}

#office类型文档(word ppt)样式,默认为图片(image),可配置为pdf(预览时也有按钮切换)

office.preview.type = ${KK_OFFICE_PREVIEW_TYPE:image}

#是否禁止下载转换生成的pdf文件

pdf.download.disable = ${KK_PDF_DOWNLOAD_DISABLE:false}

#预览源为FTP时 FTP用户名,可在ftp url后面加参数ftp.username=ftpuser指定,不指定默认用配置的

ftp.username = ${KK_FTP_USERNAME:ftpuser}

#预览源为FTP时 FTP密码,可在ftp url后面加参数ftp.password=123456指定,不指定默认用配置的

ftp.password = ${KK_FTP_PASSWORD:123456}

#预览源为FTP时, FTP连接默认ControlEncoding(根据FTP服务器操作系统选择,Linux一般为UTF-8,Windows一般为GBK),可在ftp url后面加参数ftp.control.encoding=UTF-8指定,不指定默认用配置的

ftp.control.encoding = ${KK_FTP_CONTROL_ENCODING:UTF-8}

#水印内容

#例:watermark.txt = ${WATERMARK_TXT:凯京科技内部文件,严禁外泄}

#如需取消水印,内容设置为空即可,例: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}

#水印透明度,要求设置在大于等于0.005,小于1

watermark.alpha = ${WATERMARK_ALPHA:0.2}

#水印宽度

watermark.width = ${WATERMARK_WIDTH:180}

#水印高度

watermark.height = ${WATERMARK_HEIGHT:80}

#水印倾斜度数,要求设置在大于等于0,小于90

watermark.angle = ${WATERMARK_ANGLE:10}

可以修改里面的配置然后重启项目就行了,上面配置的是8012端口,所以启动之后运行http://127.0.0.1:8012/

kkFileReviewindex页面

如上图可以看到

如果你的项目需要接入文件预览项目,达到对docx、excel、ppt、jpg等文件的预览效果,那么通过在你的项目中加入下面的代码就可以 成功实现:

var url = 'http://127.0.0.1:8080/file/test.txt'; //要预览文件的访问地址

window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(url));

新增多图片同时预览功能,接口如下:

var fileUrl =url1+"|"+"url2";//多文件使用“|”字符隔开

window.open('http://127.0.0.1:8012/picturesPreview?urls='+encodeURIComponent(fileUrl));

于是按照描述在自己的项目里新建了一个hello.html

Insert title here

$(function(){

var url = 'http://127.0.0.1:8082/staticFile/test1.ppt'; //要预览文件的访问地址

window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(url));

})

hello a

运行这个html转pdf可以成功

testppt预览效果

哈哈请忽略ppt内容,随便写了几个字

注意:

有可能会遇到预览乱码,大部分都是字体问题

大部分Linux系统上并没有预装中文字体或字体不全,需要把常用字体拷贝到Linux服务器上,具体操作如下: 将Windows下的C:\Windows\Fonts 目录下的文件完整拷贝到Linux下的 /usr/share/fonts目录。然后依次执行mkfontscale 、mkfontdir 、fc-cache使字体生效

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐