方法一:使用kkFileView软件
这里使用的是kkFileView插件,部署在服务器上,使用其生成预览内容,官网地址是:kkFileView - 在线文件预览
下载地址为:kkFileView 4.1.0 版本发布,开源在线文件预览解决方案 - OSCHINA - 中文开源技术交流社区
以window为例,下载zip的包,解压后,在bin目录直接启动startup.bat.
访问地址:http://localhost:8012
上面可以直接上传http地址,获取本地文件,然后预览出一个地址
http://localhost:8012/onlinePreview?url=aHR0cDovL2xvY2FsaG9zdDo4MDEyL2RlbW8v6aG555uuLmRvY3g%3D
以上是在kkView服务上预览的内容,如果要应用到springboot项目中,这里总结了三个方法:
一、前端方式:
1.vue前端的话,前端安装base64.min.js编码;就在kkView目录下的file目录下生成文档对应的pdf,源文件及图片目录了
##在vue项目引入base64
const Base64 = require('js-base64').Base64
##编码
var url = 'http://127.0.0.1:8080/file/test.txt'; //要预览文件的访问地址
window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(Base64.encode(url)));
二、后端方式,直接调用上传接口,上传完,同样会生成上面对应的pdf文件和图片。注意上传文件的地址不要带中文。
地址:http://localhost:8012/uploadFile
参数:Multifile
方法:post
三、后端方式,使用预览转码队列。注意文件地址要以/,不要是\
地址:http://localhost:8012/addTask
参数:url=http文件地址
方法:GET
上面三种方式都可以生成文件,为了不盲目等待,我们使用异步方式后台执行后端的方法。
生成的图片目录下有多张图片,部分预览取第一张,如果只有一张图片,截图图片的一部分取。
全预览则取其pdf文件。
由于上面要预览的文件都在kkView的file目录下,不能直接打开调用。我们先保存到自己服务器,然后映射后用自己服务器地址访问部分预览和全预览的内容
方法二:使用java将文件转换成PDF,再将PDF转换成图片
引入依赖:
<dependency>
<groupId>com.luhuiguo</groupId>
<artifactId>aspose-cells</artifactId>
<version>22.10</version>
</dependency>
<dependency>
<groupId>com.luhuiguo</groupId>
<artifactId>aspose-words</artifactId>
<version>23.1</version>
</dependency>
<dependency>
<groupId>com.luhuiguo</groupId>
<artifactId>aspose-pdf</artifactId>
<version>23.1</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
PDF转换工具类:
package com.xx.utils;
import com.aspose.cells.PdfSaveOptions;
import com.aspose.cells.Workbook;
import com.aspose.pdf.PageCollection;
import com.aspose.pdf.devices.JpegDevice;
import com.aspose.words.License;
import com.aspose.words.SaveFormat;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
import org.apache.poi.hslf.usermodel.*;
import org.apache.poi.xslf.usermodel.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.List;
public class PdfConverUtil {
/**
*
* @param inputStream 源文件输入流
* @param outputStream PDF文件输入流
* @return
*/
public static boolean imgToPdf(InputStream inputStream, OutputStream outputStream){
Document document = null;
try{
//创建文档,三个字pdf页面的大小 A2-A9,个人觉得A3最合适
document = new Document(PageSize.A3,20,20,20,20);
//新建PDF文档,具体逻辑看.getInstance方法
PdfWriter.getInstance(document,outputStream);
document.open();
document.newPage();
//将文件流转换为字节流,便于格式转换
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);