node.js一些工具方法汇总

1.读取excel
const fs = require('fs');
const XLSX = require('xlsx');
const workBook = XLSX.read(fs.readFileSync('xxx.xlsx'), {
	type: 'buffer'
})
const sheetName1 = 'xxx'
const sheet = workBook.Sheets[sheetName1] // 读取特定单张表
// 循环遍历多张表 
// workBook.SheetNames.forEach((sheetName) => {})
const range = { s: { c: 0, r: 0 }, e: { c: 1, r: 223 } };
const data = XLSX.utils.sheet_to_json(sheet, { range })
fs.writeFileSync('data1.json', JSON.stringify(data, null, 2))
2.导出excel

方案1:xlsx.js

const XLSX = require('xlsx')
const newData = [
	['Name', 'Age', 'Gender'],
	['Amy', 25, 'Female'],
	['Bob', 30, 'Male'],
	['Kitty', 16, 'Female']
];
const workBook = XLSX.utils.book_new(); // 新建一个excel
const workSheet = XLSX.utils.aoa_to_sheet(newData); // 新建一张表
XLSX.utils.book_append_sheet(workBook, workSheet, 'Sheet1'); // 将新建的表插入Sheet1
const fileName = 'output.xlsx';
XLSX.writeFile(workBook, fileName); // 导出生成excel

方案2:exceljs

3. docx,xlsx等格式转pdf

方案:先windows安装LibreOffice7.0
使用demo

const toPdf = require('office-to-pdf')
function wordXlsxToPdf() {
	let wordFile = './aaa.docx';
	let excelFile = './bbb.xlsx';
	let pptFile = './ccc.pptx';
	return fs.readFile(wordFile, (err, data) => {
		if (err) {
			console.log(err)
		} else {
			toPdf(data).then(pdfBuffer => {
				fs.readFileSync('./生成的.pdf', pdfBuffer)
			}, err => {
				console.log('转换失败')
			})
		}
	})
}
4.pdf转成图片

方案1:利用pdfjs-dist和canvas

const Canvas = require('canvas');
const pdfjsLib  = require('pdfjs-dist/build/pdf.js');
const assert = require('assert').strict;

class NodeCanvasFactory {
	create(width, height) {
		assert(width > 0 && height > 0, "Invalid canvas size");
		const convas = Canvas.createCanvas(width, height);
		const context = canvas.getContext('2d');
		return { canvas, context };
	}
	reset(canvasAndContext, width, height) {
		assert(canvasAndContext.canvas, "Canvas is not specified")
		assert(width > 0 && height > 0, "Invalid canvas size");
		canvasAndContext.canvas.width = width;
		canvasAndContext.canvas.height = height;
	}
	destroy(canvasAndContext) {
		assert(canvasAndContext.canvas, "Canvas is not specified.");
		canvasAndContext.canvas.width = 0;
		canvasAndContext.canvas.height = 0;
		canvasAndContext.context = null;
	}
}

const CMAP_URL = './node_modules/pdfjs-dist/cmaps/';
const CMAP_PACKED = true;
const defaultPdfPath = './xxxx.pdf';

const pdfToImage = async (pdfPath) => {
	const data = new Uint8Array(fs.readFileSync(pdfPath));
	const loadingTask = pdfjsLib.getDocument({
		data,
		cMapUrl: CMAP_URL,
		cMapPacked: CMAP_PACKED
	})
	const doc = await loadingTask.promise;
	const totalNums = doc.numPages;
	let pageNum = 1;
	covertPage(doc, totalNums, pageNum);
}

function covertPage(doc, totalNums, pageNum) {
	doc.getPage(pageNum).then((page) => {
		const viewport = page.getViewport({ scale: 4.0 });
		const canvasFactory = new NodeCanvasFactory();
		const canvasAndContext = canvasFactory.create(viewport.width, viewport.height);
		const renderContext = {
			canvasContext: canvasAndContext.context,
			viewport,
			canvasFactory
		}
		page.render(renderContext).then(res => {
			const image = canvasAndContext.canvas.toBuffer();
			fs.writeFile(`./output/pic-${pageNum}.png`, image, (error) => {
				if (error) { conslole.log(error) 
				} else {
					console.log(`Finished coverting ${pageNum} page of PDF file to PNG`)
				}
			})
			if (pageNum < totalNums) {
				covertPage(doc, totalNums, pageNum + 1)
			} else {
				console.log('finished');
			}
		})
	}
}

pdfToImage(defaultPdfPath); // 执行转换

方案2:利用 pdf-image

5. 读取xlsx内容

利用mammoth

const mammoth = require('mammoth')
const fs = require('fs')
const path = require('path')
const filePath = path.join(__dirname, 'document.docx')
// 方法1:获取html格式
mammoth.covertToHtml({ path: 'document.docx' })
	.then(result => {
		console.log(result)
		const html = result.value
		const message = result.messages
	})
// 方法2:读取文本内容
fs.readFile(filePath, (err, data) => {
	if (err) {
		console.log(err)
		return
	}
	mammoth.extractRawText({ buffer: data })
		.then(result => {
			const metadata = result.metadata;
			console.log(result.value)
		})
		.catch(err => {
			console.log(err)
		})
})
6. 填充xlsx

利用docxtemplater

const PizZip = require('pizzip')
const Docxtemplater = require('docxtemplater')
const fs = require('fs)
const path = require('path')

const content = fs.readFileSync(path.resolve(__dirname, 'input.docx'), 'binary')
const zip = new PizZip(content)

const doc = new Docxtemplater(zip, {
	paragraphLoop: true,
	linebreaks: true
})
doc.render({
	key_1: 'xxx',
	key_2: 'xxx'
})
const buf = doc.getZip().generate({
	type: 'nodebuffer',
	compression: 'DEFLATE'
})
fs.writeFileSync(path.join(__dirname, 'output.docx'), buff)
7.发送邮件

方案:使用nodemailder

const nodemailer = require('nodemailer')
const fs = require('fs')
const htmlstream = fs.createReadStream('./content.html')

const transporter = nodemailer.createTransport({
	host: 'smtp.126.com', // 域名,如果是gmail,则为 "smtp.gmail.com"
	port: 465,
	secure: true,
	auth: {
		user: 'sendUser@126.com', // 发送者邮箱
		pass: 'xxxx' // 授权码,非邮箱登录密码
	}
})

// 邮件配置
const mailOption = {
	from: 'sendUser@126.com, // 或者 '某某某 sendUser@server.com'
	to: '2342342@qq.com,3443890@qq.com', // 多个收件邮箱名以逗号分隔,或者数组
	cc: '', // 抄送,格式同to
	bcc: '', // 密码抄送
	subject: '这是邮件主题', // 主题
	text: '这里是一段文字', //
	html: htmlstream, // html格式的邮件内容
	attachments: [ // 附件
		{ filename: '附件.txt', content: 'hello world' },
	] 
}

transporter.sendMail(mailOption, (err, info) => {
	if (err) {
		console.log(err)
	} else {
		console.log('info:', info) // 发送结果相关
	}
})
8.图片裁剪

方案:使用sharp

const sharp = require('sharp');
sharp('input.jpg')
	.resize(320, 200)
	.toFile('output.webp', (err, info) => {});
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值