import html2canvas from 'html2canvas';
import jsPDF from 'jspdf';
import caseApi from "@/api/lawenforcement/Case.js";
import {ElMessage} from "element-plus";
/**
* 用Vue组件设计HTML模板
* 将HTML转换为Canvas
* 将Canvas插入PDF并下载
* @param pdfTemplate 导出区域div ref
* @param fileName 导出的pdf文件名
* @returns {Promise}
*/
const exportPDF = async (pdfTemplate,fileName) => {
try {
const element = pdfTemplate.value;
const canvas = await html2canvas(element, { scale: 2, onclone: (clonedDoc) => {
clonedDoc.querySelectorAll('*').forEach(el => {
el.style.transform = 'translateZ(0)'; // 强制 GPU 渲染
});
} }); // 提高分辨率
const imgData = canvas.toDataURL('image/jpeg', 0.8);
const pdf = new jsPDF('p', 'mm', 'a4');
const pageWidth = pdf.internal.pageSize.getWidth();
const pageHeight = pdf.internal.pageSize.getHeight();
const imgRatio = canvas.width / canvas.height;
const imgHeight = pageWidth / imgRatio;
// 添加图片到PDF(自动分页)
let heightLeft = imgHeight;
let position = 0;
pdf.addImage(imgData, 'JPEG', 0, position, pageWidth, imgHeight);
heightLeft -= pageHeight;
while (heightLeft >= 0) {
position = heightLeft - imgHeight;
pdf.addPage();
pdf.addImage(imgData, 'JPEG', 0, position, pageWidth, imgHeight);
heightLeft -= pageHeight;
}
// 返回 Promise 包装的导出结果
return new Promise((resolve, reject) => {
try {
pdf.save(fileName);
// 假设浏览器在 500ms 内触发下载(根据实际情况调整时间)
setTimeout(() => {
resolve({ success: true, message: 'PDF导出成功!' });
}, 500);
} catch (error) {
reject({ success: false, message: '导出失败:' + error.message });
}
});
} catch (error) {
return Promise.reject({ success: false, message: '生成PDF出错:' + error.message });
}
}
export { exportPDF }