{"id":18809593,"url":"https://github.com/leguass7/backend-pdf-thumb-generator","last_synced_at":"2026-05-07T10:36:23.843Z","repository":{"id":108284115,"uuid":"374222966","full_name":"leguass7/backend-pdf-thumb-generator","owner":"leguass7","description":"This example was built to generate PNG thumbnails from PDF files, on the server side (backend).","archived":false,"fork":false,"pushed_at":"2021-06-05T23:09:27.000Z","size":64,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-12T00:47:12.775Z","etag":null,"topics":["backend","canvas","express","nodejs","pdf","pdf-converter","thumbnails","upload"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/leguass7.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-06-05T22:23:17.000Z","updated_at":"2021-06-05T23:12:22.000Z","dependencies_parsed_at":null,"dependency_job_id":"ee9372e0-a556-4324-9739-17410fa716dd","html_url":"https://github.com/leguass7/backend-pdf-thumb-generator","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/leguass7/backend-pdf-thumb-generator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leguass7%2Fbackend-pdf-thumb-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leguass7%2Fbackend-pdf-thumb-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leguass7%2Fbackend-pdf-thumb-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leguass7%2Fbackend-pdf-thumb-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/leguass7","download_url":"https://codeload.github.com/leguass7/backend-pdf-thumb-generator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leguass7%2Fbackend-pdf-thumb-generator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32733942,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-07T02:14:30.463Z","status":"ssl_error","status_checked_at":"2026-05-07T02:14:29.405Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend","canvas","express","nodejs","pdf","pdf-converter","thumbnails","upload"],"created_at":"2024-11-07T23:17:04.917Z","updated_at":"2026-05-07T10:36:23.826Z","avatar_url":"https://github.com/leguass7.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Miniaturas de arquivos PDF (thumbnail)\n![standard-image](https://img.shields.io/badge/code%20style-standard-brightgreen.svg) \u003cimg src=\"https://badgen.net/badge/powered%20by/typescript/blue\" alt=\"Powered by TypeScript\" /\u003e\n\nEsse exemplo foi contruído para gerar miniaturas `*.png` de arquivos `*.pdf` do **lado do servidor (backend)**.\nA aplicação acompanha um servidor http `espress` simples para simular o upload do arquivo, armazenar os arquivo PFD bem como a minuatura PNG.\n\n## Considerações importantes\nSe 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\"**\n\nCaso 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; \n*(colocarei um link para o exemplo aqui assim que o repositório estiver pronto)*\n\n### Code (Como funciona?)\nO principal objetivo é obter um arquivo PDF qualquer, carrega-lo, e gerar uma miniatura PNG da primeira página.\n\nAs principais funcionalidades são: \n - A função `pdfThumbGenerate`\n   - A classe `NodeCanvasFactory`\n\nTodo o resto trata-se de um servidor `express` simples que utiliza o `multer` como middleware de upload.\n\n```javascript\n// ./src/helpers\nawait pdfThumbGenerate('path/to/file.pdf', 'output/to/thumb.png')\n```\n\n### Bibliotacas Utilizadas\n- Manipulação de PDF [pdfjs-dist](https://github.com/mozilla/pdfjs-dist)\n- Manipulação de imagem [node-canvas](https://github.com/Automattic/node-canvas)\n- Servidor HTTP [express](https://expressjs.com/)\n  - Upload de arquivos [multer](https://github.com/expressjs/multer#readme)\n\n## Instalação\nPara 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\n\n- `git clone https://github.com/leguass7/backend-pdf-thumb-generator.git` \n- `cd backend-pdf-thumb-generator` \n- `yarn install`\n  - Aqui pode demorar um pouquinho para fazer o build do `canvas` *(no meu caso uso Windows)*\n- `yarn start`\n\nDepois disso, se aparecer no console *\"Server is listening on port 3000!\"* abra o navegador em `http://localhost:3000`\n - GET `http://localhost:3000/`\n - GET (uploaded static files) `http://localhost:3000/assets/files`\n - POST `http://localhost:3000/pdf`\n\n### Docs\n- Arquivo `./docs/Insomnia.yaml` de rotas do **Insomnia**\n- `./Dockerfile` e `./docker-compose.yml`\n\nTrecho importante para funcionar o `canvas` no container do docker:\n```Dockerfile\nRUN apk add --no-cache \\\n    python \\\n    g++ \\\n    build-base \\\n    cairo-dev \\\n    jpeg-dev \\\n    pango-dev \\\n    musl-dev \\\n    giflib-dev \\\n    pixman-dev \\\n    pangomm-dev \\\n    libjpeg-turbo-dev \\\n    freetype-dev \\\n    \u0026\u0026 yarn install\n```\n\n### Referêcias\n- https://github.com/mozilla/pdf.js/tree/master/examples/node\n- https://github.com/mozilla/pdf.js/blob/master/examples/node/pdf2png/pdf2png.js\n- https://github.com/sionelt/PDF-thumb-generator\n- https://stackoverflow.com/questions/57088230/node-canvas-on-alpine-within-docker\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleguass7%2Fbackend-pdf-thumb-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleguass7%2Fbackend-pdf-thumb-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleguass7%2Fbackend-pdf-thumb-generator/lists"}