思路:触发打印报告事件时,第一步需要先获取PDF流;第二部需要走打印接口。
(1)获取PDF流,拿到流先判断下;
(2)成功获取到正确的pdf流后,再走打印接口,流作为打印接口的参数
因为我们会在打印成功后再做一些其他的业务操作,所以这里将打印功能封装为一个函数并且返回promise。文章来源:https://www.toymoban.com/news/detail-547589.html
import { nodePrintFile, printPDFCustom } from "xxx.js";
//触发打印报告函数
async printSingleReport({ row }) {
//获取pdf流
let arrayBuffer = await docReportGainReportPdf({
registrationFormSoid: row.registerInfoDto.registrationFormSoid,
requestSoid: row.requestInfoDto.requestSoid,
operatorSoid: row.examInfoDto.operatorSoid,
});
//这里的arrayBuffer流要使用Blob转换
let bob = new Blob([arrayBuffer]);
// 文件大小太小说明没有获取的pdf流
if (bob.size < 20) {
this.$message({
message: `报告未出!`,
type: "warning",
});
} else {
this.node2Print(bob).then((res) => {
if (res.code === 200) {
this.$message.success("打印成功");
}
});
}
}
// 封装好的node打印函数,内部返回promise,(其中printPDFCustom是node打印接口)
node2Print(blob) {
return new Promise((resolve, reject) => {
const formData = new FormData();
formData.append("file", blob);
formData.append("fileType", "pdf");
formData.append(
"printName",
this.$parent.printReportDevice.printDeviceName
);
formData.append("type", "server");
printPDFCustom(formData).then(
(res) => {
resolve(res);
},
(error) => {
reject(error);
}
);
});
},
XXX.js
// node上传PDF文件流打印文件
export function printPDFCustom(data) {
return request({
baseURL: "http://localhost:3080/printPDFCustom",
data,
method: "post"
});
}
如果此时有另一个需求:查看报告,这个时候也需要获取PDF流,那么此时我们就可以把获取pdf流封装为一个函数A,返回bob(注意:bob是new Blob生成的实例,本质也是promise; 所以我们在调用A时要注意,A是一个异步函数。那么为了让代码从上到下同步顺序执行的话,那么在使用时就要使用await来调用,将A变为一个同步函数,即:等A执行完毕,再执行下面的代码)封装代码如下:文章来源地址https://www.toymoban.com/news/detail-547589.html
import { nodePrintFile, printPDFCustom } from "xxx.js";
// 获取PDF文件流
async getPdfBlob(row) {
let arrayBuffer = await docReportGainReportPdf({
registrationFormSoid: row.registerInfoDto.registrationFormSoid,
requestSoid: row.requestInfoDto.requestSoid,
operatorSoid: row.examInfoDto.operatorSoid,
});
//这里的arrayBuffer流要使用Blob转换
let bob = new Blob([arrayBuffer]); ---------->注意这里bob是promise
return bob;
},
//触发打印报告函数
async printSingleReport({ row }) {
//获取pdf流
let bob = await getPdfBlob(row)---------->注意这里使用了await
// 文件大小太小说明没有获取的pdf流
if (bob.size < 20) {
this.$message({
message: `报告未出!`,
type: "warning",
});
} else {
this.node2Print(bob).then((res) => {
if (res.code === 200) {
this.$message.success("打印成功");
}
});
}
}
// 封装好的node打印函数,内部返回promise,(其中printPDFCustom是node打印接口)
node2Print(blob) {
return new Promise((resolve, reject) => {
const formData = new FormData();
formData.append("file", blob);
formData.append("fileType", "pdf");
formData.append(
"printName",
this.$parent.printReportDevice.printDeviceName
);
formData.append("type", "server");
printPDFCustom(formData).then(
(res) => {
resolve(res);
},
(error) => {
reject(error);
}
);
});
},
XXX.js
// node上传PDF文件流打印文件
export function printPDFCustom(data) {
return request({
baseURL: "http://localhost:3080/printPDFCustom",
data,
method: "post"
});
}
到了这里,关于获取PDF流;打印报告的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!