import html2canvas from 'html2canvas';
import jsPDF from 'jspdf'
function exportDataPdf(el: HTMLElement, fileName: string) {
html2canvas(el, {
scale: 3, // 设置缩放
useCORS: true, // 允许canvas画布内 可以跨域请求外部链接图片, 允许跨域请求。
allowTaint: true,
logging: false, // 打印日志用的 可以不加默认为false
backgroundColor: '#ffffff'
}).then((canvas) => {
const contentWidth = canvas.width;
const contentHeight = canvas.height;
// 一页pdf显示html页面生成的canvas高度;a4纸的尺寸[595.28,841.89],pageHeight是应有高度吗,leftHeight是实际高度吗
const pageHeight = (contentWidth / 592.28) * 841.89;
// 未生成pdf的html页面高度
let leftHeight = contentHeight;
// 页面偏移
let position = 0;
// a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
const imgWidth = 595.28;
const imgHeight = (595.28 / contentWidth) * contentHeight;
const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;
// 添加水印
// ctx.textAlign = 'center';
// ctx.textBaseline = 'middle';
// ctx.rotate((25 * Math.PI) / 180);
ctx.font = '20px Microsoft Yahei';
// ctx.fillStyle = 'rgba(184, 184, 184, 0.8)';
// for (let i = contentWidth * -1; i < contentWidth; i += 240) {
// for (let j = contentHeight * -1; j < contentHeight; j += 100) {
// // 填充文字,x 间距, y 间距
// ctx.fillText('水印名', i, j);
// }
// }
//toDataURL()方法是返回一个包含图片展示的数据URL。
const pageData = canvas.toDataURL('image/jpeg', 1.0);
const pdf = new jsPDF("p", "pt", "a4");
if (leftHeight < pageHeight) {
// 在pdf.addImage(pageData, 'JPEG', 左,上,宽度,高度)设置在pdf中显示;
pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight);
} else {
// 分页
while (leftHeight > 0) {
pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight);
leftHeight -= pageHeight;
position -= 841.89;
// 避免添加空白页
if (leftHeight > 0) {
pdf.addPage();
}
}
}
// 可动态生成
pdf.save(`${fileName}.pdf`);
})
}
export default exportDataPdf;
在vue3+ts中下载一个pdf文件
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1、如何在vue项目里面查找某个文件夹下的所有ts文件? 2、如何在vue项目里面根据页面宽度实现响应式布局? 借...
- 写vue项目时,常常会有提供给用户下载的pdf文件,当这些文件不是从服务器上请求回来的,而是放在vue项目的静态资...
- vue中下载excel使用 一、这是第一种情况,后台链接地址返回的是一个url,这个时候我只要在导出按钮上绑定ex...
- 要求导出excel文件。当点击下载模板或下载反馈结果,axios发起后端接口请求,返回的数据获取 response...
- 可以直接copy代码使用。 第一步: 需要调用下载文件的接口,项目中的接口名_downloadTemplate,返...