# 前端项目日常开发场景
# 二维码图片生成
1、安装依赖包 qrcode
https://github.com/soldair/node-qrcode (opens new window) 以及依赖包 js-base64
进行 base64 加密解密 https://github.com/dankogai/js-base64 (opens new window)
# 安装 qrcode 依赖
npm install --save qrcode
# 安装 base64 依赖
npm install --save js-base64
2、在 vue 中使用,生成 svg 图片
在 template 样例如下:
<view class="padding">
<view class="bg-white padding border-radius-20">
<view class="flex justify-center margin-tb">
<view style="position:relative">
<image :src="qrcode" style="width: 440rpx;height: 440rpx;"></image>
</view>
</view>
<view class="text-center padding-bottom-sm text-lg">请将电子票出示给现场工作人员以便核销</view>
</view>
</view>
生成指定链接的二维码图片
import QRCode from 'qrcode';
import { Base64 } from 'js-base64';
export default {
data() {
return {
qrcode: '',
}
},
methods: {
async generateQR(text) {
try {
let svgString = await QRCode.toString(text, {
errorCorrectionLevel: 'M',
width: 440,
scale: 1,
margin: 1,
type: 'svg'
});
let encodeSvg = Base64.encode(svgString);
this.qrcode = `data:image/svg+xml;base64,${encodeSvg}`;
} catch (err) {
console.log(err);
}
}
},
async onLoad() {
await this.generateQR('http://ww.baidu.com');
}
}
# DOM 生成图片文件
安装 dom-to-image
依赖包
npm install dom-to-image
生成并下载图片
<view>
<view id="your_node_id_name"></view>
</view>
import domtoimage from 'dom-to-image';
export default {
methods:{
generatePDF() {
uni.showLoading({title: '下载中...',mask: true});
//TODO 自定义节点ID
const element = document.getElementById('your_node_id_name');
domtoimage.toPng(element,{ quality: 1 }).then( (dataUrl) => {
const a = document.createElement('a');
a.href = dataUrl;
//TODO 自定义下载图片的名字
a.download = 'your_image_name.png';
a.click();
uni.hideLoading();
});
}
}
}
另外也可尝试 html2canvas
依赖包
npm install --save html2canvas
<view>
<view id="your_node_id_name"></view>
</view>
import html2canvas from 'html2canvas';
export default {
methods: {
async getImg(){
const canvas = await html2canvas(document.getElementById('myid'));
// 将 canvas 转换为图片数据 URL
const imgData = canvas.toDataURL('image/png');
// 创建一个新的 a 标签
const a = document.createElement('a');
a.href = imgData;
// 设置下载的文件名,注意文件名应该包括文件扩展名
a.download = 'download.png';
// 触发 a 标签的点击事件来开始下载
a.click();
}
}
}
# 将图片转换成PDF文件
import html2canvas from 'html2canvas';
import jsPDF from 'jspdf';
export default {
methods:{
async generatePDF(){
const canvas = await html2canvas(document.getElementById('myid'));
const imgData = canvas.toDataURL('image/png');
// 创建一个新的PDF文档
const pdf = new jsPDF('p', 'mm', 'a4');
// 图片等比缩放
const width = pdf.internal.pageSize.getWidth();
const height = (canvas.height * width) / canvas.width;
// 添加图片
pdf.addImage(imgData, 'PNG', 0, 0, width, height);
// 保存PDF
pdf.save('download.pdf');
}
}
}
# DOM 生成 PDF 文件
<view>
<div ref="page1" class="page">页面 1 内容...</div>
<div ref="page2" class="page">页面 2 内容...</div>
</view>
import html2canvas from 'html2canvas';
import jsPDF from 'jspdf';
export default {
methods: {
async generatePdf() {
const pages = [this.$refs.page1, this.$refs.page2,];
// 创建一个新的PDF文档
const pdf = new jsPDF('p', 'mm', 'a4');
let position = 0;
for (const page of pages) {
// 使用 html2canvas 将 DOM 元素转换为 canvas
const canvas = await html2canvas(page);
const imgData = canvas.toDataURL('image/png');
// 获取 canvas 的尺寸
const pdfWidth = pdf.internal.pageSize.getWidth();
const pdfHeight = (canvas.height * pdfWidth) / canvas.width;
// 添加图片到 PDF,并检查是否需要分页
if (position + pdfHeight > pdf.internal.pageSize.getHeight()) {
pdf.addPage(); // 添加新页
position = 0; // 重置位置
}
// 将图片添加到 PDF 的当前位置
pdf.addImage(imgData, 'PNG', 0, position, pdfWidth, pdfHeight);
position += pdfHeight;
// 如果需要,可以在这里添加页眉、页脚或其他内容
}
// 保存 PDF
pdf.save('multi-page.pdf');
},
// 辅助函数:获取图片的尺寸
getImageProperties(imgData) {
const img = new Image();
img.src = imgData;
return new Promise((resolve, reject) => {
img.onload = () => resolve({ height: img.height, width: img.width });
img.onerror = reject;
});
},
},
};
</script>
# 前端大文件秒传,分片上传,断点续传
← Vue