安装依赖,按需引入
npm i -S pdf-lib
import { PDFDocument } from "pdf-lib";
实现步骤
1、拿到本地上传pdf文件,使用reader读取文件
2、拿到base64编码
3、通过load方法加载文件
4、通过getPages拿到代码页数
5、循环遍历每一项,使用drawImage进行添加图片
6、保存为saveAsBase64
7、拼接字符串。然后将拼接字符串上传到服务器
const inputFile = this.$refs.fileInput.files[0];
let reader = new FileReader();
reader.readAsDataURL(inputFile);
reader.onload = async (e) => {
this.imgsrc = e.target.result;
const pdfDoc = await PDFDocument.load(this.imgsrc);
const pages = pdfDoc.getPages();
const img ="https://pdf-lib.js.org/assets/small_mario.png";
const ImgCover = await fetch(img).then((res) => res.arrayBuffer());
const eleImgCover = await pdfDoc.embedPng(ImgCover);
pages.forEach((item) => {
item.drawImage(eleImgCover, {
x: item.getWidth() / 2 - eleImgCover.width / 4,
y: item.getHeight() / 2,
width: eleImgCover.width / 2,
height: eleImgCover.height / 2,
});
});
this.pdfBytes = await pdfDoc.saveAsBase64();
this.pdfBytes = "data:application/pdf;base64," + this.pdfBytes;
};
注意事项
1、水印图片必须是网络文件
2、图片必须经过两步处理为PDFImage格式才可以使用
3、pdf-lib方法返回的都是promise,需要处理才可以使用,这里用的await
预览