node.js实现为PDF添加水印的示例代码


Posted in Javascript onDecember 05, 2018

背景

项目中有用到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

RUN npm set registry https://registry.npm.taobao.org/

# 下载安装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仓库地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
网页中实现浏览器的最大,最小化和关闭按钮
Mar 12 Javascript
对google个性主页的拖拽效果的js的完整注释[转]
Apr 10 Javascript
js和as的稳定传值问题解决
Jul 14 Javascript
JS获取键盘上任意按键的值(实例代码)
Nov 12 Javascript
jquery toolbar与网页浮动工具条具体实现代码
Jan 12 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
May 17 Javascript
微信小程序 底部导航栏目开发资料
Dec 05 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
Mar 25 jQuery
Vue父子组建的简单通信之控制开关Switch的实现
Jun 04 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
Apr 23 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
Sep 28 Javascript
Vue实现点击当前行变色
Dec 14 Vue.js
vue组件之间通信实例总结(点赞功能)
Dec 05 #Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
Dec 05 #Javascript
JS获取月的第几周和年的第几周实例代码
Dec 05 #Javascript
JavaScript实现学生在线做题计时器功能
Dec 05 #Javascript
vue-cli3搭建项目的详细步骤
Dec 05 #Javascript
详解vue中async-await的使用误区
Dec 05 #Javascript
Vue中的基础过渡动画及实现原理解析
Dec 04 #Javascript
You might like
PHP实现将HTML5中Canvas图像保存到服务器的方法
2014/11/28 PHP
在php中设置session用memcache来存储的方法总结
2016/01/14 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
javascript生成/解析dom的CDATA类型的字段的代码
2007/04/22 Javascript
javascript笔试题目附答案@20081025_jb51.net
2008/10/26 Javascript
javascript 类型判断代码分析
2010/03/28 Javascript
JQuery从头学起第三讲
2010/07/06 Javascript
JQuery开发的数独游戏代码
2010/10/29 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
回车直接实现点击某按钮的效果即触发单击事件
2014/02/27 Javascript
jquery form 隐藏的input 选择
2014/04/29 Javascript
Node.js安装教程和NPM包管理器使用详解
2014/08/16 Javascript
jQuery的基本概念与高级编程
2015/05/14 Javascript
全面解析Bootstrap表单使用方法(表单按钮)
2015/11/24 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
bootstrap table实例详解
2017/01/06 Javascript
JS使用插件cryptojs进行加密解密数据实例
2017/05/11 Javascript
基于js实现逐步显示文字输出代码实例
2020/04/02 Javascript
python写的一个文本编辑器
2014/01/23 Python
python抓取网页图片并放到指定文件夹
2014/04/24 Python
Python连接mysql数据库及简单增删改查操作示例代码
2020/08/03 Python
一篇文章搞懂python的转义字符及用法
2020/09/03 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
2020/10/29 Python
Python3.9.1中使用match方法详解
2021/02/08 Python
匈牙利墨盒和碳粉购买网站:CDRmarket
2018/04/14 全球购物
时尚、社区、科技:SEVENSTORE
2019/04/26 全球购物
社区包粽子活动方案
2014/01/21 职场文书
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
项目安全员岗位职责
2015/02/15 职场文书
商业计划书格式、范文
2019/03/21 职场文书
2019中小学生安全过暑期倡议书
2019/06/24 职场文书
html输入两个数实现加减乘除功能
2021/07/01 HTML / CSS
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫