{"id":501,"date":"2026-07-16T16:18:14","date_gmt":"2026-07-16T16:18:14","guid":{"rendered":"https:\/\/freewebtools.co.in\/?page_id=501"},"modified":"2026-07-16T16:18:14","modified_gmt":"2026-07-16T16:18:14","slug":"pdf-to-jpg","status":"publish","type":"page","link":"https:\/\/freewebtools.co.in\/index.php\/pdf-to-jpg\/","title":{"rendered":"Pdf to Jpg"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>All-in-One PDF \u2194 JPG Converter<\/title>\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/3.4.120\/pdf.min.js\"><\/script>\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js\"><\/script>\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jszip\/3.10.1\/jszip.min.js\"><\/script>\n    <style>\n        :root {\n            --wp-pdf-bg: #f8fafc;\n            --wp-pdf-card: rgba(255, 255, 255, 0.95);\n            --wp-pdf-text-main: #0f172a;\n            --wp-pdf-text-sub: #64748b;\n            --wp-pdf-primary: #3b82f6;\n            --wp-pdf-primary-hover: #2563eb;\n            --wp-pdf-success: #10b981;\n            --wp-pdf-danger: #ef4444;\n            --wp-pdf-border: #e2e8f0;\n            --wp-pdf-radius: 12px;\n            --wp-pdf-shadow: 0 4px 6px -1px rgba(0,0,0,0.05), 0 2px 4px -1px rgba(0,0,0,0.03);\n            --wp-pdf-shadow-lg: 0 10px 15px -3px rgba(0,0,0,0.05), 0 4px 6px -2px rgba(0,0,0,0.02);\n            --wp-pdf-font: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n        }\n\n        .wp-pdf-dark-mode {\n            --wp-pdf-bg: #0f172a;\n            --wp-pdf-card: #1e293b;\n            --wp-pdf-text-main: #f1f5f9;\n            --wp-pdf-text-sub: #94a3b8;\n            --wp-pdf-border: #334155;\n            --wp-pdf-shadow: 0 4px 6px -1px rgba(0,0,0,0.2);\n            --wp-pdf-shadow-lg: 0 10px 15px -3px rgba(0,0,0,0.3);\n        }\n\n        \/* Namespace Scope App wrapper *\/\n        .wp-pdf-app-scope {\n            box-sizing: border-box;\n            font-family: var(--wp-pdf-font);\n            background-color: var(--wp-pdf-bg);\n            color: var(--wp-pdf-text-main);\n            min-height: 100vh;\n            padding: 2rem 1.5rem;\n            transition: background-color 0.3s ease, color 0.3s ease;\n        }\n\n        .wp-pdf-app-scope * {\n            box-sizing: border-box;\n        }\n\n        \/* Container Layout *\/\n        .wp-pdf-container {\n            max-width: 1200px;\n            margin: 0 auto;\n            display: flex;\n            flex-direction: column;\n            gap: 2rem;\n        }\n\n        \/* Top Navigation Header *\/\n        .wp-pdf-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            background: var(--wp-pdf-card);\n            padding: 1.25rem 2rem;\n            border-radius: var(--wp-pdf-radius);\n            box-shadow: var(--wp-pdf-shadow);\n            border: 1px solid var(--wp-pdf-border);\n        }\n\n        .wp-pdf-logo-section h1 {\n            font-size: 1.5rem;\n            font-weight: 800;\n            margin: 0;\n            background: linear-gradient(135deg, #3b82f6, #8b5cf6);\n            -webkit-background-clip: text;\n            -webkit-text-fill-color: transparent;\n        }\n\n        .wp-pdf-logo-section p {\n            font-size: 0.8125rem;\n            color: var(--wp-pdf-text-sub);\n            margin: 0.25rem 0 0 0;\n        }\n\n        .wp-pdf-global-controls {\n            display: flex;\n            gap: 1rem;\n            align-items: center;\n        }\n\n        \/* Modes Switching Tab Bar *\/\n        .wp-pdf-mode-switcher {\n            display: flex;\n            background: var(--wp-pdf-border);\n            padding: 0.25rem;\n            border-radius: 8px;\n            gap: 0.25rem;\n        }\n\n        .wp-pdf-mode-btn {\n            background: transparent;\n            border: none;\n            padding: 0.5rem 1.25rem;\n            font-size: 0.875rem;\n            font-weight: 600;\n            color: var(--wp-pdf-text-sub);\n            cursor: pointer;\n            border-radius: 6px;\n            transition: all 0.2s ease;\n        }\n\n        .wp-pdf-mode-btn.wp-pdf-active-mode {\n            background: var(--wp-pdf-card);\n            color: var(--wp-pdf-primary);\n            box-shadow: var(--wp-pdf-shadow);\n        }\n\n        \/* Button Universal Styles *\/\n        .wp-pdf-btn {\n            font-size: 0.875rem;\n            font-weight: 600;\n            padding: 0.625rem 1.25rem;\n            border-radius: 8px;\n            border: 1px solid var(--wp-pdf-border);\n            background: var(--wp-pdf-card);\n            color: var(--wp-pdf-text-main);\n            cursor: pointer;\n            display: inline-flex;\n            align-items: center;\n            gap: 0.5rem;\n            transition: all 0.2s ease;\n        }\n\n        .wp-pdf-btn:hover {\n            transform: translateY(-1px);\n            box-shadow: var(--wp-pdf-shadow);\n        }\n\n        .wp-pdf-btn-primary {\n            background: var(--wp-pdf-primary);\n            color: #ffffff;\n            border: none;\n        }\n\n        .wp-pdf-btn-primary:hover {\n            background: var(--wp-pdf-primary-hover);\n        }\n\n        \/* Workspace Grid Layout *\/\n        .wp-pdf-grid {\n            display: grid;\n            grid-template-columns: 1fr;\n            gap: 2rem;\n        }\n\n        @media (min-width: 1024px) {\n            .wp-pdf-grid {\n                grid-template-columns: 380px 1fr;\n            }\n        }\n\n        \/* File Dropper Zone *\/\n        .wp-pdf-dropzone {\n            background: var(--wp-pdf-card);\n            border: 2px dashed var(--wp-pdf-border);\n            border-radius: var(--wp-pdf-radius);\n            padding: 3rem 1.5rem;\n            text-align: center;\n            cursor: pointer;\n            transition: all 0.3s ease;\n            position: relative;\n        }\n\n        .wp-pdf-dropzone:hover, .wp-pdf-dropzone.wp-pdf-dragover {\n            border-color: var(--wp-pdf-primary);\n            background: rgba(59, 130, 246, 0.05);\n        }\n\n        .wp-pdf-dropzone-icon {\n            width: 48px;\n            height: 48px;\n            color: var(--wp-pdf-primary);\n            margin: 0 auto 1rem auto;\n        }\n\n        .wp-pdf-dropzone-text h3 {\n            margin: 0 0 0.5rem 0;\n            font-size: 1.125rem;\n            font-weight: 700;\n        }\n\n        .wp-pdf-dropzone-text p {\n            margin: 0;\n            font-size: 0.8125rem;\n            color: var(--wp-pdf-text-sub);\n        }\n\n        .wp-pdf-file-input {\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            opacity: 0;\n            cursor: pointer;\n        }\n\n        \/* Sidebar Panels *\/\n        .wp-pdf-sidebar {\n            display: flex;\n            flex-direction: column;\n            gap: 1.5rem;\n        }\n\n        .wp-pdf-card {\n            background: var(--wp-pdf-card);\n            border: 1px solid var(--wp-pdf-border);\n            border-radius: var(--wp-pdf-radius);\n            box-shadow: var(--wp-pdf-shadow);\n            overflow: hidden;\n        }\n\n        .wp-pdf-card-header {\n            padding: 1.25rem 1.5rem;\n            border-bottom: 1px solid var(--wp-pdf-border);\n            font-weight: 700;\n            font-size: 0.9375rem;\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n        }\n\n        .wp-pdf-card-body {\n            padding: 1.5rem;\n            display: flex;\n            flex-direction: column;\n            gap: 1.25rem;\n        }\n\n        \/* Option Field layouts *\/\n        .wp-pdf-field-group {\n            display: flex;\n            flex-direction: column;\n            gap: 0.5rem;\n        }\n\n        .wp-pdf-field-group label {\n            font-size: 0.75rem;\n            font-weight: 700;\n            color: var(--wp-pdf-text-sub);\n            text-transform: uppercase;\n            letter-spacing: 0.05em;\n        }\n\n        .wp-pdf-input, .wp-pdf-select {\n            width: 100%;\n            padding: 0.625rem 0.875rem;\n            font-size: 0.875rem;\n            border-radius: 8px;\n            border: 1px solid var(--wp-pdf-border);\n            background: var(--wp-pdf-card);\n            color: var(--wp-pdf-text-main);\n            outline: none;\n            transition: border-color 0.15s ease-in-out;\n        }\n\n        .wp-pdf-input:focus, .wp-pdf-select:focus {\n            border-color: var(--wp-pdf-primary);\n        }\n\n        .wp-pdf-row-2col {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 0.75rem;\n        }\n\n        \/* Preview Area Container *\/\n        .wp-pdf-preview-container {\n            display: flex;\n            flex-direction: column;\n            gap: 1rem;\n        }\n\n        .wp-pdf-toolbar {\n            background: var(--wp-pdf-card);\n            padding: 0.75rem 1.25rem;\n            border: 1px solid var(--wp-pdf-border);\n            border-radius: var(--wp-pdf-radius);\n            box-shadow: var(--wp-pdf-shadow);\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            flex-wrap: wrap;\n            gap: 1rem;\n        }\n\n        \/* Files list & Drag re-ordering grid *\/\n        .wp-pdf-pages-grid {\n            display: grid;\n            grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));\n            gap: 1.25rem;\n            min-height: 200px;\n        }\n\n        .wp-pdf-page-item {\n            background: var(--wp-pdf-card);\n            border: 1px solid var(--wp-pdf-border);\n            border-radius: var(--wp-pdf-radius);\n            overflow: hidden;\n            box-shadow: var(--wp-pdf-shadow);\n            position: relative;\n            cursor: grab;\n            transition: transform 0.2s, box-shadow 0.2s;\n        }\n\n        .wp-pdf-page-item:active {\n            cursor: grabbing;\n        }\n\n        .wp-pdf-page-item-thumb {\n            aspect-ratio: 0.75;\n            background: #cbd5e1;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            position: relative;\n            overflow: hidden;\n        }\n\n        .wp-pdf-page-item-thumb img {\n            width: 100%;\n            height: 100%;\n            object-fit: contain;\n            transition: transform 0.3s;\n        }\n\n        .wp-pdf-page-meta {\n            padding: 0.5rem 0.75rem;\n            font-size: 0.75rem;\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            background: rgba(0,0,0,0.02);\n            border-top: 1px solid var(--wp-pdf-border);\n        }\n\n        .wp-pdf-page-actions {\n            position: absolute;\n            top: 0.5rem;\n            right: 0.5rem;\n            display: flex;\n            gap: 0.25rem;\n            opacity: 0;\n            transition: opacity 0.2s ease;\n            z-index: 5;\n        }\n\n        .wp-pdf-page-item:hover .wp-pdf-page-actions {\n            opacity: 1;\n        }\n\n        .wp-pdf-action-btn {\n            background: rgba(255,255,255,0.9);\n            border: none;\n            border-radius: 4px;\n            width: 24px;\n            height: 24px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            cursor: pointer;\n            box-shadow: var(--wp-pdf-shadow);\n            color: #1e293b;\n            transition: background 0.2s;\n        }\n\n        .wp-pdf-action-btn:hover {\n            background: #ffffff;\n            color: var(--wp-pdf-primary);\n        }\n\n        .wp-pdf-action-btn-danger:hover {\n            color: var(--wp-pdf-danger) !important;\n        }\n\n        \/* Progress Status Bars *\/\n        .wp-pdf-progress-overlay {\n            position: fixed;\n            top: 0;\n            left: 0;\n            right: 0;\n            bottom: 0;\n            background: rgba(0, 0, 0, 0.4);\n            backdrop-filter: blur(4px);\n            z-index: 1000;\n            display: none;\n            align-items: center;\n            justify-content: center;\n        }\n\n        .wp-pdf-progress-card {\n            background: var(--wp-pdf-card);\n            border: 1px solid var(--wp-pdf-border);\n            border-radius: var(--wp-pdf-radius);\n            padding: 2rem;\n            width: 90%;\n            max-width: 420px;\n            box-shadow: var(--wp-pdf-shadow-lg);\n            text-align: center;\n        }\n\n        .wp-pdf-progress-bar-container {\n            background: var(--wp-pdf-border);\n            height: 8px;\n            border-radius: 4px;\n            overflow: hidden;\n            margin: 1.5rem 0;\n        }\n\n        .wp-pdf-progress-bar-fill {\n            background: var(--wp-pdf-primary);\n            width: 0%;\n            height: 100%;\n            transition: width 0.1s ease;\n        }\n\n        \/* History panel list styling *\/\n        .wp-pdf-history-list {\n            display: flex;\n            flex-direction: column;\n            gap: 0.5rem;\n        }\n\n        .wp-pdf-history-item {\n            font-size: 0.8125rem;\n            padding: 0.5rem;\n            border-radius: 6px;\n            border: 1px solid var(--wp-pdf-border);\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            background: rgba(0,0,0,0.01);\n        }\n\n        \/* Inline SVG Icons Helpers *\/\n        .wp-pdf-icon {\n            width: 18px;\n            height: 18px;\n            fill: currentColor;\n            display: inline-block;\n        }\n\n        \/* Keyboard Shortcuts helper visual tags *\/\n        .wp-pdf-kbd {\n            background: var(--wp-pdf-border);\n            border-radius: 4px;\n            padding: 2px 5px;\n            font-size: 0.75rem;\n            font-family: monospace;\n        }\n    <\/style>\n<\/head>\n<body>\n\n<div class=\"wp-pdf-app-scope\" id=\"wp-pdf-app\">\n    <div class=\"wp-pdf-container\">\n\n        <header class=\"wp-pdf-header\">\n            <div class=\"wp-pdf-logo-section\">\n                <h1>All-in-One PDF \u2194 JPG<\/h1>\n                <p>Completely local secure browser conversions<\/p>\n            <\/div>\n            <div class=\"wp-pdf-global-controls\">\n                <div class=\"wp-pdf-mode-switcher\">\n                    <button class=\"wp-pdf-mode-btn wp-pdf-active-mode\" id=\"wp-pdf-mode-pdf-to-jpg\">PDF to JPG<\/button>\n                    <button class=\"wp-pdf-mode-btn\" id=\"wp-pdf-mode-jpg-to-pdf\">JPG to PDF<\/button>\n                <\/div>\n                <button class=\"wp-pdf-btn\" id=\"wp-pdf-dark-toggle\" title=\"Toggle Dark\/Light Mode\">\ud83c\udf13<\/button>\n            <\/div>\n        <\/header>\n\n        <main class=\"wp-pdf-grid\">\n\n            <div class=\"wp-pdf-sidebar\">\n\n                <div class=\"wp-pdf-card\">\n                    <div class=\"wp-pdf-card-header\">\n                        <span id=\"wp-pdf-panel-title\">PDF to JPG Options<\/span>\n                    <\/div>\n                    <div class=\"wp-pdf-card-body\">\n                        \n                        <div id=\"wp-pdf-options-pdf2jpg\">\n                            <div class=\"wp-pdf-field-group\" style=\"margin-bottom:1rem;\">\n                                <label>Render Resolution<\/label>\n                                <select class=\"wp-pdf-select\" id=\"wp-pdf-val-dpi\">\n                                    <option value=\"72\">72 DPI (Low res, Fast)<\/option>\n                                    <option value=\"150\" selected>150 DPI (Standard)<\/option>\n                                    <option value=\"300\">300 DPI (High Print Quality)<\/option>\n                                <\/select>\n                            <\/div>\n\n                            <div class=\"wp-pdf-field-group\" style=\"margin-bottom:1rem;\">\n                                <label>Image Format<\/label>\n                                <select class=\"wp-pdf-select\" id=\"wp-pdf-val-format\">\n                                    <option value=\"image\/jpeg\">JPG<\/option>\n                                    <option value=\"image\/png\">PNG<\/option>\n                                <\/select>\n                            <\/div>\n\n                            <div class=\"wp-pdf-field-group\" style=\"margin-bottom:1rem;\">\n                                <label>JPG Quality<\/label>\n                                <select class=\"wp-pdf-select\" id=\"wp-pdf-val-quality\">\n                                    <option value=\"0.6\">Medium Quality (60%)<\/option>\n                                    <option value=\"0.85\" selected>High Quality (85%)<\/option>\n                                    <option value=\"1.0\">Maximum Quality (100%)<\/option>\n                                <\/select>\n                            <\/div>\n                        <\/div>\n\n                        <div id=\"wp-pdf-options-jpg2pdf\" style=\"display:none;\">\n                            <div class=\"wp-pdf-field-group\" style=\"margin-bottom:1rem;\">\n                                <label>Document Layout<\/label>\n                                <select class=\"wp-pdf-select\" id=\"wp-pdf-val-orientation\">\n                                    <option value=\"portrait\">Portrait<\/option>\n                                    <option value=\"landscape\">Landscape<\/option>\n                                <\/select>\n                            <\/div>\n\n                            <div class=\"wp-pdf-field-group\" style=\"margin-bottom:1rem;\">\n                                <label>Page Standard Size<\/label>\n                                <select class=\"wp-pdf-select\" id=\"wp-pdf-val-pagesize\">\n                                    <option value=\"a4\">A4<\/option>\n                                    <option value=\"letter\">Letter<\/option>\n                                    <option value=\"original\">Fit Image Size<\/option>\n                                <\/select>\n                            <\/div>\n\n                            <div class=\"wp-pdf-field-group\" style=\"margin-bottom:1rem;\">\n                                <label>Margins Size (mm)<\/label>\n                                <select class=\"wp-pdf-select\" id=\"wp-pdf-val-margins\">\n                                    <option value=\"0\">0mm (No margins)<\/option>\n                                    <option value=\"10\" selected>10mm (Standard)<\/option>\n                                    <option value=\"20\">20mm (Wide)<\/option>\n                                <\/select>\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"wp-pdf-field-group\">\n                            <label>Rename Output File<\/label>\n                            <input type=\"text\" class=\"wp-pdf-input\" id=\"wp-pdf-val-filename\" value=\"converted_document\">\n                        <\/div>\n\n                        <div style=\"display:flex; gap:0.5rem; margin-top:0.5rem;\">\n                            <button class=\"wp-pdf-btn\" id=\"wp-pdf-btn-reset\" style=\"flex:1;\">Clear All<\/button>\n                            <button class=\"wp-pdf-btn wp-pdf-btn-primary\" id=\"wp-pdf-btn-convert\" style=\"flex:1.5;\">Convert Now<\/button>\n                        <\/div>\n\n                    <\/div>\n                <\/div>\n\n                <div class=\"wp-pdf-card\">\n                    <div class=\"wp-pdf-card-header\">\n                        <span>Recent Logs<\/span>\n                    <\/div>\n                    <div class=\"wp-pdf-card-body\">\n                        <div class=\"wp-pdf-history-list\" id=\"wp-pdf-history-container\">\n                            <\/div>\n                    <\/div>\n                <\/div>\n\n                <div class=\"wp-pdf-card\">\n                    <div class=\"wp-pdf-card-body\" style=\"font-size:0.75rem; color:var(--wp-pdf-text-sub); display:flex; flex-direction:column; gap:0.25rem;\">\n                        <div>\ud83d\udca1 <strong>Shortcuts:<\/strong><\/div>\n                        <div><span class=\"wp-pdf-kbd\">Ctrl + V<\/span> Paste file in browser window<\/div>\n                        <div><span class=\"wp-pdf-kbd\">Esc<\/span> Clear active queue instantly<\/div>\n                    <\/div>\n                <\/div>\n\n            <\/div>\n\n            <div class=\"wp-pdf-preview-container\">\n\n                <div class=\"wp-pdf-dropzone\" id=\"wp-pdf-drop-zone\">\n                    <svg class=\"wp-pdf-dropzone-icon\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z\"\/><\/svg>\n                    <div class=\"wp-pdf-dropzone-text\">\n                        <h3 id=\"wp-pdf-dropzone-primary-text\">Drag &#038; Drop PDF file here<\/h3>\n                        <p id=\"wp-pdf-dropzone-secondary-text\">or click to browse from device explorer<\/p>\n                    <\/div>\n                    <input type=\"file\" class=\"wp-pdf-file-input\" id=\"wp-pdf-file-picker\" multiple>\n                <\/div>\n\n                <div class=\"wp-pdf-toolbar\">\n                    <div style=\"font-size:0.875rem; font-weight:700;\" id=\"wp-pdf-queue-status\">\n                        Queue: Empty\n                    <\/div>\n                    <div id=\"wp-pdf-export-panel\" style=\"display:none; gap:0.5rem;\">\n                        <button class=\"wp-pdf-btn\" id=\"wp-pdf-btn-download-all\">Download All Pages<\/button>\n                    <\/div>\n                <\/div>\n\n                <div class=\"wp-pdf-pages-grid\" id=\"wp-pdf-grid-view\">\n                    <\/div>\n\n            <\/div>\n\n        <\/main>\n\n    <\/div>\n<\/div>\n\n<div class=\"wp-pdf-progress-overlay\" id=\"wp-pdf-progress-modal\">\n    <div class=\"wp-pdf-progress-card\">\n        <h3 id=\"wp-pdf-modal-title\">Processing Document<\/h3>\n        <p style=\"font-size:0.875rem; color:var(--wp-pdf-text-sub);\" id=\"wp-pdf-modal-subtitle\">Reading data segments&#8230;<\/p>\n        <div class=\"wp-pdf-progress-bar-container\">\n            <div class=\"wp-pdf-progress-bar-fill\" id=\"wp-pdf-modal-bar-fill\"><\/div>\n        <\/div>\n        <div style=\"font-size:0.75rem; font-weight:700;\" id=\"wp-pdf-modal-timer\">Time: 0s<\/div>\n    <\/div>\n<\/div>\n\n<script>\n(function() {\n    'use strict';\n\n    \/\/ Application state\n    const wpPdfState = {\n        mode: 'pdf2jpg', \/\/ 'pdf2jpg' or 'jpg2pdf'\n        filesQueue: [], \/\/ stores file instances \/ page metadata object\n        recentHistory: [],\n        darkActive: false,\n        draggedElementIdx: null\n    };\n\n    \/\/ Node pointers\n    const wpPdfNodes = {\n        app: document.getElementById('wp-pdf-app'),\n        modePdf2Jpg: document.getElementById('wp-pdf-mode-pdf-to-jpg'),\n        modeJpg2Pdf: document.getElementById('wp-pdf-mode-jpg-to-pdf'),\n        darkToggle: document.getElementById('wp-pdf-dark-toggle'),\n        panelTitle: document.getElementById('wp-pdf-panel-title'),\n        optionsPdf2Jpg: document.getElementById('wp-pdf-options-pdf2jpg'),\n        optionsJpg2Pdf: document.getElementById('wp-pdf-options-jpg2pdf'),\n        filenameInput: document.getElementById('wp-pdf-val-filename'),\n        btnReset: document.getElementById('wp-pdf-btn-reset'),\n        btnConvert: document.getElementById('wp-pdf-btn-convert'),\n        historyContainer: document.getElementById('wp-pdf-history-container'),\n        dropZone: document.getElementById('wp-pdf-drop-zone'),\n        filePicker: document.getElementById('wp-pdf-file-picker'),\n        dropzoneTextPrimary: document.getElementById('wp-pdf-dropzone-primary-text'),\n        dropzoneTextSecondary: document.getElementById('wp-pdf-dropzone-secondary-text'),\n        queueStatus: document.getElementById('wp-pdf-queue-status'),\n        exportPanel: document.getElementById('wp-pdf-export-panel'),\n        btnDownloadAll: document.getElementById('wp-pdf-btn-download-all'),\n        gridView: document.getElementById('wp-pdf-grid-view'),\n        progressModal: document.getElementById('wp-pdf-progress-modal'),\n        modalTitle: document.getElementById('wp-pdf-modal-title'),\n        modalSubtitle: document.getElementById('wp-pdf-modal-subtitle'),\n        modalBarFill: document.getElementById('wp-pdf-modal-bar-fill'),\n        modalTimer: document.getElementById('wp-pdf-modal-timer')\n    };\n\n    \/\/ Library paths initialization\n    pdfjsLib.GlobalWorkerOptions.workerSrc = 'https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/3.4.120\/pdf.worker.min.js';\n\n    \/\/ Bootloader init routine\n    function wpPdfInit() {\n        wpPdfSetupListeners();\n        wpPdfLoadHistory();\n        wpPdfResetWorkspace();\n    }\n\n    \/\/ Connect event targets\n    function wpPdfSetupListeners() {\n        \/\/ Mode Switches\n        wpPdfNodes.modePdf2Jpg.addEventListener('click', () => wpPdfSwitchMode('pdf2jpg'));\n        wpPdfNodes.modeJpg2Pdf.addEventListener('click', () => wpPdfSwitchMode('jpg2pdf'));\n\n        \/\/ Dark view modes\n        wpPdfNodes.darkToggle.addEventListener('click', wpPdfToggleDarkMode);\n\n        \/\/ Core buttons\n        wpPdfNodes.btnReset.addEventListener('click', wpPdfResetWorkspace);\n        wpPdfNodes.btnConvert.addEventListener('click', wpPdfRunConversion);\n        wpPdfNodes.btnDownloadAll.addEventListener('click', wpPdfTriggerZipDownload);\n\n        \/\/ Upload zone handlers\n        wpPdfNodes.filePicker.addEventListener('change', wpPdfHandleFileSelection);\n        wpPdfNodes.dropZone.addEventListener('dragover', wpPdfDragOverHandler);\n        wpPdfNodes.dropZone.addEventListener('dragleave', wpPdfDragLeaveHandler);\n        wpPdfNodes.dropZone.addEventListener('drop', wpPdfDropHandler);\n\n        \/\/ Paste support\n        window.addEventListener('paste', wpPdfPasteHandler);\n\n        \/\/ Keyboard shortcuts Esc logic\n        window.addEventListener('keydown', (e) => {\n            if (e.key === 'Escape') wpPdfResetWorkspace();\n        });\n    }\n\n    \/\/ Interactive view transformations\n    function wpPdfSwitchMode(selectedMode) {\n        if (wpPdfState.mode === selectedMode) return;\n        wpPdfState.mode = selectedMode;\n\n        wpPdfNodes.modePdf2Jpg.classList.toggle('wp-pdf-active-mode', selectedMode === 'pdf2jpg');\n        wpPdfNodes.modeJpg2Pdf.classList.toggle('wp-pdf-active-mode', selectedMode === 'jpg2pdf');\n\n        if (selectedMode === 'pdf2jpg') {\n            wpPdfNodes.panelTitle.innerText = \"PDF to JPG Options\";\n            wpPdfNodes.optionsPdf2Jpg.style.display = 'block';\n            wpPdfNodes.optionsJpg2Pdf.style.display = 'none';\n            wpPdfNodes.dropzoneTextPrimary.innerText = \"Drag & Drop PDF file here\";\n            wpPdfNodes.dropzoneTextSecondary.innerText = \"or click to browse from device explorer\";\n            wpPdfNodes.filePicker.removeAttribute('multiple');\n            wpPdfNodes.filePicker.accept = \"application\/pdf\";\n        } else {\n            wpPdfNodes.panelTitle.innerText = \"JPG to PDF Options\";\n            wpPdfNodes.optionsPdf2Jpg.style.display = 'none';\n            wpPdfNodes.optionsJpg2Pdf.style.display = 'block';\n            wpPdfNodes.dropzoneTextPrimary.innerText = \"Drag & Drop JPG\/PNG files here\";\n            wpPdfNodes.dropzoneTextSecondary.innerText = \"Supports multiple images selection\";\n            wpPdfNodes.filePicker.setAttribute('multiple', 'true');\n            wpPdfNodes.filePicker.accept = \"image\/jpeg,image\/jpg,image\/png\";\n        }\n\n        wpPdfResetWorkspace();\n    }\n\n    \/\/ Toggle stylesheet body mode\n    function wpPdfToggleDarkMode() {\n        wpPdfState.darkActive = !wpPdfState.darkActive;\n        wpPdfNodes.app.classList.toggle('wp-pdf-dark-mode', wpPdfState.darkActive);\n    }\n\n    \/\/ Load file list triggers\n    function wpPdfHandleFileSelection(e) {\n        wpPdfProcessUploadedFiles(e.target.files);\n    }\n\n    function wpPdfDragOverHandler(e) {\n        e.preventDefault();\n        wpPdfNodes.dropZone.classList.add('wp-pdf-dragover');\n    }\n\n    function wpPdfDragLeaveHandler() {\n        wpPdfNodes.dropZone.classList.remove('wp-pdf-dragover');\n    }\n\n    function wpPdfDropHandler(e) {\n        e.preventDefault();\n        wpPdfNodes.dropZone.classList.remove('wp-pdf-dragover');\n        if (e.dataTransfer.files) {\n            wpPdfProcessUploadedFiles(e.dataTransfer.files);\n        }\n    }\n\n    \/\/ Paste file captures\n    function wpPdfPasteHandler(e) {\n        if (e.clipboardData && e.clipboardData.files.length > 0) {\n            wpPdfProcessUploadedFiles(e.clipboardData.files);\n        }\n    }\n\n    \/\/ Core validation and parse handler\n    async function wpPdfProcessUploadedFiles(filesList) {\n        if (!filesList || filesList.length === 0) return;\n\n        \/\/ Reset workspace to load fresh files\n        wpPdfResetWorkspace(false);\n\n        wpPdfShowModal(\"Analyzing Files\", \"Reading formats...\");\n\n        try {\n            if (wpPdfState.mode === 'pdf2jpg') {\n                const firstPdf = Array.from(filesList).find(f => f.type === 'application\/pdf' || f.name.endsWith('.pdf'));\n                if (!firstPdf) throw new Error(\"No valid PDF file found in selection.\");\n\n                wpPdfNodes.filenameInput.value = firstPdf.name.replace(\/\\.[^\/.]+$\/, \"\");\n                await wpPdfRenderPdfPagesIntoQueue(firstPdf);\n            } else {\n                \/\/ JPG to PDF multiple loads\n                const images = Array.from(filesList).filter(f => f.type.startsWith('image\/'));\n                if (images.length === 0) throw new Error(\"No supported image files (JPG, PNG) found.\");\n\n                for (let i = 0; i < images.length; i++) {\n                    const imgFile = images[i];\n                    const base64Url = await wpPdfConvertFileToBase64(imgFile);\n                    wpPdfState.filesQueue.push({\n                        id: 'img-' + Date.now() + '-' + i,\n                        src: base64Url,\n                        name: imgFile.name,\n                        rotation: 0,\n                        size: (imgFile.size \/ 1024).toFixed(1) + ' KB'\n                    });\n                }\n                wpPdfUpdateQueueUI();\n            }\n        } catch (err) {\n            alert(\"Error reading file: \" + err.message);\n        } finally {\n            wpPdfHideModal();\n        }\n    }\n\n    \/\/ Convert local files to base64 URLs\n    function wpPdfConvertFileToBase64(fileObj) {\n        return new Promise((resolve, reject) => {\n            const reader = new FileReader();\n            reader.onload = (e) => resolve(e.target.result);\n            reader.onerror = (err) => reject(err);\n            reader.readAsDataURL(fileObj);\n        });\n    }\n\n    \/\/ PDF.js renderer workflow\n    async function wpPdfRenderPdfPagesIntoQueue(pdfFile) {\n        const fileArrBuffer = await pdfFile.arrayBuffer();\n        const pdfDocInstance = await pdfjsLib.getDocument({ data: fileArrBuffer }).promise;\n        const totalPagesCount = pdfDocInstance.numPages;\n\n        for (let pageNum = 1; pageNum <= totalPagesCount; pageNum++) {\n            wpPdfUpdateProgressPercent(Math.round((pageNum \/ totalPagesCount) * 100));\n            wpPdfNodes.modalSubtitle.innerText = `Rendering page ${pageNum} of ${totalPagesCount}...`;\n\n            const page = await pdfDocInstance.getPage(pageNum);\n            \/\/ Default render scaling factor for preview\n            const viewport = page.getViewport({ scale: 1.5 });\n\n            const canvas = document.createElement('canvas');\n            const context = canvas.getContext('2d');\n            canvas.height = viewport.height;\n            canvas.width = viewport.width;\n\n            await page.render({ canvasContext: context, viewport: viewport }).promise;\n\n            wpPdfState.filesQueue.push({\n                id: 'pdf-p-' + pageNum,\n                src: canvas.toDataURL('image\/jpeg', 0.85),\n                name: `Page ${pageNum}`,\n                pageNum: pageNum,\n                rotation: 0,\n                width: viewport.width,\n                height: viewport.height\n            });\n        }\n\n        wpPdfUpdateQueueUI();\n    }\n\n    \/\/ Update queue grid view\n    function wpPdfUpdateQueueUI() {\n        wpPdfNodes.gridView.innerHTML = '';\n        wpPdfNodes.queueStatus.innerText = `Queue Count: ${wpPdfState.filesQueue.length} element(s)`;\n\n        if (wpPdfState.filesQueue.length > 0) {\n            wpPdfNodes.exportPanel.style.display = 'flex';\n        } else {\n            wpPdfNodes.exportPanel.style.display = 'none';\n        }\n\n        wpPdfState.filesQueue.forEach((item, index) => {\n            const pageCard = document.createElement('div');\n            pageCard.className = 'wp-pdf-page-item';\n            pageCard.setAttribute('draggable', true);\n            pageCard.dataset.index = index;\n\n            \/\/ Setup drag-and-drop sort events\n            pageCard.addEventListener('dragstart', (e) => {\n                wpPdfState.draggedElementIdx = index;\n                e.dataTransfer.effectAllowed = 'move';\n            });\n\n            pageCard.addEventListener('dragover', (e) => {\n                e.preventDefault();\n            });\n\n            pageCard.addEventListener('drop', (e) => {\n                e.preventDefault();\n                const targetIdx = parseInt(pageCard.dataset.index, 10);\n                if (wpPdfState.draggedElementIdx !== null && wpPdfState.draggedElementIdx !== targetIdx) {\n                    const swapped = wpPdfState.filesQueue.splice(wpPdfState.draggedElementIdx, 1)[0];\n                    wpPdfState.filesQueue.splice(targetIdx, 0, swapped);\n                    wpPdfUpdateQueueUI();\n                }\n            });\n\n            pageCard.innerHTML = `\n                <div class=\"wp-pdf-page-actions\">\n                    <button class=\"wp-pdf-action-btn\" title=\"Rotate Clockwise\" data-action=\"rotate\" data-idx=\"${index}\">\ud83d\udd04<\/button>\n                    <button class=\"wp-pdf-action-btn wp-pdf-action-btn-danger\" title=\"Remove\" data-action=\"delete\" data-idx=\"${index}\">\ud83d\uddd1\ufe0f<\/button>\n                <\/div>\n                <div class=\"wp-pdf-page-item-thumb\">\n                    <img decoding=\"async\" src=\"${item.src}\" style=\"transform: rotate(${item.rotation}deg)\" alt=\"${item.name}\">\n                <\/div>\n                <div class=\"wp-pdf-page-meta\">\n                    <span>${item.name}<\/span>\n                    <span>${item.size || ''}<\/span>\n                <\/div>\n            `;\n\n            \/\/ Action delegates binding\n            pageCard.querySelector('[data-action=\"rotate\"]').addEventListener('click', (e) => {\n                e.stopPropagation();\n                wpPdfState.filesQueue[index].rotation = (wpPdfState.filesQueue[index].rotation + 90) % 360;\n                wpPdfUpdateQueueUI();\n            });\n\n            pageCard.querySelector('[data-action=\"delete\"]').addEventListener('click', (e) => {\n                e.stopPropagation();\n                wpPdfState.filesQueue.splice(index, 1);\n                wpPdfUpdateQueueUI();\n            });\n\n            wpPdfNodes.gridView.appendChild(pageCard);\n        });\n    }\n\n    \/\/ Master conversion pipeline launcher\n    async function wpPdfRunConversion() {\n        if (wpPdfState.filesQueue.length === 0) {\n            alert(\"No files in active conversion queue.\");\n            return;\n        }\n\n        const startTimestamp = Date.now();\n        wpPdfShowModal(\"Converting Document\", \"Packing rendering streams...\");\n\n        \/\/ Update process timer intervals\n        const timerInterval = setInterval(() => {\n            const duration = Math.round((Date.now() - startTimestamp) \/ 1000);\n            wpPdfNodes.modalTimer.innerText = `Time: ${duration}s`;\n        }, 1000);\n\n        try {\n            if (wpPdfState.mode === 'pdf2jpg') {\n                await wpPdfConvertPdfToJpgWorkflow();\n            } else {\n                await wpPdfConvertJpgToPdfWorkflow();\n            }\n            wpPdfAddHistoryItem(wpPdfState.mode === 'pdf2jpg' ? 'PDF to JPG' : 'JPG to PDF');\n        } catch (err) {\n            alert(\"Conversion failed: \" + err.message);\n        } finally {\n            clearInterval(timerInterval);\n            wpPdfHideModal();\n        }\n    }\n\n    \/\/ Execution pipeline: Render output zip or single image target\n    async function wpPdfConvertPdfToJpgWorkflow() {\n        const qualityVal = parseFloat(document.getElementById('wp-pdf-val-quality').value);\n        const formatType = document.getElementById('wp-pdf-val-format').value;\n        const fileExt = formatType === 'image\/png' ? 'png' : 'jpg';\n\n        if (wpPdfState.filesQueue.length === 1) {\n            \/\/ Instant simple download\n            const dLink = document.createElement('a');\n            dLink.download = `${wpPdfNodes.filenameInput.value}.${fileExt}`;\n            dLink.href = wpPdfState.filesQueue[0].src;\n            dLink.click();\n        } else {\n            \/\/ Bundle to zip\n            const zipFile = new JSZip();\n            const imgFolder = zipFile.folder(\"converted_images\");\n\n            for (let i = 0; i < wpPdfState.filesQueue.length; i++) {\n                const item = wpPdfState.filesQueue[i];\n                wpPdfUpdateProgressPercent(Math.round((i \/ wpPdfState.filesQueue.length) * 100));\n                \n                \/\/ Fetch Base64 data string\n                const cleanBase64 = item.src.split(',')[1];\n                imgFolder.file(`page_${i + 1}.${fileExt}`, cleanBase64, { base64: true });\n            }\n\n            const zipBlobContent = await zipFile.generateAsync({ type: \"blob\" });\n            const dLink = document.createElement('a');\n            dLink.download = `${wpPdfNodes.filenameInput.value}_images.zip`;\n            dLink.href = URL.createObjectURL(zipBlobContent);\n            dLink.click();\n        }\n    }\n\n    \/\/ Execution pipeline: Compile images directly into high-res multi-page PDF output\n    async function wpPdfConvertJpgToPdfWorkflow() {\n        const docLayout = document.getElementById('wp-pdf-val-orientation').value;\n        const pageSize = document.getElementById('wp-pdf-val-pagesize').value;\n        const marginSize = parseInt(document.getElementById('wp-pdf-val-margins').value, 10);\n\n        const { jsPDF } = window.jspdf;\n        \/\/ Default PDF generation profiles layout selection\n        const pdfDoc = new jsPDF({\n            orientation: docLayout,\n            unit: 'mm',\n            format: pageSize === 'original' ? 'a4' : pageSize\n        });\n\n        for (let i = 0; i < wpPdfState.filesQueue.length; i++) {\n            wpPdfUpdateProgressPercent(Math.round((i \/ wpPdfState.filesQueue.length) * 100));\n            const item = wpPdfState.filesQueue[i];\n\n            if (i > 0) pdfDoc.addPage();\n\n            \/\/ Determine dimensions and load image directly on canvas context\n            const widthBound = pdfDoc.internal.pageSize.getWidth();\n            const heightBound = pdfDoc.internal.pageSize.getHeight();\n\n            const imageContent = new Image();\n            imageContent.src = item.src;\n            await new Promise(r => imageContent.onload = r);\n\n            \/\/ Calculate scaled positions\n            const xMargin = marginSize;\n            const yMargin = marginSize;\n            const targetWidth = widthBound - (xMargin * 2);\n            const targetHeight = heightBound - (yMargin * 2);\n\n            pdfDoc.addImage(imageContent, 'JPEG', xMargin, yMargin, targetWidth, targetHeight);\n        }\n\n        pdfDoc.save(`${wpPdfNodes.filenameInput.value}.pdf`);\n    }\n\n    \/\/ Download zip shortcut button action mapping\n    function wpPdfTriggerZipDownload() {\n        wpPdfRunConversion();\n    }\n\n    \/\/ Recent conversion history logs\n    function wpPdfLoadHistory() {\n        const stored = localStorage.getItem('wp_pdf_recent_history');\n        if (stored) {\n            wpPdfState.recentHistory = JSON.parse(stored);\n            wpPdfRenderHistoryUI();\n        }\n    }\n\n    function wpPdfAddHistoryItem(typeDesc) {\n        const record = {\n            id: Date.now(),\n            time: new Date().toLocaleTimeString(),\n            type: typeDesc,\n            output: wpPdfNodes.filenameInput.value\n        };\n\n        wpPdfState.recentHistory.unshift(record);\n        if (wpPdfState.recentHistory.length > 5) {\n            wpPdfState.recentHistory.pop();\n        }\n\n        localStorage.setItem('wp_pdf_recent_history', JSON.stringify(wpPdfState.recentHistory));\n        wpPdfRenderHistoryUI();\n    }\n\n    function wpPdfRenderHistoryUI() {\n        wpPdfNodes.historyContainer.innerHTML = '';\n        if (wpPdfState.recentHistory.length === 0) {\n            wpPdfNodes.historyContainer.innerHTML = '<div style=\"font-size:0.75rem; color:var(--wp-pdf-text-sub);\">No conversion logs yet.<\/div>';\n            return;\n        }\n\n        wpPdfState.recentHistory.forEach(item => {\n            const el = document.createElement('div');\n            el.className = 'wp-pdf-history-item';\n            el.innerHTML = `\n                <div>\n                    <strong>${item.type}<\/strong>\n                    <div style=\"font-size:0.6875rem; color:var(--wp-pdf-text-sub);\">${item.output}<\/div>\n                <\/div>\n                <span style=\"font-size:0.6875rem; color:var(--wp-pdf-text-sub);\">${item.time}<\/span>\n            `;\n            wpPdfNodes.historyContainer.appendChild(el);\n        });\n    }\n\n    \/\/ Progressive modal triggers\n    function wpPdfShowModal(title, subtitle) {\n        wpPdfNodes.modalTitle.innerText = title;\n        wpPdfNodes.modalSubtitle.innerText = subtitle;\n        wpPdfNodes.modalBarFill.style.width = '0%';\n        wpPdfNodes.progressModal.style.display = 'flex';\n    }\n\n    function wpPdfUpdateProgressPercent(percent) {\n        wpPdfNodes.modalBarFill.style.width = `${percent}%`;\n    }\n\n    function wpPdfHideModal() {\n        wpPdfNodes.progressModal.style.display = 'none';\n    }\n\n    \/\/ Reset workspace variables\n    function wpPdfResetWorkspace(clearFilenameInput = true) {\n        wpPdfState.filesQueue = [];\n        wpPdfNodes.gridView.innerHTML = '';\n        wpPdfNodes.queueStatus.innerText = \"Queue: Empty\";\n        wpPdfNodes.exportPanel.style.display = 'none';\n        if (clearFilenameInput) {\n            wpPdfNodes.filenameInput.value = \"converted_document\";\n        }\n    }\n\n    \/\/ Start App Routine inside namespace\n    wpPdfInit();\n\n})();\n<\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>All-in-One PDF \u2194 JPG Converter All-in-One PDF \u2194 JPG Completely local secure browser conversions PDF to JPG JPG to PDF \ud83c\udf13 PDF to JPG Options Render Resolution 72 DPI (Low res, Fast)150 DPI (Standard)300 DPI (High Print Quality) Image Format JPGPNG JPG Quality Medium Quality (60%)High Quality (85%)Maximum Quality (100%) Document Layout PortraitLandscape Page Standard [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-501","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/501","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/comments?post=501"}],"version-history":[{"count":1,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/501\/revisions"}],"predecessor-version":[{"id":502,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/501\/revisions\/502"}],"wp:attachment":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/media?parent=501"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}