代码拉取完成,页面将自动刷新
const { degrees, PDFDocument, rgb } = require('pdf-lib')
const fontkit = require('@pdf-lib/fontkit')
const path = require('node:path')
const fs = require('node:fs')
const FontPath = path.join(process.env.windir, 'fonts')
module.exports.add_mark = async function( arg ){
const pdfDoc = await PDFDocument.load( fs.readFileSync(arg.file))
//3. 自定义字体,如不需要使用自定义字体可以将这一段全部注释掉,也不用下载自定义字体文件和自定义字体工具fontkit
//将自己下载好的.ttf文件放置项目中,然后访问文件路径
const fonturl = path.join(FontPath, arg.font)
const fontBytes = fs.readFileSync(fonturl)
// 自定义字体挂载、fontkit为自定义字体注册工具
pdfDoc.registerFontkit(fontkit)
const customFont = await pdfDoc.embedFont(fontBytes,{subset:true})
// 内置字体(不支持中文), 如果水印中不包含中文可直接用内置字体,本次这里没用到内置字体
// const helveticaFont = await pdfDoc.embedFont(StandardFonts.Helvetica)
//4. 添加水印
//为每页pdf添加文字水印
const pages = pdfDoc.getPages()
for (let i = 0; i < pages.length; i++) {
const noPage = pages[i]
const { width, height } = noPage.getSize()
if( arg.style ){ //居中
noPage.drawText(arg.txt, {
x: width / 2,
y: height / 2,
size: arg.size * 1,
font: customFont, //这里使用的是自定义字体
//使用上面定义好的内置字体 font:helveticaFont
color: rgb(arg.color_ar[0]/255, arg.color_ar[1]/255, arg.color_ar[2]/255),
rotate: degrees(arg.dg * 1),
opacity: arg.color_ar[3] * 1,
})
}else {
for (let i = 0; i < arg.h * 1; i++) {
for (let j = 0; j < arg.l * 1; j++) {
noPage.drawText(arg.txt, {
x: arg.x * 1 + (width / arg.l) * j,
y: arg.y * 1 + (height / arg.h) * i,
size: arg.size * 1,
font: customFont, //这里使用的是自定义字体
//使用上面定义好的内置字体 font:helveticaFont
color: rgb(arg.color_ar[0]/255, arg.color_ar[1]/255, arg.color_ar[2]/255),
rotate: degrees(arg.dg * 1),
opacity: arg.color_ar[3] * 1,
})
}
}
}
}
//5. 保存pdf文件的unit64Arrary文件流
const pdfBytes = await pdfDoc.save();
try {
fs.accessSync(arg.sfile)
return -1
} catch (error) {
fs.writeFileSync(arg.sfile, pdfBytes)
return 1
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。