背景
节点用作项目中的中间层。在此期间,需要为PDF文件添加水印。网上搜了很多帖子,发现了以下问题。
1.对于单页PDF,可以在PDF中加入PNG图片,但实际使用情况并不是那么理想,所以必须满足多页PDF每页都加水印的效果。
2.中间想过把PDF变成图片,给图片加水印,然后再转回PDF,但是感觉中间一步太麻烦了,会面临清晰度下降的可能。
3.Python和Java有可以实现的相关方案,也有想过用node执行Python脚本对PDF进行水印。考虑到开发者是前端,如果以后需要维护,扩展可能就没那么友好了。
解决办法
在参观了Github和NPM之后,发现node-pdftk可以满足需求,但是要靠pdftk软件。进一步了解后,发现PDFTK支持linux。好吧,直接用这个。
环境
项目部署中使用Docker,所以使用docker,更容易比较契合情况;如果你平时在自己的电脑上开发,但是需要linux环境,也可以用一个linux镜像来运行一个dokcer容器,这里就不赘述了。
实现
1、app.js
API相对简单。在输入法中,我们输入源文件,在stamp方法中,我们输入水印文件,在out方法中,我们指定保存路径。这里,我们设置了一个服务,在访问端口3100时生成带有水印的PDF。
使用“严格”;const express=require(' express ');const pdf tk=require(' node-pdf tk ');const path=require(' path ');const app=express();app.get('/',(req,res)={ pdftk。输入(路径. resolve(_ dirname '/./files/javascript.pdf ')。stamp(path . resolve(_ dirname ’/./files/watermark.pdf ')。输出(路径. resolve(_ dirname '/./files/JavaScript _ watermark . pdf ')。然后(buffer={ return res.send('成功');}) .catch(err={ console . error(err));return res.send('失败');});});app . listen(3100);2、文件
FROM node:7.6.0#创建工作目录runmkdir-p/usr/src/appworkdir/usr/src/appcopy。/Node _ modules/usr/src/app/Node _ modules运行NPM设置注册表https://registry.npm.taobao.org/#下载并安装pdftk运行apt-get update运行apt-get install-y pdftk #使用PM2启动应用程序cmd[]。/node _ modules/PM2/bin/PM2-docker ',' process.yml'] 3。影响
源文件
水印文件
添加水印后
4.地址
Github仓库地址
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。