如何在node.js為PDF添加水???很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)專(zhuān)業(yè)提供服務(wù)器托管服務(wù),為用戶(hù)提供五星數(shù)據(jù)中心、電信、雙線接入解決方案,用戶(hù)可自行在線購(gòu)買(mǎi)服務(wù)器托管服務(wù),并享受7*24小時(shí)金牌售后服務(wù)。項(xiàng)目中有用到node做中間層,期間有個(gè)為PDF文件添加水印的需求,網(wǎng)上搜了不少帖子,發(fā)現(xiàn)有以下幾點(diǎn)存在的問(wèn)題。
1、單頁(yè)P(yáng)DF的話(huà),可以用PNG圖片加到PDF上,但是實(shí)際使用情況就沒(méi)那么理想,必須滿(mǎn)足多頁(yè)P(yáng)DF每頁(yè)都加上水印的效果方可。
2、中間想過(guò),把PDF轉(zhuǎn)成圖片,圖片加上水印后再轉(zhuǎn)回PDF,但是感覺(jué)中間步驟太麻煩,而且會(huì)面臨清晰度下降的可能。
3、Python、Java有相關(guān)方案,可以實(shí)現(xiàn),有想過(guò)用node去執(zhí)行Python腳本去為PDF加水印,考慮到開(kāi)發(fā)人員都是前端、如果以后需要維護(hù),擴(kuò)展可能就不是那么友好了。
解決方案
逛了Github和NPM,發(fā)現(xiàn)node-pdftk可以滿(mǎn)足需求,不過(guò)得依賴(lài)PDFTK這個(gè)軟件,進(jìn)一步了解,發(fā)現(xiàn)PDFTK支持linux,好,直接用這個(gè)開(kāi)搞。
環(huán)境
項(xiàng)目部署是用了docker,那就用docker來(lái)吧,比較貼合情況也省事點(diǎn);如果平時(shí)在自己電腦上開(kāi)發(fā),但需要linux環(huán)境的話(huà)練手或者模擬服務(wù)器環(huán)境的話(huà),大家也可以用一個(gè)linux鏡像運(yùn)行一個(gè)dokcer容器,這里就不贅述了。
實(shí)現(xiàn)
1、app.js
API相對(duì)較為簡(jiǎn)單,input方法中我們輸入源文件,stamp方法中我們輸入水印文件,out方法中指定保存的路徑,這里的話(huà)我們起了一個(gè)服務(wù),當(dāng)訪問(wèn)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啟動(dòng)應(yīng)用 CMD ["./node_modules/pm2/bin/pm2-docker", "process.yml"]3、效果
源文件
水印文件
添加水印后
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站制作公司行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)建站的支持。