一、完整的开发部署流程介绍
二、后端Excel转换接口服务开发
2.1 引入依赖包
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.xls.free</artifactId>
<version>5.1.0</version>
<scope>provided</scope>
</dependency>
<repositories>
<repository>
<id>com.e-iceblue</id>
<url>http://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
2.2 编写Excel转换为工具类
package com.spring.demo.springbootdemo.utils;
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ExcelUtils {
/**
*
* @param stream
* @param fileNameOld
* @param type 1 图片、 2 pdf
* @return
*/
public static String exceltofileByFile(InputStream stream, String fileNameOld, String type) {
Date currentDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss_SSS"); // 指定日期格式,包含毫秒
String formattedDate = sdf.format(currentDate);
String pathPath = "/mnt/files/" + formattedDate + "_" + fileNameOld;
// 4、最终生成的doc所在的目录,默认是和引入的一个地方,开源时对外提供下载的接口。
saveInputStreamToFile(stream, pathPath);
// 4、最终生成的doc所在的目录,默认是和引入的一个地方,开源时对外提供下载的接口。
String resultSux = ".png";
if(type.equals("2")){
resultSux = ".pdf";
}
String fileName = "resultbyfile" + formattedDate + resultSux;
String desPath = "/mnt/files/" + fileName; // 构造文件名
//加载Excel工作表
Workbook wb = new Workbook();
wb.loadFromFile(pathPath);
//获取工作表
Worksheet sheet = wb.getWorksheets().get(0);
//调用方法将Excel工作表保存为图片
if(type.equals("1")){
sheet.saveToImage(desPath);
}
else if(type.equals("2")){
sheet.saveToPdf(desPath);
}
return fileName;
}
/**
* 保存原始的pdf文件为了方便转换
*
* @param inputStream
* @param filePath
*/
public static void saveInputStreamToFile(InputStream inputStream, String filePath) {
// 使用try-with-resources自动关闭流
try (FileOutputStream outputStream = new FileOutputStream(new File(filePath))) {
byte[] buffer = new byte[1024];
int length;
// 读取输入流并写入到输出流
while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
System.out.println("文件保存成功!");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.3 新建控制器 ExcelToFileApi.java
package com.spring.demo.springbootdemo.control;
import com.spring.demo.springbootdemo.utils.ExcelUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
/**
* Excel 转换 API
*/
@RestController
@RequestMapping("ExcelAPI")
public class ExcelToFileApi {
/**
* Excel 转换为图片、html、pdf 使用文件的方式
* @param uploadFile
* @return
* @throws IOException
*/
@PostMapping("excelToFile")
public String excelToFile(@RequestPart("file") MultipartFile uploadFile,@RequestParam String type) throws IOException {
if (null == uploadFile) {
return null;
}
// BMP、JPG、JPEG、PNG、GIF
String fileName = uploadFile.getOriginalFilename().toLowerCase();
if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) {
return null;
}
String result= ExcelUtils.exceltofileByFile(uploadFile.getInputStream(),fileName,type);
// 返回响应实体
return result;
}
}
三、购买服务器
四、申请域名、SSL证书
五、后端接口配置SSL证书
# 依次执行命令
sudo yum install -y epel-release
sudo yum install -y nginx
systemctl status nginx.service
六、微信小程序端界面开发
<view class="selectSection">
<text class="textmag">上传方式:</text>
<radio-group bindchange="radioChange" class="radio-group">
<label class="radio" wx:for="{{direction}}" wx:key="i">
<icon class="radioIcon {{item.checked?'actIcon':''}}"></icon>
<radio checked="{{item.checked}}" value="{{item.name}}"></radio>{{item.value}}
</label>
</radio-group>
</view>
<view class="selectSection">
<text class="textmag">转换类型:</text>
<radio-group bindchange="radioChangeNew" class="radio-group">
<label class="radio" wx:for="{{changeList}}" wx:key="i">
<icon class="radioIcon {{item.checked?'actIcon':''}}"></icon>
<radio checked="{{item.checked}}" value="{{item.name}}"></radio>{{item.value}}
</label>
</radio-group>
</view>
<view class="container">
<view wx:if="{{directionType==1}}" class="item"> <button style="width: 120px;" class="butss" bindtap="chooseFile">选择Excel</button></view>
<view wx:if="{{directionType==2}}" class="item"> <button style="width: 120px;" class="butss" bindtap="chooseFileNew">生成文件</button></view>
<view class="item"> <button style="width: 90px;" class="butss" bindtap="saveTap">下载</button></view>
<view class="item"> <button style="width: 90px;" class="butss" bindtap="clearTap">清空</button></view>
</view>
<view style="padding: 20px;">
<span style="color: red;font-size: 12px;">温馨提示:转换Excel第一个Sheet为图片、PDF、Html文件</span>
</view>
<view>
<textarea auto-height="true" bindinput="handleInput" class="input-content" value="{{uploadUrl}}" placeholder="请输入Excel文件url" wx:if="{{directionType==2}}"></textarea>
</view>
<view class="instruction" style="padding: 20px;">
<!-- <text>上传的pdf文件:{{pdfPath}}</text> -->
<span style="color: black;">结果文件:{{data}}</span>
</view>
// 选择文件按钮事件
chooseFileNew: function () {
var that = this;
wx.showLoading({
title: '正在处理中,请稍后...',
});
if (!that.data.uploadUrl) {
wx.showToast({
title: '请先输入pdf的网址',
icon: 'none',
duration: 2000
});
} else {
wx.request({
url: '后台接口url',
method: 'POST', // 请求方法设置为POST
data: {},
name: 'file',
success: function (res) {
if (res.statusCode == "200") {
console.log(res.data);
debugger
that.setData({
imageUrl: res.data,
data: res.data
});
wx.showToast({
title: '转换成功',
icon: 'success',
duration: 2000
});
} else {
wx.showToast({
title: '转换失败,请联系管理员',
icon: 'none',
duration: 2000
});
}
},
fail: function (res) {
wx.showToast({
title: '上传失败',
icon: 'none',
duration: 2000
});
}
});
}
},
// 下载按钮事件
saveTap: function () {
var obj=this.data;
if (obj.imageUrl) {
wx.downloadFile({
url: obj.imageUrl,
success: function (res) {
if (res.statusCode === 200) {
var filePath = res.tempFilePath;
console.log(res.tempFilePath);
// 图片保存
if(obj.changeType===1){
wx.saveImageToPhotosAlbum({
filePath: filePath,
success: function (res) {
wx.showToast({
title: '保存成功',
icon: 'success',
duration: 2000
});
},
fail: function (err) {
console.error(err);
wx.showToast({
title: '保存失败',
icon: 'none',
duration: 2000
});
}
});
}
// pdf 方式
else {
wx.openDocument({
filePath: filePath,
showMenu: true,
success: function (res) {
console.log('打开文档成功')
},
fail: function (res) {
console.log('打开文档失败', res)
}
})}
};
}
}, );
} else {
wx.showToast({
title: '请先上传pdf文件,转换成功后再下载',
icon: 'none',
duration: 2000
});
}
},
七、微信小程序部署上线
八、总结
小明工作助手新增pdf转word、pdf转图片功能,欢迎免费体验
历史相关
优秀干货作者推荐
小编十多年工作经验积累的电脑软件分享给大家
QQ软件技术分享群:821205778【小明软件分享技术交流群】
CSDN:https://blog.csdn.net/xishining
个人博客网站:https://programmerblog.xyz
往期推荐