溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何在node.js為PDF添加水印

發(fā)布時(shí)間:2020-07-09 14:46:08 來源:億速云 閱讀:280 作者:Leah 欄目:web開發(fā)

如何在node.js為PDF添加水?。亢芏嘈率謱Υ瞬皇呛芮宄?,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

項(xiàng)目中有用到node做中間層,期間有個(gè)為PDF文件添加水印的需求,網(wǎng)上搜了不少帖子,發(fā)現(xiàn)有以下幾點(diǎn)存在的問題。

1、單頁P(yáng)DF的話,可以用PNG圖片加到PDF上,但是實(shí)際使用情況就沒那么理想,必須滿足多頁P(yáng)DF每頁都加上水印的效果方可。
2、中間想過,把PDF轉(zhuǎn)成圖片,圖片加上水印后再轉(zhuǎn)回PDF,但是感覺中間步驟太麻煩,而且會面臨清晰度下降的可能。
3、Python、Java有相關(guān)方案,可以實(shí)現(xiàn),有想過用node去執(zhí)行Python腳本去為PDF加水印,考慮到開發(fā)人員都是前端、如果以后需要維護(hù),擴(kuò)展可能就不是那么友好了。

解決方案

逛了Github和NPM,發(fā)現(xiàn)node-pdftk可以滿足需求,不過得依賴PDFTK這個(gè)軟件,進(jìn)一步了解,發(fā)現(xiàn)PDFTK支持linux,好,直接用這個(gè)開搞。

環(huán)境

項(xiàng)目部署是用了docker,那就用docker來吧,比較貼合情況也省事點(diǎn);如果平時(shí)在自己電腦上開發(fā),但需要linux環(huán)境的話練手或者模擬服務(wù)器環(huán)境的話,大家也可以用一個(gè)linux鏡像運(yùn)行一個(gè)dokcer容器,這里就不贅述了。

實(shí)現(xiàn)

1、app.js

API相對較為簡單,input方法中我們輸入源文件,stamp方法中我們輸入水印文件,out方法中指定保存的路徑,這里的話我們起了一個(gè)服務(wù),當(dāng)訪問3100端口的時(shí)候就去生成我們帶水印的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

# 創(chuàng)建工作目錄
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啟動應(yīng)用
CMD ["./node_modules/pm2/bin/pm2-docker", "process.yml"]

3、效果

源文件

如何在node.js為PDF添加水印

水印文件

如何在node.js為PDF添加水印

添加水印后

如何在node.js為PDF添加水印

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI