A lightweight, local web application for working with PDF files. All processing happens on your machine — no files are uploaded to external servers.
| Feature | Description |
|---|---|
| PDF to Word | Convert PDF files to editable .docx format |
| Compress PDF | Reduce PDF file size with 3 compression levels (Low / Medium / High) |
| OCR PDF | Extract text from scanned/image-based PDFs with 20+ language support |
| Unlock PDF | Remove password protection and restrictions from PDF files |
| Merge PDF | Combine multiple PDF files into a single document |
| Split PDF | Extract pages (all or by range) into separate PDFs |
Upload a PDF and convert it to an editable Word document.
Choose compression level and reduce your PDF file size.
Extract text from scanned documents with multi-language support.
Remove password protection from locked PDF files.
- Backend: Flask (Python)
- Frontend: Vanilla HTML/CSS/JavaScript
- PDF to Word: pdf2docx (PyMuPDF + python-docx)
- Compression: pypdf
- OCR: Tesseract OCR + pdf2image + Pillow
- PDF Unlock: pypdf
- Python 3.10+
- Tesseract OCR (for OCR feature)
- Poppler (for OCR feature)
brew install tesseract tesseract-lang popplersudo apt-get install tesseract-ocr tesseract-ocr-all poppler-utils- Tesseract: Download from UB-Mannheim/tesseract
- Poppler: Download from oschwartz10612/poppler-windows
git clone https://github.com/romizone/PDFtoword.git
cd PDFtoword
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txtpython app.pyOpen http://127.0.0.1:5000 in your browser.
docker build -t ai-pdf-tools .
docker run -p 5000:5000 ai-pdf-toolsEnglish, Bahasa Indonesia, Malay, Japanese, Chinese (Simplified & Traditional), Korean, Arabic, Hindi, Thai, Vietnamese, French, German, Spanish, Portuguese, Italian, Dutch, Russian, Turkish, Polish, and more.
PDFtoword/
├── app.py # Flask application & API routes
├── config.py # Configuration
├── requirements.txt # Python dependencies
├── Dockerfile # Docker deployment
├── Procfile # Cloud deployment
├── services/
│ ├── pdf_to_word.py # PDF to Word conversion
│ ├── pdf_compress.py # PDF compression
│ ├── pdf_ocr.py # OCR text extraction
│ ├── pdf_unlock.py # PDF unlock/decrypt
│ ├── pdf_merge.py # PDF merge
│ └── pdf_split.py # PDF split
├── templates/
│ └── index.html # Web UI
├── static/
│ ├── css/style.css # Styles
│ └── js/app.js # Frontend logic
├── uploads/ # Temp uploads (auto-cleaned)
└── outputs/ # Temp outputs (auto-cleaned)
| Method | Endpoint | Description |
|---|---|---|
GET |
/ |
Web UI |
POST |
/api/convert |
PDF to Word (returns .docx) |
POST |
/api/compress |
Compress PDF (returns compressed .pdf) |
POST |
/api/ocr |
OCR extraction (returns JSON with text) |
POST |
/api/unlock |
Unlock PDF (returns unlocked .pdf) |
POST |
/api/merge |
Merge multiple PDFs (returns merged .pdf) |
POST |
/api/split |
Split PDF pages (returns .zip) |
For a detailed technical overview, architecture, and implementation details, see PAPER.md.
MIT License - see LICENSE for details.
Romi Nur Ismanto — @romizone