都没问题,有一点不一样的是 .outputPdf().then(pdf=>{ //上传签到表至后台 并保存流程变量保存返回的路径 upload(pdf); });
时间: 2024-03-16 14:45:22 浏览: 90
小程序预览PDF文件插件Pdf.js
问题可能出在`html2pdf`库中的`.outputPdf()`方法上。该方法默认会将PDF输出到当前页面,而不是返回一个文件流。因此,后台无法正确地接收到文件。
你可以尝试将这一行代码修改为:`.output('datauristring')`,以返回一个Base64编码的文件流。然后,将该文件流上传至后台。
下面是一个修改后的示例代码:
```javascript
import html2pdf from 'html2pdf.js'
function convertToPdf() {
const element = document.getElementById('pdf-content'); // 获取需要转换为PDF的HTML元素
html2pdf()
.from(element)
.output('datauristring') // 输出为Base64编码的文件流
.then(pdf => {
// 将Base64编码的文件流上传至后台
upload(pdf);
})
}
function upload(pdf) {
const formData = new FormData();
formData.append('pdf', pdf);
fetch('/upload-pdf', {
method: 'POST',
body: formData,
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));
}
```
在这个例子中,使用`.output('datauristring')`方法将PDF文件输出为Base64编码的文件流,并将该文件流上传至后台。
如果后台需要接收二进制文件流,可以将Base64编码的文件流转换为二进制文件流,例如:
```javascript
function upload(pdf) {
// 将Base64编码的文件流转换为二进制文件流
const byteString = atob(pdf.split(',')[1]);
const mimeString = pdf.split(',')[0].split(':')[1].split(';')[0];
const ab = new ArrayBuffer(byteString.length);
const ia = new Uint8Array(ab);
for (let i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
const blob = new Blob([ab], { type: mimeString });
const formData = new FormData();
formData.append('pdf', blob);
fetch('/upload-pdf', {
method: 'POST',
body: formData,
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));
}
```
在这个例子中,使用`atob()`方法将Base64编码的文件流转换为二进制文件流,然后将该二进制文件流作为Blob对象上传至后台。
阅读全文