https://github.com/leguass7/backend-pdf-thumb-generator
This example was built to generate PNG thumbnails from PDF files, on the server side (backend).
https://github.com/leguass7/backend-pdf-thumb-generator
backend canvas express nodejs pdf pdf-converter thumbnails upload
Last synced: 2 months ago
JSON representation
This example was built to generate PNG thumbnails from PDF files, on the server side (backend).
- Host: GitHub
- URL: https://github.com/leguass7/backend-pdf-thumb-generator
- Owner: leguass7
- Created: 2021-06-05T22:23:17.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2021-06-05T23:09:27.000Z (about 5 years ago)
- Last Synced: 2025-08-12T00:47:12.775Z (11 months ago)
- Topics: backend, canvas, express, nodejs, pdf, pdf-converter, thumbnails, upload
- Language: TypeScript
- Homepage:
- Size: 62.5 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Miniaturas de arquivos PDF (thumbnail)
 
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.
## Considerações importantes
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)*
### Code (Como funciona?)
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`
Todo o resto trata-se de um servidor `express` simples que utiliza o `multer` como middleware de upload.
```javascript
// ./src/helpers
await pdfThumbGenerate('path/to/file.pdf', 'output/to/thumb.png')
```
### Bibliotacas Utilizadas
- Manipulação de PDF [pdfjs-dist](https://github.com/mozilla/pdfjs-dist)
- Manipulação de imagem [node-canvas](https://github.com/Automattic/node-canvas)
- Servidor HTTP [express](https://expressjs.com/)
- Upload de arquivos [multer](https://github.com/expressjs/multer#readme)
## Instalação
Para facilitar sua vida, antes de começar é necessário a instalação completa do [NodeJs](https://nodejs.org/) 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)*
- `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`
### Docs
- Arquivo `./docs/Insomnia.yaml` de rotas do **Insomnia**
- `./Dockerfile` e `./docker-compose.yml`
Trecho importante para funcionar o `canvas` no container do docker:
```Dockerfile
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
```
### Referêcias
- https://github.com/mozilla/pdf.js/tree/master/examples/node
- https://github.com/mozilla/pdf.js/blob/master/examples/node/pdf2png/pdf2png.js
- https://github.com/sionelt/PDF-thumb-generator
- https://stackoverflow.com/questions/57088230/node-canvas-on-alpine-within-docker