📘 Complete Documentation

PDFModo
Admin & User Guide

Everything you need to install, configure, and use PDFModo — from first-time setup to managing users and payments.

Version 1.0 CodeIgniter 4 · PHP 8.1+ MySQL / MariaDB

Introduction

PDFModo is a complete, self-hosted SaaS PDF toolkit that lets users merge, split, compress, convert, sign, watermark, and edit PDF files — all in the browser. You host it on your own server and monetise it with subscription plans via Razorpay or PayPal.

✂️
Split & Merge

Combine multiple PDFs or extract specific pages.

🗜️
Compress

Reduce file size using Ghostscript.

✏️
PDF Editor

Edit text, add images, draw, sign and annotate.

🔄
Convert

PDF ↔ Word, Excel, PPT, JPG and more.

🔍
OCR

Extract text from scanned image-based PDFs.

🖊️
Sign PDF

Draw, type or upload a signature.

💧
Watermark

Add text or image watermarks to every page.

👥
Guest Access

Allow visitors to use tools without registering.

Tech Stack

ComponentTechnology
Backend FrameworkCodeIgniter 4.7
LanguagePHP 8.1+
DatabaseMySQL 5.7+ / MariaDB 10.4+
PDF RenderingPDF.js v3 (browser-side)
PDF ProcessingFPDI + FPDF, Ghostscript
PaymentsRazorpay, PayPal
FrontendBootstrap 5, Vanilla JS

Server Requirements

⚠️

Check before installing. The built-in installer will verify these automatically, but it is good practice to confirm with your hosting provider first.

RequirementMinimumRecommended
PHP8.18.2 or 8.3
MySQL / MariaDBMySQL 5.7 / MariaDB 10.4MySQL 8 / MariaDB 10.6+
Web ServerApache 2.4 (mod_rewrite)Apache 2.4 / Nginx
RAM512 MB1 GB+
Disk Space200 MB (app) + storage2 GB+
Ghostscript9.x10.x (brew install ghostscript)

Required PHP Extensions

  • mysqli — database connection
  • pdo_mysql — PDO database driver
  • mbstring — multi-byte string functions
  • zip — required for PPTX/XLSX file creation
  • gd or imagick — image processing
  • json — API responses (usually built-in)
  • openssl — secure token generation
  • fileinfo — MIME type detection

Shared Hosting vs VPS — Feature Availability

💡

PDF text editing and compression require Ghostscript + shell functions. These are fully available on VPS. On shared hosting, ask your provider to enable them — some do, some don't.

FeatureShared HostingVPS / Dedicated
Merge, Split, Rotate, Watermark✅ Works out of the box✅ Works out of the box
PDF → Image, Compress PDF⚠️ Needs Ghostscript + shell functions✅ Install GS + enable shell
Edit PDF text⚠️ Needs Ghostscript + shell functions✅ Install GS + enable shell
Add text / images to PDF✅ Works (FPDI)✅ Works
Payments, Subscriptions✅ Full support✅ Full support

Shared Hosting Setup — What to Ask Your Provider

Contact your hosting support and ask them to enable the following for your account:

  • Un-restrict PHP shell functionsshell_exec, exec, passthru, system should not be in disable_functions.
  • Ghostscript installed — ask if gs (Ghostscript) is available on the server. Versions 9.x or 10.x both work.

If the provider cannot enable these, the core tools (merge, split, rotate, watermark, add text/images) still work perfectly. Only PDF text replacement and compression are affected.

VPS / Dedicated Server Setup

Install Ghostscript:

# Ubuntu / Debian
apt install ghostscript

# CentOS / AlmaLinux / Rocky
yum install ghostscript

If using cPanel/WHM with PHP-FPM, ensure shell functions are not blocked. In WHM go to MultiPHP INI Editor → PHP-FPM Config for your domain and remove shell_exec,exec,passthru,system from the disable_functions line.

Apache Configuration

mod_rewrite must be enabled and AllowOverride All must be set for the project directory so the .htaccess file works correctly.

# In your Apache VirtualHost or httpd.conf
<Directory "/var/www/html/pdfmodo">
    AllowOverride All
    Require all granted
</Directory>

Nginx Configuration (alternative)

server {
    listen 80;
    server_name yourdomain.com;
    root /var/www/pdfmodo/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Download & File Structure

Getting the Files

  1. Download the ZIPDownload the PDFModo package from your purchase source or Git repository. The zip will be named pdfmodo-v1.0.zip.
  2. ExtractExtract the zip. You will see a folder called pdfmodo/.
  3. Upload to ServerUpload the entire pdfmodo/ folder to your web hosting public_html directory (shared hosting) or /var/www/html/ (VPS). You can use FTP (FileZilla), cPanel File Manager, or SCP.

Directory Structure

pdfmodo/
├── app/                    ← CodeIgniter application code
│   ├── Controllers/        ← Route handlers
│   ├── Models/             ← Database models
│   ├── Views/              ← HTML templates
│   ├── Services/           ← PDF processing services
│   └── Config/             ← App configuration
├── public/                 ← Web root (point domain here)
│   ├── index.php           ← Front controller
│   ├── install/            ← Installer wizard (deleted after setup)
│   ├── assets/             ← CSS, JS, images
│   └── .htaccess           ← URL rewriting rules
├── writable/               ← Runtime files (logs, sessions, uploads)
│   ├── uploads/pdfs/       ← Processed PDF files stored here
│   ├── session/            ← PHP sessions
│   └── logs/               ← Application logs
├── vendor/                 ← Composer PHP packages
└── .env                    ← Environment config (created by installer)
💡

Shared Hosting Tip. On cPanel / Plesk hosting, your domain's web root is public_html/. Upload the entire pdfmodo/ folder there. Your site URL will be yourdomain.com/pdfmodo/ — or you can upload the contents so public/ becomes the root and point your domain directly to it.

Set Folder Permissions

The writable/ directory must be writable by the web server. Run these commands via SSH:

chmod -R 775 writable/
chown -R www-data:www-data writable/   # Linux
# On cPanel, the owner is your cPanel username — no chown needed

Installation Wizard

PDFModo includes a browser-based installer. Once files are uploaded to the server, visit your site URL and you will be automatically redirected to the installer.

The installer automatically redirects from the homepage. Just visit yourdomain.com/ and the installer opens. After completion it self-deletes so users never see it.


Step 1 — System Requirements Check

The first screen checks your server automatically. You will see a green tick ✅ for each passing requirement and a red ✗ for anything missing.

If a requirement fails:

ErrorFix
PHP version too lowAsk your host to upgrade to PHP 8.1. In cPanel → Select PHP Version.
mysqli missingEnable mysqli in cPanel → Select PHP Extensions.
zip missingEnable php-zip extension.
writable/ not writableRun chmod -R 775 writable/ via SSH or File Manager.
Root not writableRun chmod 775 . in the project root (needed to write .env).

Step 2 — Database Configuration

Enter your MySQL database credentials. The installer will test the connection and confirm the database is empty before proceeding.

FieldDescriptionExample
Database HostMySQL server addresslocalhost
PortMySQL port (usually 3306)3306
Database NameName of the empty database you createdpdfmodo_db
UsernameMySQL username with full permissionspdfmodo_user
PasswordMySQL password••••••••
💡

cPanel users: Create your database in cPanel → MySQL Databases. Create a database, create a user, then grant the user ALL PRIVILEGES on that database.

⚠️

Database must be empty. If the database already has tables, the installer will refuse and show an error. Use a fresh database.


Step 3 — Site & Admin Setup

Configure your site name, URL, and create the admin account for the control panel.

FieldDescription
Site / App NameDisplayed in browser title, emails and footer. E.g. MyPDFTool
Site URLFull URL where the site is accessible, ending with /. E.g. https://yourdomain.com/
Admin NameDisplay name in the admin panel
Admin EmailUsed to log in to /admin panel
Admin PasswordMinimum 8 characters. Use a strong password.
First User (optional)Creates a regular user account for testing the user dashboard

Step 4 — Installation Complete

The installer will:

  1. Create all database tables (23 tables + 2 views)
  2. Insert default plans (Free, Pro, Business)
  3. Insert default settings
  4. Create the admin account
  5. Write the .env configuration file
  6. Delete the install/ folder automatically

Click Go to Homepage to see your live site, or Admin Panel to configure settings.


Admin Panel

Admin Login

The admin panel is completely separate from the user panel. It uses its own login system.

yourdomain.com/admin/login
  1. Open the admin URLGo to yourdomain.com/admin/login in your browser.
  2. Enter credentialsUse the admin email and password you set during installation.
  3. Click LoginYou will be redirected to the Admin Dashboard.
🔒

Security tip: Never share your admin credentials. Use a long, unique password. Consider adding IP whitelisting via .htaccess to restrict access to the /admin path.

Admin Dashboard

The dashboard gives a real-time overview of your platform.

yourdomain.com/admin

Dashboard Cards

CardWhat it shows
Total UsersAll registered user accounts
Total RevenueSum of all successful payments
Active SubscriptionsUsers currently on a paid plan
Files Processed TodayPDF operations completed today
Tool Usage ChartBar chart of most-used tools (last 30 days)
Recent PaymentsLast 10 successful transactions
Recent SignupsLatest registered users

Managing Users

yourdomain.com/admin/users

User List

Shows all registered users with search and filter options:

  • Search — by name or email
  • Filter by plan — Free / Pro / Business
  • Filter by status — Active / Banned

User Actions

ActionWhat it does
ViewSee full profile: files, subscriptions, payments, activity log
EditChange name, email, plan, storage limit
Ban / UnbanPrevent or restore access. Banned users see an error on login.
DeletePermanently remove user and all their files
Change PlanManually upgrade/downgrade a user's plan

Viewing a Single User

Click View on any user to see:

  • Account details and registration date
  • Current plan and subscription status
  • All uploaded files with sizes
  • Payment history
  • Tool usage log
  • Login activity

Plans & Pricing

yourdomain.com/admin/plans

Three default plans are created during installation. You can edit them to set your own pricing.

PlanDefault Monthly (INR)Default Monthly (USD)Storage
Free₹0$0100 MB
Pro₹499$5.995 GB
Business₹1499$17.9950 GB

Editing a Plan

  1. Click Edit next to any plan.
  2. Set prices for monthly and yearly billing in INR and USD.
  3. Set limits: storage, max file size, files per day, team members.
  4. Toggle features: OCR, digital signatures, API access, watermark removal, priority support.
  5. Save changes. Prices update immediately on the pricing page.
⚠️

Do not delete or rename the Free plan slug (free). New users are assigned this plan on registration. Renaming the slug can break user account creation.

Payments

yourdomain.com/admin/payments

View all payment transactions across all users.

ColumnDescription
UserWho made the payment
PlanWhich plan was purchased
AmountAmount charged (with currency)
GatewayRazorpay or PayPal
Statuspaid pending failed
DateTransaction timestamp

Tool Usage Statistics

yourdomain.com/admin/tools

See which PDF tools are used most, track success/failure rates, and monitor performance.

MetricDescription
Total UsesCumulative tool invocations
Success Rate% of operations that completed without error
Avg Processing TimeMean milliseconds per operation
Date FilterView stats for today / last 7 / 30 / 90 days

Site Settings

yourdomain.com/admin/settings

Control every aspect of the platform from one page.

General Settings

SettingDescription
App NameSite name shown in browser title and emails
App TaglineShort description below the logo
Contact EmailDisplayed in footer and used for support replies
Maintenance ModeWhen ON, shows a maintenance page to all visitors

Guest Access Settings

SettingDescription
Guest Access EnabledAllow non-logged-in visitors to use tools
Guest Max UsesHow many free conversions a guest gets (default: 3)
Guest Max File SizeMaximum upload size for guests in MB
Guest Allowed ToolsComma-separated list of tool slugs guests can access

Email (SMTP) Settings

SettingExample
SMTP Hostsmtp.gmail.com
SMTP Port587 (TLS) or 465 (SSL)
UsernameYour Gmail address
PasswordGmail App Password (not your main password)
From NameName shown in email "From" field
From EmailSender email address

Payment Settings

SettingDescription
Razorpay Key IDFrom Razorpay Dashboard → Settings → API Keys
Razorpay Key SecretKeep this private — never share it
CurrencyINR or USD
PayPal EnabledToggle PayPal as an alternative payment method
PayPal Client IDFrom PayPal Developer Dashboard
PayPal Modesandbox for testing, live for production

Coupons

yourdomain.com/admin/coupons

Create discount coupons that users can apply at checkout.

Creating a Coupon

  1. Click "Create Coupon"Opens the coupon form.
  2. Set the codeE.g. LAUNCH50. Users enter this at checkout.
  3. Choose discount type — Percentage (e.g. 50% off) or Fixed amount (e.g. ₹200 off).
  4. Set limits — Max uses, expiry date, minimum order amount.
  5. Save. The coupon is now active.
FieldDescription
CodeUppercase code users type at checkout
Discount TypePercentage or fixed amount
Discount ValueThe amount (e.g. 50 for 50% or ₹50)
Max UsesLeave blank for unlimited
Expiry DateLeave blank for no expiry
Min Order AmountMinimum cart value to apply coupon

User Panel

Registration & Login

Registering a New Account

yourdomain.com/auth/register
  1. Go to Register pageClick "Sign up free" from the homepage or navigation.
  2. Fill in your detailsName, email address, and password (minimum 8 characters).
  3. SubmitYour account is created with the Free plan. You are logged in automatically.

Logging In

yourdomain.com/auth/login

Enter your email and password. Check "Remember me" to stay logged in for 30 days.

Google Login

If enabled by the admin (Settings → Google Login Enabled), users can sign in with their Google account — no password required.

ℹ️

Google Login requires a Google OAuth Client ID and Secret configured in Admin → Settings → Auth Settings, and Google OAuth Credentials set up at console.cloud.google.com.

Forgot Password

  1. Click "Forgot password?" on the login page.
  2. Enter your email and submit.
  3. Check your inbox for a password reset link (valid for 1 hour).
  4. Click the link and enter a new password.

User Dashboard

yourdomain.com/dashboard

The dashboard is the home base for logged-in users. It includes:

  • Storage Usage Bar — Visual display of used vs available storage
  • Quick Upload — Topbar "Upload PDF" button to instantly upload and open the editor
  • Quick Tool Links — One-click access to all PDF tools
  • Recent Files — Last 5 processed files with download links
  • Current Plan Badge — Shows Free / Pro / Business with upgrade prompt

Sidebar Navigation

LinkGoes to
DashboardMain overview page
My FilesAll uploaded and processed files
PDF EditorOpen the editor (upload prompt)
ToolsList of all PDF tools
SubscriptionCurrent plan, upgrade options
Account SettingsProfile, password, notifications

My Files

yourdomain.com/files

All files processed by the user are stored here for 24 hours (configurable by admin). Actions available:

  • View — Preview the PDF in browser
  • Edit — Open in the PDF editor
  • Download — Download to your device
  • Rename — Give the file a custom name
  • Delete — Remove file (frees storage space)
ℹ️

Files marked as temp are automatically deleted after 24 hours. Regular uploaded files are kept until the user deletes them or storage is full.

PDF Editor

yourdomain.com/editor/{file-uuid}

Editor Layout

  • Top Toolbar — All tools, zoom controls, save and download buttons
  • Left Panel — Page thumbnails. Click to jump to any page. Drag to reorder.
  • Main Canvas — The PDF rendered by PDF.js. This is where you interact.
  • Right Panel — Properties of selected element (font, colour, size)

Toolbar Tools

ToolIconHow to use
SelectDefault mode. Click to select annotations.
Pan / HandClick and drag to scroll the canvas without selecting.
Edit Text📝Click any existing PDF text to edit it inline.
Add TextTClick anywhere on the page to create a new text box.
Add Image🖼Opens file picker. Place and resize image on page.
Highlight🖊Draw coloured highlight over text.
Comment💬Drop a sticky note anywhere on the page.
RectangleDraw a rectangle shape.
CircleDraw an oval/circle shape.
Freehand✏️Draw freely with mouse/touch.
UndoCtrl+Z — undo last action.
RedoCtrl+Y — redo undone action.

Saving & Downloading

  1. Click Save (or press Ctrl+S) to save all changes to the server. A green toast confirms success.
  2. Click Download to download the saved PDF with all changes applied.
⚠️

Always click Save before Download. Downloading without saving first will download the original unedited version.

Page Operations

  • Rotate Page — Click the rotate icon on any thumbnail in the left panel
  • Delete Page — Click the trash icon on the thumbnail (cannot be undone)
  • Reorder Pages — Drag and drop thumbnails in the left panel

Keyboard Shortcuts

ShortcutAction
Ctrl+SSave changes
Ctrl+ZUndo
Ctrl+Y or Ctrl+Shift+ZRedo
EscDeselect / exit text editing

PDF Tools Overview

All tools are accessible from the sidebar under Tools. Each tool has its own dedicated page with a drag-and-drop upload zone.

ℹ️

Guest users (not logged in) can use up to 3 tools for free (configurable by admin). After the limit, they are prompted to register for unlimited access.

Merge PDF

yourdomain.com/tools/merge

Combine multiple PDF files into a single document.

  1. Upload files — Drag multiple PDFs onto the dropzone, or click to browse. You can add files one by one.
  2. Reorder (optional) — Drag file cards to set the order they appear in the merged PDF.
  3. Click Process — The progress bar runs while files are merged server-side.
  4. Download — Click the Download button to save the merged PDF.

Split PDF

yourdomain.com/tools/split

Extract pages or split a PDF into multiple files.

  1. Upload a PDF — One file at a time.
  2. Choose split mode:
    • Split by range — e.g. pages 1-3, 4-6 → separate files
    • Extract pages — e.g. pages 2,5,8 → single file
    • Split every N pages — e.g. every 2 pages
    • Split into individual pages — one file per page
  3. Click Process — A ZIP file is prepared if multiple files are generated.
  4. Download — Single PDF or ZIP of multiple PDFs.

Compress PDF

yourdomain.com/tools/compress

Reduce PDF file size using Ghostscript. Ideal for emailing large documents.

  1. Upload PDF
  2. Choose quality level:
    • Screen — Smallest size, lower quality (72 dpi)
    • eBook — Good balance (150 dpi) — recommended
    • Printer — High quality (300 dpi)
    • Prepress — Maximum quality, largest file
  3. Click Process — Shows original size vs new size and compression ratio.
  4. Download compressed PDF.
⚠️

Compression is powered by Ghostscript. If Ghostscript is not installed on the server, compression will fail. Install it with: brew install ghostscript (macOS) or apt install ghostscript (Linux).

Convert PDF

Multiple conversion tools are available:

ToolURLOutput
PDF to Word/tools/pdf-to-word.docx
PDF to Excel/tools/pdf-to-excel.xlsx
PDF to PPT/tools/pdf-to-ppt.pptx (page images)
PDF to JPG/tools/pdf-to-jpgZIP of JPG images
Word to PDF/tools/word-to-pdf.pdf
Excel to PDF/tools/excel-to-pdf.pdf
JPG to PDF/tools/jpg-to-pdf.pdf
ℹ️

PDF to PPT renders each PDF page as a full-size slide image using Ghostscript — works for all PDF types including scanned documents. Requires Ghostscript installed on the server.

All conversions follow the same steps: Upload → Click Process → Download.

OCR (Text Recognition)

yourdomain.com/tools/ocr

Extract text from scanned PDF documents or image-based PDFs. Requires a Pro plan or higher.

  1. Upload scanned PDF
  2. Select language — English, Hindi, French, Spanish, German, etc.
  3. Click Process — OCR runs via Tesseract (must be installed on server).
  4. View results — Extracted text shown on screen and downloadable as .txt.
ℹ️

OCR requires Tesseract installed on the server: brew install tesseract (macOS) or apt install tesseract-ocr (Linux).

Sign PDF

yourdomain.com/tools/sign
  1. Upload PDF
  2. Create your signature — Three options:
    • Draw — Sign with mouse or touchscreen
    • Type — Type your name in a cursive font
    • Upload — Upload an existing signature image (PNG)
  3. Place signature — Drag the signature box to the desired position on the PDF page.
  4. Save & Download the signed PDF.

Saved signatures appear in My Signatures for reuse in future documents.

Watermark PDF

yourdomain.com/tools/watermark
  1. Upload PDF
  2. Choose watermark type:
    • Text — Enter text, choose font, size, colour, opacity
    • Image — Upload a logo or image as watermark
  3. Set position — Center, top-left, top-right, bottom-left, bottom-right, or diagonal (tiled).
  4. Set pages — All pages, first page only, last page only, or specific page numbers.
  5. Process & Download

Account Settings

yourdomain.com/account

Profile

  • Update display name and profile photo
  • Change email address (requires password confirmation)
  • Set timezone
  • Update phone number

Change Password

  1. Enter current password
  2. Enter new password (minimum 8 characters)
  3. Confirm new password
  4. Click Save

Delete Account

Users can permanently delete their account from Account Settings. This removes all files, subscriptions and personal data. The action is irreversible.

Subscription & Billing

yourdomain.com/subscription

Upgrading a Plan

  1. Go to Subscription from the sidebar.
  2. Choose Monthly or Yearly billing — yearly saves ~16%.
  3. Click Upgrade on the desired plan.
  4. Complete payment — Razorpay or PayPal checkout opens.
  5. Plan activates immediately after successful payment. Storage and feature limits update instantly.

Plan Comparison

FeatureFreeProBusiness
Storage100 MB5 GB50 GB
Max File Size10 MB50 MB200 MB
Files/Day5100Unlimited
OCR
Digital Signatures
Watermark Removal
API Access
Team Members1110
Priority Support

Configuration

Environment File (.env)

The .env file in the project root is the main configuration file. It is created by the installer and can be edited manually via SSH or cPanel File Manager.

CI_ENVIRONMENT = production        # production | development
app.baseURL = 'https://yourdomain.com/'

# Database
database.default.hostname = localhost
database.default.database = pdfmodo_db
database.default.username = db_user
database.default.password = db_password

# Security
JWT_SECRET = change-this-to-a-long-random-string

# Payments
RAZORPAY_KEY_ID = rzp_live_xxxxxxxx
RAZORPAY_KEY_SECRET = your_secret_here

# Google OAuth
GOOGLE_CLIENT_ID = your_client_id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET = your_client_secret
⚠️

Set CI_ENVIRONMENT = production on a live server. Development mode shows detailed error pages which can leak sensitive information.

Setting Up Payments

Razorpay (Indian Payments)

  1. Create Razorpay account at razorpay.com
  2. Get API keys — Razorpay Dashboard → Settings → API Keys → Generate Test Keys (or Live Keys for production).
  3. Enter in Admin Settings — Admin → Settings → Payment → Razorpay Key ID + Secret.
  4. Set currency to INR for Razorpay.
  5. Test — Use Razorpay test card 4111 1111 1111 1111 for test payments.

PayPal (International Payments)

  1. Create PayPal Developer account at developer.paypal.com
  2. Create an App — My Apps → Create App → get Client ID and Secret.
  3. Enable PayPal in Admin → Settings → Payment → Toggle PayPal Enabled ON.
  4. Enter credentials — Client ID and Secret.
  5. Set mode to sandbox for testing, live for production.

Email Configuration (SMTP)

Email is used for password reset and account notifications. Configure SMTP in Admin → Settings → Email Settings.

Gmail SMTP Setup

  1. Enable 2-Step Verification on your Google account.
  2. Generate App Password — Google Account → Security → App Passwords → Select "Mail" → Generate. Copy the 16-character password.
  3. In Admin Settings, enter:
    Host: smtp.gmail.com, Port: 587, Username: your Gmail, Password: the 16-char app password.
  4. Save and test by triggering a password reset from the login page.

Google Login Setup

  1. Go to console.cloud.google.com → Create Project.
  2. Enable Google People API (APIs & Services → Library).
  3. Create OAuth Credentials — APIs & Services → Credentials → Create Credentials → OAuth Client ID → Web Application.
  4. Add Authorized Redirect URI:
    https://yourdomain.com/auth/google/callback
  5. Copy the Client ID and Client Secret into Admin → Settings → Auth Settings and your .env file.
  6. Enable Google Login — Admin → Settings → Toggle "Google Login Enabled" to ON.

Troubleshooting

ProblemCauseFix
White page / 500 errorPHP error in development modeCheck writable/logs/log-YYYY-MM-DD.log for error details.
Upload failsPHP upload limit too lowIncrease upload_max_filesize and post_max_size in php.ini.
Compress/Convert failsGhostscript not installedInstall GS: apt install ghostscript (Linux) or brew install ghostscript (macOS).
Sessions not persistingwritable/session/ not writablechmod 775 writable/session/
PDF to PPT blank slidesWas using text extraction onlyUpdated to Ghostscript image rendering — reinstall/redeploy the latest code.
Emails not sendingWrong SMTP credentialsUse Gmail App Password, not your main Gmail password. Check port 587.
CSRF error on formsSession expired or double-submitReload the page and try again. Set CI_ENVIRONMENT = production.
Payment not workingWrong API keysDouble-check Razorpay Key ID and Secret in Admin Settings. Use live keys (not test) in production.
Installer redirecting againLock file missing or install/ still presentDelete public/install/ folder manually or check lock file exists.
404 on all pagesmod_rewrite not enabledRun a2enmod rewrite and add AllowOverride All to Apache config.

Checking Logs

# CI4 Application log
tail -f writable/logs/log-$(date +%Y-%m-%d).log

# Apache error log
tail -f /var/log/apache2/error.log     # Linux
tail -f /Applications/XAMPP/.../logs/error_log   # macOS XAMPP

Getting Support

If you cannot resolve an issue:

  • Check the log file first — it will tell you exactly what PHP error occurred.
  • Search for the error message on Google or Stack Overflow.
  • Contact support with: your PHP version, server type, the exact error message from the log, and steps to reproduce.
📄
PDFModo Complete Documentation
Generated — PDFModo v1.0