Esse exemplo foi contruído para gerar miniaturas *.png
de arquivos *.pdf
do lado do servidor (backend).
A aplicação acompanha um servidor http espress
simples para simular o upload do arquivo, armazenar os arquivo PFD bem como a minuatura PNG.
Se você está procurando uma forma manipular arquivos PDF apenas para gerar minuaturas do lado do servidor, essa prova de conceito é desaconselhada. Para biblioteca canvas funcionar é preciso algumas instalações no servidor que você pode verificar no arquivo .Dockerfile
. Instalações essas que se motram incômodas no deploy, porém, se você estiver realmente precisando é perfeitamente possível, mesmo você "matando formiga com bazuca"
Caso a utilização seja para uma aplicação web é altamente recomendado que você gere as miniaturas do lado do cliente, utilizando os recursos de canvas e pdf dos navegadores modernos; (colocarei um link para o exemplo aqui assim que o repositório estiver pronto)
O principal objetivo é obter um arquivo PDF qualquer, carrega-lo, e gerar uma miniatura PNG da primeira página.
As principais funcionalidades são:
- A função
pdfThumbGenerate
- A classe
NodeCanvasFactory
- A classe
Todo o resto trata-se de um servidor express
simples que utiliza o multer
como middleware de upload.
// ./src/helpers
await pdfThumbGenerate('path/to/file.pdf', 'output/to/thumb.png')
- Manipulação de PDF pdfjs-dist
- Manipulação de imagem node-canvas
- Servidor HTTP express
- Upload de arquivos multer
Para facilitar sua vida, antes de começar é necessário a instalação completa do NodeJs incluindo ferramentas de build adicionais conforme o seu sistema operacional como por exemplo: python
, cmake
, chocolatey
, node-gyp
, etc. Veja o guia de instalaçao do node-canvas
em https://github.com/Automattic/node-canvas
git clone https://github.com/leguass7/backend-pdf-thumb-generator.git
cd backend-pdf-thumb-generator
yarn install
- Aqui pode demorar um pouquinho para fazer o build do
canvas
(no meu caso uso Windows)
- Aqui pode demorar um pouquinho para fazer o build do
yarn start
Depois disso, se aparecer no console "Server is listening on port 3000!" abra o navegador em http://localhost:3000
- GET
http://localhost:3000/
- GET (uploaded static files)
http://localhost:3000/assets/files
- POST
http://localhost:3000/pdf
- Arquivo
./docs/Insomnia.yaml
de rotas do Insomnia ./Dockerfile
e./docker-compose.yml
Trecho importante para funcionar o canvas
no container do docker:
RUN apk add --no-cache \
python \
g++ \
build-base \
cairo-dev \
jpeg-dev \
pango-dev \
musl-dev \
giflib-dev \
pixman-dev \
pangomm-dev \
libjpeg-turbo-dev \
freetype-dev \
&& yarn install