Skip to content

This example was built to generate PNG thumbnails from PDF files, on the server side (backend).

Notifications You must be signed in to change notification settings

leguass7/backend-pdf-thumb-generator

Repository files navigation

Miniaturas de arquivos PDF (thumbnail)

standard-image Powered by TypeScript

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.

// ./src/helpers
await pdfThumbGenerate('path/to/file.pdf', 'output/to/thumb.png')

Bibliotacas Utilizadas

Instalação

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)
  • 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:

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

About

This example was built to generate PNG thumbnails from PDF files, on the server side (backend).

Topics

Resources

Stars

Watchers

Forks