java实现文档部分预览与全预览功能

本文介绍了两种在Java项目中实现文档预览的方法:一是使用kkFileView插件,部署后通过接口生成预览链接;二是通过Java将文件转换为PDF再转为图片。详细讲解了前后端的实现方式,并强调了异步处理以优化性能。同时,还提及了文件路径的处理和依赖的PDF转换工具。
摘要由CSDN通过智能技术生成
方法一:使用kkFileView软件

这里使用的是kkFileView插件,部署在服务器上,使用其生成预览内容,官网地址是:kkFileView - 在线文件预览

下载地址为:kkFileView 4.1.0 版本发布,开源在线文件预览解决方案 - OSCHINA - 中文开源技术交流社区

以window为例,下载zip的包,解压后,在bin目录直接启动startup.bat.

访问地址:http://localhost:8012

8056d882517742e7a751e640fe3a7365.png

 上面可以直接上传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)));

4c84bcbb67e544ac91be61f562c7e97a.png

二、后端方式,直接调用上传接口,上传完,同样会生成上面对应的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);
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞流银河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值