This PDF tools app offers an all-in-one solution for managing PDF files. Easily merge, split, and convert PDFs with just a few clicks. It supports JPG to PDF conversion, PDF page orientation adjustments, and file size reduction while maintaining quality. The app features a sleek UI design using Tailwind CSS, drag-and-drop uploads, and real-time file management with Zustand. Users can also view PDFs in real-time, generate thumbnails, and track all file activities—all within an intuitive and streamlined interface.
- 📑 Combine multiple PDFs into one easily
- ✂️ Break large PDFs into smaller files
- 🖼️ Convert PDF pages to high-quality JPG images
- 📷 Convert JPG images to PDF format
- 🔄 Adjust the orientation of PDF pages
- 📉 Reduce PDF file size while keeping quality
- 📄 Convert Word and PowerPoint files to PDF
- ✨ Sleek and intuitive UI design using Tailwind CSS
- 📂 Easy file uploads with drag-and-drop
- 🗂️ Efficiently manage files using Zustand
- 🔍 View PDFs and other files in real-time
- 🖼️ Generate quick visual thumbnails of PDFs
- 📥 Seamlessly track file uploads
- ⚡ Real-time PDF tasks with Laravel Reverb and Jobs
- 🚨 Alerts for errors and statuses using toastr
- ⬇️ Easy access to download processed files
- 📊 Central hub to track all file activities and processes
For the installation you can clone this project to your local computer.
git clone https://github.com/nursandiid/pdf-toolsNavigate to the project folder.
cd pdf-toolsInstall required packages.
composer install
npm installCreate a new .env file and edit the database credentials.
cp .env.example .envAPP_NAME="Yoo PDF"
APP_TIMEZONE="Asia/Jakarta"
APP_URL="http://127.0.0.1:8000"DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=w2_pdf_tools
DB_USERNAME=root
DB_PASSWORD=FILESYSTEM_DISK=publicIn this case, you can set the value to database.
QUEUE_CONNECTION=databaseRun this command to generate our credentials:
php artisan reverb:installIt will automatically fill these variables:
BROADCAST_CONNECTION=reverb
REVERB_APP_ID=198038
REVERB_APP_KEY=obxrp97kzubmkwopetvi
REVERB_APP_SECRET=pp2ataxxaqncsg5p15ey
REVERB_HOST="localhost"
REVERB_PORT=8080
REVERB_SCHEME=http
VITE_REVERB_APP_KEY="${REVERB_APP_KEY}"
VITE_REVERB_HOST="${REVERB_HOST}"
VITE_REVERB_PORT="${REVERB_PORT}"
VITE_REVERB_SCHEME="${REVERB_SCHEME}"Add this line, as we are using it on the client:
VITE_APP_NAME="${APP_NAME}"Since we utilize some advanced services that can’t be managed with PHP alone, I’ve opted to use the iLovePDF API as an alternative. Obtain your credentials from the dashboard and enter them here:
ILOVEPDF_PUBLIC_KEY=""
ILOVEPDF_SECRET_KEY=""Generate new app key:
php artisan key:generateRun migrations:
php artisan migrateRun seeders:
php artisan db:seedGenerate a symlink to view files in storage:
php artisan storage:linkStart the web socket server:
php artisan reverb:startRun the queue in development mode:
php artisan queue:listenIf you're using cron jobs, add this command to your crontab:
* * * * * cd /path-to-your-project && php artisan queue:listen >> /dev/null 2>&1Build assets with NPM:
npm run buildAlternatively, run in development mode:
npm run devRun your app:
php artisan serveThat's it! Launch the main URL at http://127.0.0.1:8000