{"id":92,"date":"2025-04-10T13:37:23","date_gmt":"2025-04-10T13:37:23","guid":{"rendered":"https:\/\/majhinaukri.in\/tools\/?page_id=92"},"modified":"2026-02-02T12:39:12","modified_gmt":"2026-02-02T12:39:12","slug":"image-to-pdf","status":"publish","type":"page","link":"https:\/\/majhinaukri.in\/tools\/image-to-pdf\/","title":{"rendered":"Image To PDF"},"content":{"rendered":"<div class='code-block code-block-15' style='margin: 8px 0; clear: both;'>\n<link href=\"https:\/\/cdn.jsdelivr.net\/npm\/tailwindcss@2.2.19\/dist\/tailwind.min.css\" rel=\"stylesheet\">\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf-lib\/1.17.1\/pdf-lib.min.js\"><\/script>\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/FileSaver.js\/2.0.5\/FileSaver.min.js\"><\/script>\n    <style>\n        .img-to-pdf-container {\n            max-width: 800px;\n            margin: 0 auto;\n            font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n        }\n        .img-to-pdf-header {\n            text-align: center;\n            margin-bottom: 2rem;\n        }\n        .img-to-pdf-header h2 {\n            font-size: 2rem;\n            color: #1a1a1a;\n            margin-bottom: 0.5rem;\n        }\n        .img-to-pdf-header p {\n            color: #666;\n        }\n        .img-to-pdf-dropzone {\n            border: 2px dashed #2271b1;\n            border-radius: 8px;\n            padding: 2rem;\n            text-align: center;\n            cursor: pointer;\n            transition: all 0.3s ease;\n            background: #fff;\n            margin-bottom: 1.5rem;\n        }\n        .img-to-pdf-dropzone:hover {\n            background-color: #f0f6fc;\n            border-color: #135e96;\n        }\n        .img-to-pdf-dropzone svg {\n            width: 48px;\n            height: 48px;\n            margin: 0 auto 1rem;\n            display: block;\n            color: #2271b1;\n        }\n        .img-to-pdf-upload-text {\n            color: #2271b1;\n            font-weight: 500;\n            margin-bottom: 0.5rem;\n        }\n        .img-to-pdf-preview {\n            display: none;\n            margin-top: 1.5rem;\n        }\n        .img-to-pdf-preview h3 {\n            font-size: 1.2rem;\n            color: #1a1a1a;\n            margin-bottom: 1rem;\n        }\n        .img-to-pdf-grid {\n            display: grid;\n            grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\n            gap: 1rem;\n            margin-bottom: 1.5rem;\n        }\n        .img-to-pdf-thumbnail {\n            position: relative;\n            border-radius: 4px;\n            overflow: hidden;\n            background: white;\n            border: 1px solid #ddd;\n            cursor: move;\n            transition: transform 0.2s, box-shadow 0.2s;\n        }\n        .img-to-pdf-thumbnail.dragging {\n            opacity: 0.5;\n            transform: scale(0.95);\n        }\n        .img-to-pdf-thumbnail:hover {\n            box-shadow: 0 2px 8px rgba(0,0,0,0.1);\n        }\n        .img-to-pdf-thumbnail img {\n            width: 100%;\n            height: 150px;\n            object-fit: cover;\n            display: block;\n        }\n        .img-to-pdf-thumbnail-actions {\n            position: absolute;\n            top: 0;\n            right: 0;\n            display: flex;\n            gap: 4px;\n            padding: 4px;\n            background: rgba(255,255,255,0.9);\n            border-bottom-left-radius: 4px;\n            opacity: 0;\n            transition: opacity 0.2s;\n        }\n        .img-to-pdf-thumbnail:hover .img-to-pdf-thumbnail-actions {\n            opacity: 1;\n        }\n        .img-to-pdf-thumbnail button {\n            background: #fff;\n            border: 1px solid #ddd;\n            border-radius: 4px;\n            width: 24px;\n            height: 24px;\n            cursor: pointer;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 14px;\n            color: #666;\n            transition: all 0.2s;\n        }\n        .img-to-pdf-thumbnail button:hover {\n            background: #f0f0f0;\n            color: #2271b1;\n        }\n        .img-to-pdf-thumbnail button.delete-btn:hover {\n            background: #dc3232;\n            color: white;\n            border-color: #dc3232;\n        }\n        .img-to-pdf-thumbnail-order {\n            position: absolute;\n            bottom: 0;\n            left: 0;\n            background: rgba(255,255,255,0.9);\n            padding: 2px 6px;\n            border-top-right-radius: 4px;\n            font-size: 12px;\n            color: #666;\n        }\n        .img-to-pdf-options {\n            background: #fff;\n            padding: 1.5rem;\n            border-radius: 8px;\n            margin-bottom: 1.5rem;\n        }\n        .img-to-pdf-option {\n            margin-bottom: 1rem;\n        }\n        .img-to-pdf-option label {\n            display: block;\n            margin-bottom: 0.5rem;\n            color: #1a1a1a;\n            font-weight: 500;\n        }\n        .img-to-pdf-option select {\n            width: 100%;\n            padding: 0.5rem;\n            border: 1px solid #ddd;\n            border-radius: 4px;\n        }\n        .img-to-pdf-option input[type=\"range\"] {\n            width: 100%;\n        }\n        .img-to-pdf-quality-value {\n            text-align: right;\n            color: #666;\n            font-size: 0.9rem;\n        }\n        .img-to-pdf-convert {\n            background: #2271b1;\n            color: white;\n            border: none;\n            padding: 0.75rem 1.5rem;\n            border-radius: 4px;\n            width: 100%;\n            font-size: 1rem;\n            cursor: pointer;\n            transition: background-color 0.2s;\n        }\n        .img-to-pdf-convert:hover {\n            background: #135e96;\n        }\n        .img-to-pdf-convert:disabled {\n            background: #ddd;\n            cursor: not-allowed;\n        }\n        .img-to-pdf-loading {\n            display: none;\n            text-align: center;\n            padding: 1.5rem;\n        }\n        .img-to-pdf-loading svg {\n            animation: spin 1s linear infinite;\n            width: 32px;\n            height: 32px;\n            margin: 0 auto 1rem;\n            color: #2271b1;\n        }\n        @keyframes spin {\n            from { transform: rotate(0deg); }\n            to { transform: rotate(360deg); }\n        }\n        #_mn {\n            text-align: center;\n            font-size: 1.15rem;\n            color: #555;\n            margin-top: 32px;\n            font-weight: 400;\n        }\n        #_mn a {\n            color: #2271b1;\n            text-decoration: underline;\n            font-weight: 500;\n        }\n        \/* Responsive styles *\/\n        @media (max-width: 640px) {\n            .img-to-pdf-container {\n                padding: 0 4px;\n            }\n            .img-to-pdf-header h2 {\n                font-size: 1.3rem;\n            }\n            .img-to-pdf-dropzone {\n                padding: 1rem;\n                font-size: 1rem;\n            }\n            .img-to-pdf-grid {\n                grid-template-columns: 1fr !important;\n                gap: 0.75rem;\n            }\n            .img-to-pdf-thumbnail img {\n                height: 110px;\n            }\n            .img-to-pdf-options {\n                padding: 1rem;\n            }\n            .img-to-pdf-option label {\n                font-size: 1rem;\n            }\n            .img-to-pdf-convert {\n                font-size: 1rem;\n                padding: 0.7rem 1rem;\n            }\n        }\n    <\/style>\n    <div class=\"container mx-auto px-4 py-8\">\n        <div class=\"max-w-3xl mx-auto\">\n           \n           \n\n            <!-- Main Content -->\n            <div class=\"bg-white rounded-lg shadow-lg p-6\">\n                <!-- Drop Zone -->\n                <div class=\"img-to-pdf-dropzone\" id=\"dropZone\" style=\"display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 180px;\">\n                    <input id=\"fileInput\" type=\"file\" multiple accept=\"image\/*\" style=\"display: none;\">\n                    <button id=\"uploadImagesBtn\" class=\"img-to-pdf-convert\" type=\"button\" style=\"font-size: 1.15rem; padding: 1.2rem 2rem; border-radius: 8px; width: 100%; max-width: 340px; margin: 0 auto 10px auto; display: flex; align-items: center; justify-content: center;\">\n                        Upload Images or Drag & Drop\n                    <\/button>\n                    <p style=\"font-size: 0.95rem; color: #666; margin-top: 0.5rem;\">PNG, JPG up to 10MB each<\/p>\n                <\/div>\n\n                <!-- Preview Area -->\n                <div class=\"img-to-pdf-preview\" id=\"previewArea\">\n                    <h3 class=\"flex items-center justify-between\">\n                        <span>Selected Images<\/span>\n                        <small class=\"text-gray-500\">Drag images to reorder<\/small>\n                    <\/h3>\n                    <div class=\"img-to-pdf-grid\" id=\"imagePreview\"><\/div>\n                    \n                    <!-- Options -->\n                    <div class=\"img-to-pdf-options\">\n                        <div class=\"img-to-pdf-option\">\n                            <label for=\"pageSize\">Page Size<\/label>\n                            <select id=\"pageSize\">\n                                <option value=\"A4\">A4<\/option>\n                                <option value=\"Letter\">Letter<\/option>\n                                <option value=\"Legal\">Legal<\/option>\n                            <\/select>\n                        <\/div>\n                        <div class=\"img-to-pdf-option\">\n                            <label for=\"quality\">Image Quality<\/label>\n                            <input type=\"range\" id=\"quality\" min=\"1\" max=\"100\" value=\"80\">\n                            <div class=\"img-to-pdf-quality-value\"><span id=\"qualityValue\">80<\/span>%<\/div>\n                        <\/div>\n                    <\/div>\n\n                    <!-- Convert Button -->\n                    <button id=\"convertBtn\" class=\"img-to-pdf-convert\">\n                        Convert to PDF\n                    <\/button>\n                <\/div>\n\n                <!-- Loading State -->\n                <div class=\"img-to-pdf-loading\" id=\"loadingState\">\n                    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n                        <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"><\/circle>\n                        <path class=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"><\/path>\n                    <\/svg>\n                    <p>Converting your images...<\/p>\n                <\/div>\n            <\/div>\n            \n            <!-- Attribution -->\n            <div id=\"_mn\" style=\"\n                text-align: center;\n                font-size: 1.15rem;\n                color: #555;\n                margin-top: 32px;\n                font-weight: 400;\n            \">\n                Powered by\n                <a href=\"https:\/\/majhinaukri.in\" target=\"_blank\" rel=\"noopener noreferrer\"\n                   style=\"color: #2271b1; text-decoration: underline; font-weight: 500;\">\n                    Majhi Naukri\n                <\/a>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n        (function() {\n            \/\/ Protection logic\n            function _v() {\n                const _m = document.getElementById('_mn');\n                if (!_m || \n                    !_m.innerHTML.includes('Powered by') || \n                    !_m.innerHTML.includes('Majhi Naukri') || \n                    !_m.innerHTML.includes('majhinaukri.in') ||\n                    _m.style.display === 'none' ||\n                    _m.style.visibility === 'hidden' ||\n                    window.getComputedStyle(_m).display === 'none' ||\n                    window.getComputedStyle(_m).visibility === 'hidden' ||\n                    _m.offsetParent === null) {\n                    return false;\n                }\n                const _l = _m.querySelector('a');\n                return _l && _l.href === 'https:\/\/majhinaukri.in\/' && _l.getAttribute('href') === 'https:\/\/majhinaukri.in';\n            }\n\n            const dropZone = document.getElementById('dropZone');\n            const fileInput = document.getElementById('fileInput');\n            const previewArea = document.getElementById('previewArea');\n            const imagePreview = document.getElementById('imagePreview');\n            const convertBtn = document.getElementById('convertBtn');\n            const loadingState = document.getElementById('loadingState');\n            const qualityInput = document.getElementById('quality');\n            const qualityValue = document.getElementById('qualityValue');\n            let selectedFiles = [];\n\n            \/\/ Periodic verification\n            setInterval(() => {\n                if (!_v()) {\n                    fileInput.disabled = true;\n                    convertBtn.disabled = true;\n                    dropZone.style.pointerEvents = 'none';\n                    selectedFiles = [];\n                    imagePreview.innerHTML = '';\n                    previewArea.style.display = 'none';\n                    alert('This tool requires proper attribution to function.');\n                }\n            }, 1000);\n\n            \/\/ Update quality value display\n            qualityInput.addEventListener('input', (e) => {\n                if (!_v()) {\n                    alert('This tool requires proper attribution to function.');\n                    return;\n                }\n                qualityValue.textContent = e.target.value;\n            });\n\n            \/\/ Handle drag and drop\n            dropZone.addEventListener('dragover', (e) => {\n                if (!_v()) {\n                    alert('This tool requires proper attribution to function.');\n                    return;\n                }\n                e.preventDefault();\n                dropZone.style.backgroundColor = '#f0f6fc';\n            });\n\n            dropZone.addEventListener('dragleave', () => {\n                dropZone.style.backgroundColor = '';\n            });\n\n            dropZone.addEventListener('drop', (e) => {\n                e.preventDefault();\n                dropZone.style.backgroundColor = '';\n                const files = Array.from(e.dataTransfer.files).filter(file => file.type.startsWith('image\/'));\n                handleFiles(files);\n            });\n\n            dropZone.addEventListener('click', () => {\n                fileInput.click();\n            });\n\n            \/\/ Handle file input\n            fileInput.addEventListener('change', (e) => {\n                const files = Array.from(e.target.files);\n                handleFiles(files);\n            });\n\n            function handleFiles(files) {\n                selectedFiles = [...selectedFiles, ...files];\n                previewArea.style.display = 'block';\n                updatePreview();\n            }\n\n            function moveFile(index, direction) {\n                if (!_v()) {\n                    alert('This tool requires proper attribution to function.');\n                    return;\n                }\n                \n                if ((direction === -1 && index > 0) || (direction === 1 && index < selectedFiles.length - 1)) {\n                    const temp = selectedFiles[index];\n                    selectedFiles[index] = selectedFiles[index + direction];\n                    selectedFiles[index + direction] = temp;\n                    updatePreview();\n                }\n            }\n\n            function updatePreview() {\n                imagePreview.innerHTML = '';\n                selectedFiles.forEach((file, index) => {\n                    const reader = new FileReader();\n                    reader.onload = (e) => {\n                        const div = document.createElement('div');\n                        div.className = 'img-to-pdf-thumbnail';\n                        div.draggable = true;\n                        div.dataset.index = index;\n                        div.innerHTML = `\n                            <img decoding=\"async\" src=\"${e.target.result}\" alt=\"Preview\" \/>\n                            <div class=\"img-to-pdf-thumbnail-actions\">\n                                ${index > 0 ? `<button onclick=\"window.moveFile(${index}, -1)\" title=\"Move up\">\u2191<\/button>` : ''}\n                                ${index < selectedFiles.length - 1 ? `<button onclick=\"window.moveFile(${index}, 1)\" title=\"Move down\">\u2193<\/button>` : ''}\n                                <button class=\"delete-btn\" onclick=\"window.removeImage(${index})\" title=\"Remove\">\u00d7<\/button>\n                            <\/div>\n                            <div class=\"img-to-pdf-thumbnail-order\">#${index + 1}<\/div>\n                        `;\n\n                        \/\/ Add drag and drop event listeners\n                        div.addEventListener('dragstart', (e) => {\n                            if (!_v()) {\n                                e.preventDefault();\n                                return;\n                            }\n                            div.classList.add('dragging');\n                            e.dataTransfer.setData('text\/plain', index);\n                        });\n\n                        div.addEventListener('dragend', () => {\n                            div.classList.remove('dragging');\n                        });\n\n                        div.addEventListener('dragover', (e) => {\n                            e.preventDefault();\n                        });\n\n                        div.addEventListener('drop', (e) => {\n                            if (!_v()) {\n                                e.preventDefault();\n                                return;\n                            }\n                            e.preventDefault();\n                            const fromIndex = parseInt(e.dataTransfer.getData('text\/plain'));\n                            const toIndex = index;\n                            if (fromIndex !== toIndex) {\n                                const temp = selectedFiles[fromIndex];\n                                selectedFiles.splice(fromIndex, 1);\n                                selectedFiles.splice(toIndex, 0, temp);\n                                updatePreview();\n                            }\n                        });\n\n                        imagePreview.appendChild(div);\n                    };\n                    reader.readAsDataURL(file);\n                });\n            }\n\n            \/\/ Make functions available globally for the onclick handlers\n            window.removeImage = function(index) {\n                if (!_v()) {\n                    alert('This tool requires proper attribution to function.');\n                    return;\n                }\n                selectedFiles.splice(index, 1);\n                updatePreview();\n                if (selectedFiles.length === 0) {\n                    previewArea.style.display = 'none';\n                }\n            };\n\n            window.moveFile = moveFile;\n\n            convertBtn.addEventListener('click', async () => {\n                if (!_v()) {\n                    alert('This tool requires proper attribution to function.');\n                    return;\n                }\n\n                if (selectedFiles.length === 0) return;\n\n                try {\n                    loadingState.style.display = 'block';\n                    convertBtn.disabled = true;\n\n                    const PDFLib = window.PDFLib;\n                    const pdf = await PDFLib.PDFDocument.create();\n                    \n                    const pageSize = document.getElementById('pageSize').value;\n                    const quality = parseInt(document.getElementById('quality').value) \/ 100;\n\n                    for (const file of selectedFiles) {\n                        const imageBytes = await file.arrayBuffer();\n                        let image;\n                        \n                        if (file.type === 'image\/jpeg') {\n                            image = await pdf.embedJpg(imageBytes);\n                        } else if (file.type === 'image\/png') {\n                            image = await pdf.embedPng(imageBytes);\n                        } else {\n                            continue;\n                        }\n\n                        let page;\n                        if (pageSize === 'A4') {\n                            page = pdf.addPage([595.276, 841.890]);\n                        } else if (pageSize === 'Letter') {\n                            page = pdf.addPage([612, 792]);\n                        } else {\n                            page = pdf.addPage([612, 1008]);\n                        }\n\n                        const pageWidth = page.getWidth();\n                        const pageHeight = page.getHeight();\n                        const imgWidth = image.width;\n                        const imgHeight = image.height;\n\n                        let scale = Math.min(\n                            (pageWidth * 0.9) \/ imgWidth,\n                            (pageHeight * 0.9) \/ imgHeight\n                        );\n\n                        scale *= quality;\n\n                        page.drawImage(image, {\n                            x: (pageWidth - imgWidth * scale) \/ 2,\n                            y: (pageHeight - imgHeight * scale) \/ 2,\n                            width: imgWidth * scale,\n                            height: imgHeight * scale,\n                        });\n                    }\n\n                    const pdfBytes = await pdf.save();\n                    const blob = new Blob([pdfBytes], { type: 'application\/pdf' });\n                    saveAs(blob, 'converted-images.pdf');\n\n                } catch (error) {\n                    console.error('Error converting to PDF:', error);\n                    alert('An error occurred while converting the images. Please try again.');\n                } finally {\n                    loadingState.style.display = 'none';\n                    convertBtn.disabled = false;\n                }\n            });\n\n            \/\/ Upload Images Button triggers file input\n            document.addEventListener('DOMContentLoaded', function() {\n                var uploadBtn = document.getElementById('uploadImagesBtn');\n                var fileInput = document.getElementById('fileInput');\n                var dropZone = document.getElementById('dropZone');\n                if (uploadBtn && fileInput && dropZone) {\n                    uploadBtn.onclick = function(e) {\n                        e.stopPropagation(); \/\/ Prevent bubbling to dropzone\n                        fileInput.value = '';\n                        fileInput.click();\n                    };\n                    dropZone.onclick = function(e) {\n                        \/\/ Only trigger if the dropzone itself is clicked, not the button\n                        if (e.target === dropZone) {\n                            fileInput.value = '';\n                            fileInput.click();\n                        }\n                    };\n                }\n            });\n        })();\n    <\/script>\n<\/div>\n\n<div class='code-block code-block-2' style='margin: 8px 0; clear: both;'>\n<div class='code-block code-block-43' style='margin: 8px 0; clear: both;'>\n<style>\n\/* ===============================\n   COMPACT OTHER TOOLS PANEL\n   =============================== *\/\n\n.mn-other-tools {\n  margin-top: 24px;\n}\n\n.mn-other-tools h3 {\n  font-size: 16px;\n  font-weight: 600;\n  color: #111827;\n  margin-bottom: 10px;\n}\n\n\/* Compact Grid *\/\n.mn-tools-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n  gap: 10px;\n}\n\n\/* Compact Card *\/\n.mn-tool-item {\n  background: #ffffff;\n  border-radius: 10px;\n  padding: 10px 12px;\n  text-decoration: none !important;\n  border: 1px solid #e5e7eb;\n  transition: all 0.2s ease;\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n\n.mn-tool-item:hover {\n  background: #f8fafc;\n  border-color: #3d85c6;\n}\n\n\/* Smaller Icon *\/\n.mn-tool-icon {\n  width: 34px;\n  height: 34px;\n  border-radius: 8px;\n  background: #eef5ff;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 16px;\n}\n\n\/* Text *\/\n.mn-tool-text span {\n  font-size: 13px;\n  font-weight: 500;\n  color: #111827;\n  line-height: 1.2;\n}\n\n.mn-tool-text small {\n  display: none; \/* remove subtitle for compact UI *\/\n}\n\n\/* Mobile *\/\n@media (max-width: 600px) {\n  .mn-tools-grid {\n    grid-template-columns: 1fr 1fr;\n  }\n}\n<\/style>\n\n<div class=\"mn-other-tools\">\n  <h3>\ud83d\udd27 Other Tools<\/h3>\n\n  <div class=\"mn-tools-grid\" id=\"mnToolsGrid\">\n\n    <a href=\"\/tools\/image-resizer\/\" class=\"mn-tool-item\">\n      <div class=\"mn-tool-icon\">\ud83d\uddbc\ufe0f<\/div>\n      <div class=\"mn-tool-text\"><span>Image Resizer<\/span><\/div>\n    <\/a>\n\n    <a href=\"\/tools\/photo-signature-joiner\/\" class=\"mn-tool-item\">\n      <div class=\"mn-tool-icon\">\u270d\ufe0f<\/div>\n      <div class=\"mn-tool-text\"><span>Photo & Sign Joiner<\/span><\/div>\n    <\/a>\n\n    <a href=\"\/tools\/image-to-pdf\/\" class=\"mn-tool-item\">\n      <div class=\"mn-tool-icon\">\ud83d\udcc4<\/div>\n      <div class=\"mn-tool-text\"><span>Image to PDF<\/span><\/div>\n    <\/a>\n\n    <a href=\"\/tools\/marathi-typing-test\/\" class=\"mn-tool-item\">\n      <div class=\"mn-tool-icon\">\u2328\ufe0f<\/div>\n      <div class=\"mn-tool-text\"><span>Marathi Typing Test<\/span><\/div>\n    <\/a>\n\n    <a href=\"\/tools\/english-typing-test\/\" class=\"mn-tool-item\">\n      <div class=\"mn-tool-icon\">\u2328\ufe0f<\/div>\n      <div class=\"mn-tool-text\"><span>English Typing Test<\/span><\/div>\n    <\/a>\n\n    <a href=\"\/tools\/pdf-merger\/\" class=\"mn-tool-item\">\n      <div class=\"mn-tool-icon\">\ud83d\udcd1<\/div>\n      <div class=\"mn-tool-text\"><span>PDF Merger<\/span><\/div>\n    <\/a>\n\n    <a href=\"\/tools\/pdf-splitter\/\" class=\"mn-tool-item\">\n      <div class=\"mn-tool-icon\">\u2702\ufe0f<\/div>\n      <div class=\"mn-tool-text\"><span>PDF Splitter<\/span><\/div>\n    <\/a>\n\n    <a href=\"\/tools\/pdf-arranger\/\" class=\"mn-tool-item\">\n      <div class=\"mn-tool-icon\">\ud83d\uddc2\ufe0f<\/div>\n      <div class=\"mn-tool-text\"><span>PDF Arranger<\/span><\/div>\n    <\/a>\n\n    <a href=\"\/tools\/age-calculator\/\" class=\"mn-tool-item\">\n      <div class=\"mn-tool-icon\">\ud83d\udcc5<\/div>\n      <div class=\"mn-tool-text\"><span>Age Calculator<\/span><\/div>\n    <\/a>\n\n    <a href=\"\/tools\/emi-calculator\/\" class=\"mn-tool-item\">\n      <div class=\"mn-tool-icon\">\ud83d\udcb0<\/div>\n      <div class=\"mn-tool-text\"><span>EMI Calculator<\/span><\/div>\n    <\/a>\n\n    <a href=\"\/tools\/bmi-calculator\/\" class=\"mn-tool-item\">\n      <div class=\"mn-tool-icon\">\u2696\ufe0f<\/div>\n      <div class=\"mn-tool-text\"><span>BMI Calculator<\/span><\/div>\n    <\/a>\n\n    <a href=\"\/tools\/gst-calculator\/\" class=\"mn-tool-item\">\n      <div class=\"mn-tool-icon\">\ud83e\uddfe<\/div>\n      <div class=\"mn-tool-text\"><span>GST Calculator<\/span><\/div>\n    <\/a>\n\n    <a href=\"\/tools\/percentage-calculator\/\" class=\"mn-tool-item\">\n      <div class=\"mn-tool-icon\">\ud83d\udcca<\/div>\n      <div class=\"mn-tool-text\"><span>Percentage Calculator<\/span><\/div>\n    <\/a>\n\n  <\/div>\n<\/div>\n\n<script>\n\/* ===============================\n   AUTO-HIDE CURRENT TOOL\n   =============================== *\/\n(function () {\n  const currentPath = window.location.pathname.replace(\/\\\/$\/, \"\");\n  const tools = document.querySelectorAll(\"#mnToolsGrid a\");\n\n  tools.forEach(tool => {\n    const toolPath = tool.getAttribute(\"href\").replace(\/\\\/$\/, \"\");\n    if (currentPath === toolPath) {\n      tool.style.display = \"none\";\n    }\n  });\n})();\n<\/script>\n<\/div>\n<\/div>\n\n<div id=\"td-outer-wrap\" class=\"td-theme-wrap\">\n<div class=\"td-main-content-wrap td-main-page-wrap td-container-wrap\" role=\"main\">\n<div class=\"tdc-content-wrap\">\n<h2 data-start=\"188\" data-end=\"261\"><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/svg\/1f4c4.svg\" alt=\"\ud83d\udcc4\" \/>\u00a0Image to PDF Converter \u2013 Convert Photos to PDF Online (Free &amp; Fast)<\/h2>\n<p class=\"\" data-start=\"263\" data-end=\"533\">Need to send multiple images in one document? Want to convert scanned photos or certificates into a PDF? Our\u00a0<strong data-start=\"372\" data-end=\"398\">Image to PDF Converter<\/strong> makes it easy. No software, no watermark, and no hassle, just a clean, fast way to create professional-looking PDFs from your images.<\/p>\n<h3 class=\"\" data-start=\"535\" data-end=\"562\"><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/svg\/1f527.svg\" alt=\"\ud83d\udd27\" \/>\u00a0What This Tool Does:<\/h3>\n<p class=\"\" data-start=\"564\" data-end=\"737\">This tool lets you\u00a0<strong data-start=\"583\" data-end=\"642\">convert JPG, PNG, or WebP images into a single PDF file<\/strong>. You can add one image or multiple photos, reorder them, and download the final PDF instantly.<\/p>\n<h3 class=\"\" data-start=\"739\" data-end=\"760\"><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/svg\/1f6e0.svg\" alt=\"\ud83d\udee0\ufe0f\" \/>\u00a0How It Works:<\/h3>\n<ol>\n<li data-start=\"765\" data-end=\"829\"><strong data-start=\"765\" data-end=\"787\">Upload your images<\/strong>\u00a0\u2013 Drag and drop or use the upload button.<\/li>\n<li data-start=\"833\" data-end=\"903\"><strong data-start=\"833\" data-end=\"856\">Rearrange if needed<\/strong>\u00a0\u2013 Use drag-to-sort if you have multiple files.<\/li>\n<li data-start=\"907\" data-end=\"959\"><strong data-start=\"907\" data-end=\"926\">Click \u201cConvert\u201d<\/strong>\u00a0\u2013 The tool processes your files.<\/li>\n<li data-start=\"963\" data-end=\"1009\"><strong data-start=\"963\" data-end=\"984\">Download your PDF<\/strong>\u00a0\u2013 Ready to use or share.<\/li>\n<\/ol>\n<h3 class=\"\" data-start=\"1011\" data-end=\"1026\"><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/svg\/2705.svg\" alt=\"\u2705\" \/>\u00a0Features:<\/h3>\n<ul>\n<li data-start=\"1030\" data-end=\"1066\">Combine multiple images into one PDF<\/li>\n<li data-start=\"1069\" data-end=\"1095\">Maintains original quality<\/li>\n<li data-start=\"1098\" data-end=\"1125\">Works on desktop and mobile<\/li>\n<li data-start=\"1128\" data-end=\"1156\">100% free, no login required<\/li>\n<li data-start=\"1159\" data-end=\"1181\">No watermark on output<\/li>\n<\/ul>\n<h3 class=\"\" data-start=\"1183\" data-end=\"1202\"><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/svg\/1f4ce.svg\" alt=\"\ud83d\udcce\" \/>\u00a0Perfect For:<\/h3>\n<ul>\n<li data-start=\"1206\" data-end=\"1258\">Submitting scanned documents (marksheets, ID proofs)<\/li>\n<li data-start=\"1261\" data-end=\"1301\">Creating photo albums or work portfolios<\/li>\n<li data-start=\"1304\" data-end=\"1348\">Students, job applicants, and business users<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u00a0Image to PDF Converter \u2013 Convert Photos to PDF Online (Free &amp; Fast) Need to send multiple images in one document? Want to convert scanned photos or certificates into a PDF? Our\u00a0Image to PDF Converter makes it easy. No software, no watermark, and no hassle, just a clean, fast way to create professional-looking PDFs from [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":446,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-92","page","type-page","status-publish","has-post-thumbnail"],"_links":{"self":[{"href":"https:\/\/majhinaukri.in\/tools\/wp-json\/wp\/v2\/pages\/92","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/majhinaukri.in\/tools\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/majhinaukri.in\/tools\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/majhinaukri.in\/tools\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/majhinaukri.in\/tools\/wp-json\/wp\/v2\/comments?post=92"}],"version-history":[{"count":9,"href":"https:\/\/majhinaukri.in\/tools\/wp-json\/wp\/v2\/pages\/92\/revisions"}],"predecessor-version":[{"id":532,"href":"https:\/\/majhinaukri.in\/tools\/wp-json\/wp\/v2\/pages\/92\/revisions\/532"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/majhinaukri.in\/tools\/wp-json\/wp\/v2\/media\/446"}],"wp:attachment":[{"href":"https:\/\/majhinaukri.in\/tools\/wp-json\/wp\/v2\/media?parent=92"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}