首頁  >  文章  >  web前端  >  node.js如何為PDF新增浮水印(程式碼範例)

node.js如何為PDF新增浮水印(程式碼範例)

不言
不言轉載
2018-12-06 15:56:434203瀏覽

這篇文章帶給大家的內容是關於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

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新增浮水印(程式碼範例)

################################################################################ #####水印檔案############################加入水印後############# ##############

以上是node.js如何為PDF新增浮水印(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除