项目场景:
需求:公司做会员卡实体卡的项目,需要扫码绑定用户,制卡商给了一个pdf文件里面包含2000张会员卡要求确认印刷,需要扫描出二维码内容并确定
问题描述
这个任务被安排到我身上(本人前端),领导让手动扫码,作为一个程序员怎么可能干这么蠢的事呢,想着写个脚本解决一下,以下为解决步骤:
1. 首先要把pdf的每一页分开
有一个很方便的网站 iLovePDF | Online PDF tools for PDF lovers可以在线把pdf转为图片
2. 把每个卡分成一个图片文件
这里我用node写了个脚本把图片平均分为五行五列,就实现了每个图片上有一个二维码
const fs=require('fs');
const sharp=require('sharp');
const filesArr=fs.readdirSync('./ilovepdf_pages-to-jpg');
for (let i=0; i<filesArr.length; i++) {
const fileName=filesArr[i];
const inputImagePath='./ilovepdf_pages-to-jpg/'+fileName;
// 设置输入图片路径和输出文件夹路径
const outputFolderPath='./output_images';
// 读取输入图片数据
const imageBuffer=fs.readFileSync(inputImagePath);
// 创建输出文件夹
if (!fs.existsSync(outputFolderPath)) {
fs.mkdirSync(outputFolderPath);
}
// 设置分割参数
const numRows=5; // 分割行数
const numCols=5; // 分割列数
const imgHandle=async () => {
const imageInfo=await sharp(imageBuffer).metadata();
const imageHeight=imageInfo.height;
const imageWidth=imageInfo.width;
const blockWidth=Math.floor(imageWidth/numCols);
const blockHeight=Math.floor(imageHeight/numRows);
// 分割图片
for (let row=0; row<numRows; row++) {