node.js实现为PDF增加水印

背景

项目中有用到node做中心层,时期有个为PDF文件增加水印的需求,网上搜了不少帖子,发明有以下几点存在的题目。
1、单页PDF的话,能够用PNG图片加到PDF上,然则现实运用状况就没那末抱负,必需满足多页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相对较为简朴,input要领中我们输入源文件,stamp要领中我们输入水印文件,out要领中指定保留的途径,这里的话我们起了一个效劳,当接见3100端口的时刻就去天生我们带水印的PDF。

'use strict';

const express = require('express');
const pdftk = require('node-pdftk');
const path = require('path');
const app = express();

app.get('/', (req, res) => {
    pdftk
        .input(path.resolve(__dirname + '/../files/javascript.pdf'))
        .stamp(path.resolve(__dirname + '/../files/watermark.pdf'))
        .output(path.resolve(__dirname + '/../files/javascript_watermark.pdf'))
        .then(buffer => {
            return res.send('successful');
        })
        .catch(err => {
            console.error(err);
            return res.send('failed');
        });
});

app.listen(3100);

2、dockerfile

FROM node:7.6.0

# 建立事情目次
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY ./node_modules /usr/src/app/node_modules

# 下载安装PDFTK
RUN apt-get update
RUN apt-get install -y pdftk

# 运用PM2启动运用
CMD ["./node_modules/pm2/bin/pm2-docker", "process.yml"]

3、结果

源文件
《node.js实现为PDF增加水印》
水印文件
《node.js实现为PDF增加水印》
增加水印后
《node.js实现为PDF增加水印》

4、地点

Github堆栈地点

    原文作者:wy丶
    原文地址: https://segmentfault.com/a/1190000017257990
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞