Modular. Web-based. Easily Extendable.
This lightweight web app lets you manipulate PDF files directly in your browser. Currently supported features:
- 🔗 Merge two PDF files
- ✂️ Cut (remove) pages
- 🔃 Reorder pages
- ✏️🗑️ Change/Delete Metadata
- 🔑 Encrypt PDF files
- 🔑 Decrypt PDF files
Built with React (Vite) and Flask, the app is designed for fast, modular feature expansion. Want to add a new tool? Touch just three files and create one:
routes.py(backend)main.jsx+ a new component (frontend)LandingPage.jsx(frontend)
| Layer | Technology |
|---|---|
| Frontend | React + Vite |
| Backend | Python + Flask |
docker compose up --buildLaunches the app in a production-like container environment.
Open the vite.config.js file in the frontend directory and replace:
target: 'http://backend:5000',with:
target: 'http://localhost:5000',cd ./backend
pip install -r requirements.txt
python main.pycd ./frontend
npm install
npm run dev-
Backend
- Add your logic or new route in
routes.py
- Add your logic or new route in
-
Frontend
- Create a new JSX component inside
components/ - Register the component and its route in
main.jsx - Add a Tile in
LandingPage.jsx
- Create a new JSX component inside
pdf-tool/
├── backend/
│ ├── main.py
│ ├── requirements.txt
│ ├── Dockerfile
│ └── app/routes/
│ └── routes.py
├── frontend/
│ ├── src/
│ │ ├── components/
│ │ │ ├── feature/
│ │ │ │ ├── Merge.jsx
│ │ │ │ ├── Cut.jsx
│ │ │ │ ├── Reorder.jsx
│ │ │ │ ├── [NewFeature].jsx
│ │ │ │ └── ...
│ │ │ └── layout
│ │ │ │ ├── LandingPage.jsx
│ │ │ │ ├── Tiles.jsx
│ │ │ │ └── ...
│ │ ├── main.jsx
│ │ ├── nginx.conf
│ │ └── Dockerfile
├── docker-compose.yml
└── README.md