Skip to content

soarespaullo/PDFTools

Repository files navigation

⚠️ Projeto em Desenvolvimento

Este projeto ainda está em andamento. Pode haver bugs e funcionalidades incompletas.

📄 PDFTools

PDFTools é uma aplicação web feita com Flask que permite manipular arquivos PDF diretamente no navegador, de forma simples, rápida e sem instalar programas pesados.

✨ Funcionalidades

  • 🔗 Juntar PDFs — Combine múltiplos arquivos PDF em um único documento.
  • ✂️ Dividir PDFs — Separe páginas específicas de um PDF em arquivos individuais.
  • 🔒 Proteger PDF com senha — Adicione senha para proteger documentos sensíveis.
  • 🔓 Desbloquear PDF — Remova a senha de arquivos protegidos (quando permitido).
  • 🌐 Converter HTML para PDF — Gere um PDF a partir de código ou páginas HTML.
  • 🔁 Converter PDF para:
    • 📄 Word (.docx)
    • 📊 Excel (.xlsx)
    • 📽️ PowerPoint (.pptx)
  • 🧠 Aplicar OCR (Reconhecimento de Texto) — Torne PDFs escaneados pesquisáveis.
  • 🖼️ Converter imagens para PDF — Transforme arquivos JPG/PNG em PDFs organizados.
  • 💧 Adicionar Marca D'Água — Insira marcas d'água personalizadas em documentos PDF.
  • 📉 Comprimir PDF — Reduza o tamanho do arquivo PDF mantendo a qualidade.

📁 Estrutura de Pastas

PDFTools/
├── app.py                      # Arquivo principal da aplicação Flask
├── app.wsgi                    # Script WSGI usado pelo servidor (ex: Apache + mod_wsgi)
├── requirements.txt            # Arquivo com as dependências do projeto (pip install -r)
│
├── templates/                  # Templates Jinja2 renderizados pelo Flask
│   ├── base.html               # Template base (navbar, footer, etc.)
│   ├── index.html              # Página inicial
│   ├── comprimido.html         # Página de resultado para PDFs comprimidos
│   ├── desbloqueado.html       # Resultado de PDFs desbloqueados
│   ├── download.html           # Página de download de múltiplos arquivos
│   ├── download_unico.html     # Página de download individual
│   ├── paginas_convertidas.html # Resultados de PDFs convertidos para imagens, etc.
│   ├── paginas_divididas.html  # Resultado de divisão de PDF em páginas
│   ├── protegido.html          # Resultado de PDFs protegidos
│
├── static/                     # Arquivos estáticos (CSS, JS, imagens)
│   ├── css/
│   │   ├── style.css           # Estilos principais globais
│   │
│   ├── js/
│   │   └── darkmode.js         # Script para alternar entre modo claro e escuro
│   │
│   └── favicon/                # Ícones para aba do navegador (favicon.ico, etc.)
│
├── uploads/                    # Pasta onde os arquivos enviados são armazenados temporariamente
├── results/                    # Pasta com os arquivos gerados (PDFs comprimidos, convertidos, etc.)

🚀 Rodando localmente (Desenvolvimento)

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python app.py

Acesse em: http://localhost:5000


🏗️ Deploy em servidor Apache (Produção)

1. Instale dependências:

sudo apt update && sudo apt upgrade -y
sudo apt install apache2 libapache2-mod-wsgi-py3 python3-venv build-essential libffi-dev libpango-1.0-0 libcairo2 libgdk-pixbuf2.0-0 libxml2 libxslt1.1 tesseract-ocr poppler-utils libfreetype6-dev libjpeg-dev libgl1 ghostscript

2. Crie o ambiente virtual e instale os requisitos:

cd /var/www/
sudo git clone https://github.com/soarespaullo/PDFTools.git
cd PDFTools
sudo python3 -m venv venv
source venv/bin/activate
sudo chown -R $USER:$USER /var/www/PDFTools/venv/
pip install -r requirements.txt

3. Crie o arquivo app.wsgi:

#!/usr/bin/python3
import sys
import logging
import os

# Caminho para o diretório do seu app
sys.path.insert(0, '/var/www/PDFTools')

# Configurar logging para erros
logging.basicConfig(stream=sys.stderr)

# Garante que a variável de ambiente do Flask está correta
os.environ['FLASK_ENV'] = 'production'  # ou 'development' se estiver testando

# Importa o app Flask como "application" para o mod_wsgi
from app import app as application

4. Configure o Apache:

Crie o arquivo sudo vim /etc/apache2/sites-available/PDFTools.conf

<VirtualHost *:80>
    ServerName localhost

    WSGIDaemonProcess PDFTools python-home=/var/www/PDFTools/venv python-path=/var/www/PDFTools
    WSGIProcessGroup PDFTools
    WSGIScriptAlias / /var/www/PDFTools/app.wsgi

    <Directory /var/www/PDFTools>
        Require all granted
    </Directory>

    Alias /static /var/www/PDFTools/static
    <Directory /var/www/PDFTools/static/>
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/PDFTools_error.log
    CustomLog ${APACHE_LOG_DIR}/PDFTools_access.log combined
</VirtualHost>

5. Ative o site e reinicie o Apache:

sudo a2ensite PDFTools
sudo a2dissite 000-default.conf 
sudo systemctl reload apache2

6. Permissões (importantíssimo):

sudo mkdir -p /var/www/PDFTools/{uploads,results}
sudo chown -R www-data:www-data /var/www/PDFTools/uploads /var/www/PDFTools/results
sudo chmod -R 755 /var/www/PDFTools

🔒 Segurança

  • Nunca use debug=True em produção.
  • Use HTTPS (Let’s Encrypt).
  • Valide tipos de arquivo e tamanho.
  • Gere SECRET_KEY real no app.secret_key.

📦 Requisitos

Flask
PyMuPDF
pdf2docx
PyPDF2
python-pptx
Pillow
weasyprint
pdfplumber
pandas
openpyxl
pdf2image
pytesseract
reportlab
fpdf
beautifulsoup4
bleach

🧾 Licença

Este projeto é licenciado sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.


👨‍💻 Autor

Feito com ❤️ por Paulo SoaresPull Requests são bem-vindos!


📚 Recursos e Referências

🔗 Juntar PDFs

  • Recurso: Combine múltiplos PDFs em um único documento.
  • Tecnologias: Python (PyPDF2, pdfrw), JavaScript (PDF-lib, pdf.js).
  • Referência: PyPDF2 Documentation, PDF-lib GitHub

✂️ Dividir PDFs

  • Recurso: Separe páginas específicas de um PDF em arquivos individuais.
  • Tecnologias: Python (PyPDF2, pikepdf), JavaScript (PDF-lib).
  • Referência: pikepdf Documentation, PDF-lib GitHub

🔒 Proteger PDF com senha

🔓 Desbloquear PDF

  • Recurso: Remova a senha de arquivos protegidos (quando permitido).
  • Tecnologias: Python (PyPDF2), JavaScript (pdf.js).
  • Referência: PyPDF2 Decrypt PDF, pdf.js GitHub

🌐 Converter HTML para PDF

🔁 Converter PDF para:

  • Recurso: Converta arquivos PDF para outros formatos como Word, Excel e PowerPoint.
  • Tecnologias: Python (pdf2docx, xlwings), JavaScript (pdf-lib).
  • Referência: pdf2docx GitHub, xlwings Documentation

🧠 Aplicar OCR (Reconhecimento de Texto)

🖼️ Converter Imagens para PDF

  • Recurso: Transforme arquivos JPG/PNG em PDFs organizados.
  • Tecnologias: Python (Pillow, FPDF), JavaScript (jsPDF).
  • Referência: Pillow Documentation, jsPDF GitHub

💧 Adicionar Marca D'Água

  • Recurso: Insira marcas d'água personalizadas em documentos PDF.
  • Tecnologias: Python (PyPDF2, reportlab), JavaScript (PDF-lib).
  • Referência: PyPDF2 - Add Watermark, PDF-lib GitHub

📉 Comprimir PDF

About

Uma aplicação web simples e intuitiva para manipulação de arquivos PDF

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published