Cómo agregar una marca de agua a un PDF con node.js (ejemplo de código)
Project Node se utiliza como capa intermedia. Hay un problema al agregar marcas de agua a los archivos PDF. Busqué algunas publicaciones en Internet y encontré los siguientes problemas.
1. Se puede agregar un PDF de una sola página al PDF usando imágenes PNG, pero el uso real no es tan ideal. Debe cumplir con el efecto de agregar una marca de agua a cada página de una página múltiple. PDF.
2. Pensé en convertir el PDF en una imagen, agregar una marca de agua a la imagen y luego volver a convertirlo en un PDF, pero sentí que este paso intermedio era demasiado problemático y enfrentaría la posibilidad de una pérdida de claridad.
3. Python y Java tienen programas relacionados que se pueden implementar. He pensado en usar node para ejecutar scripts de Python para agregar marcas de agua a los archivos PDF. necesario en el futuro, es posible que no sea tan amigable.
Solución
Busqué en Github y NPM y descubrí que node-pdftk puede satisfacer las necesidades, pero tiene que depender del software PDFTK. Después de aprender más, descubrí que PDFTK es compatible. Linux, lo cual es bueno. Puedo usarlo directamente.
Entorno
El proyecto se implementa usando Docker, luego use Docker, que es más adecuado para la situación real y le ahorra problemas si normalmente desarrolla en su propia computadora, pero necesita hacerlo; usar linux Puede practicar o simular el entorno del servidor en el entorno, y también puede usar la imagen de Linux para ejecutar el contenedor dokcer, que no entraré en detalles aquí.
Implementación
1. app.js
La API es relativamente simple. En el método de entrada, ingresamos el archivo fuente, en el método amp. ingrese el archivo de marca de agua y, en el método de salida, especificamos la ruta para guardar, aquí iniciamos un servicio y, al acceder al puerto 3100, generaremos nuestro PDF con marca de agua.
'use estricto';
const express = require('express');
const pdftk = require('node-pdftk'); p>
p>
ruta constante = require('ruta');
aplicación const = express();
app.get('/', ( req, res) = gt; {
pdftk
.input(path.resolve(__dirname '/. /files/javascript.pdf'))
.stamp(path. resolve(__dirname '/... /files/watermark.pdf')
.output(path.resolve(__dirname '/... /files/watermark.pdf'))
.resolve(__dirname '/... /files/javascript_watermark.pdf'))
.then(buffer =gt; {
return res. enviar('exitoso' );
})
.catch(err =gt; {
console.error(err);
return res. send('fallido');
});
}); : 7.6.0
# Crear directorio de trabajo
EJECUTAR mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPIAR ./node_modules /usr /src/app/node_modules
EJECUTAR registro de conjunto npm https://registry.npm.taobao.org/
# Descargar e instalar PDFTK
EJECUTAR apt -get update
EJECUTAR apt-get install -y pdftk
# Utilice PM2 para iniciar la aplicación
CMD ["./node_modules /pm2/bin/pm2 -docker", "process.yml"]3. Archivo fuente del efecto
Archivo de marca de agua
Después de agregar la marca de agua