{"id":70006,"date":"2026-11-09T07:30:51","date_gmt":"2026-11-09T02:00:51","guid":{"rendered":"https:\/\/www.quickonlinetips.com\/archives\/tools\/jpg-to-pdf\/"},"modified":"2026-11-09T07:30:51","modified_gmt":"2026-11-09T02:00:51","slug":"jpg-to-pdf","status":"publish","type":"page","link":"https:\/\/www.quickonlinetips.com\/archives\/tools\/jpg-to-pdf\/","title":{"rendered":"JPG to PDF: Convert Images to PDF Free"},"content":{"rendered":"<p>Convert <strong>JPG to PDF<\/strong> free, right in your browser. Add one photo or many, put them in order, choose A4, US Letter or a page that matches each image, and download a single PDF. Your photos are never uploaded, so it is safe for receipts, ID copies and private documents. PNG, WebP and GIF images work too.<\/p>\n<style>.qjp-list{list-style:none;margin:12px 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px} .qjp-list li{position:relative;background:#fff;border:1px solid #CBD5E0;border-radius:10px;padding:8px;text-align:center} .qjp-list img{display:block;width:100%;height:120px;object-fit:contain;background:#F1F5F9;border-radius:6px} .qjp-num{position:absolute;top:6px;left:6px;background:#1E3A8A;color:#fff;font-size:13px;font-weight:700;border-radius:99px;padding:2px 8px} .qt-tool .qjp-x{position:absolute;top:-8px;right:-8px;width:34px;height:34px;border-radius:50%;background:#dc2626;color:#fff;border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.35);font-size:20px;line-height:1;cursor:pointer;padding:0} .qjp-name{font-size:12px;color:#4A5568;margin:6px 0 4px;word-break:break-all;max-height:2.6em;overflow:hidden} .qjp-mv{display:flex;gap:6px;justify-content:center} .qt-tool .qjp-mv button{font:inherit;font-size:14px;font-weight:700;min-width:44px;min-height:34px;border-radius:8px;border:1px solid #AEC3DB;background:#E8F0FA;color:#1E3A8A;cursor:pointer} .qt-tool .qjp-mv button:disabled{opacity:.35;cursor:default} .qjp-empty{border:2px dashed #AEC3DB;border-radius:10px;background:#F4F8FD;color:#4A5568;text-align:center;padding:22px 12px;margin:12px 0 0;font-size:15px}<\/style>\n<div class=\"qt-tool\" id=\"qjp\"><p class=\"qt-label\" style=\"font-size:1.15em;margin:0 0 10px\"><strong>Step 1:<\/strong> Add your images (JPG, PNG, WebP or GIF)<\/p><p class=\"qt-label\" style=\"color:#2B6CB0;font-size:14px;margin:0 0 6px\">Option 1: Choose images from your device<\/p><label class=\"qt-drop\" id=\"qjp-drop\" for=\"qjp-file\"><span class=\"qtx-big\">Choose images<\/span><span class=\"qtx-small\" id=\"qjp-droptxt\">Pick one or many photos. Up to 60 images, 20 MB each.<\/span><\/label><input type=\"file\" id=\"qjp-file\" class=\"qtx-file\" accept=\"image\/jpeg,image\/png,image\/webp,image\/gif\" multiple><p class=\"qt-label\" id=\"qjp-opt2\" style=\"color:#2B6CB0;font-size:14px;margin:4px 0 0\">Option 2: Drop photos on the box above &uarr;<\/p><div class=\"qjp-empty\" id=\"qjp-empty\">No images yet. Your pages will appear here in order.<\/div><ul class=\"qjp-list\" id=\"qjp-list\"><\/ul><p class=\"qt-label\" style=\"font-size:1.15em;margin:18px 0 10px\"><strong>Step 2:<\/strong> Choose the page settings<\/p><div class=\"qt-grid\"><div class=\"qt-field\"><label for=\"qjp-size\">Page size<\/label><select id=\"qjp-size\"><option value=\"fit\">Same shape as each image<\/option><option value=\"a4\" selected>A4<\/option><option value=\"letter\">US Letter<\/option><\/select><\/div><div class=\"qt-field\"><label for=\"qjp-or\">Orientation<\/label><select id=\"qjp-or\"><option value=\"auto\" selected>Auto (match each image)<\/option><option value=\"p\">Portrait<\/option><option value=\"l\">Landscape<\/option><\/select><\/div><div class=\"qt-field\"><label for=\"qjp-mg\">Margin<\/label><select id=\"qjp-mg\"><option value=\"0\">No margin<\/option><option value=\"10\" selected>Small (10 mm)<\/option><option value=\"20\">Large (20 mm)<\/option><\/select><\/div><div class=\"qt-field\"><label for=\"qjp-q\">Image quality<\/label><select id=\"qjp-q\"><option value=\"0.92\" selected>High<\/option><option value=\"0.8\">Medium (smaller file)<\/option><option value=\"0.65\">Small file<\/option><\/select><\/div><\/div><div class=\"qt-field\" style=\"margin-top:10px\"><label for=\"qjp-name\">PDF file name<\/label><input type=\"text\" id=\"qjp-name\" maxlength=\"80\" value=\"images\" aria-label=\"PDF file name\"><\/div><p class=\"qt-label\" style=\"font-size:1.15em;margin:18px 0 10px\"><strong>Step 3:<\/strong> Press Make PDF<\/p><button type=\"button\" class=\"qt-btn qt-btn-big\" id=\"qjp-go\" style=\"width:100%\">Make PDF<\/button><p class=\"qt-status\" id=\"qjp-status\" aria-live=\"polite\"><\/p><div class=\"qt-row\"><button type=\"button\" class=\"qt-btn qt-btn-ghost qtx-nomark\" id=\"qjp-reset\">&#8634; Start over<\/button><\/div><p class=\"qt-note\"><strong>Private by design:<\/strong> your photos are turned into a PDF inside your own browser. They are never uploaded to QuickOnlineTips or anywhere else, and nothing is stored. The PDF maker (jsPDF, open source) loads from a public code library when you press Make PDF.<\/p><\/div>\n<script>(function () { function qtReady(fn) { if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', fn); } else { fn(); } } qtReady(function () { var root = document.getElementById('qjp'); if (!root) { return; } function $(id) { return document.getElementById('qjp-' + id); } var items = [], busy = false, MAXN = 60, MAXB = 20 * 1048576; function el(tag, cls, text) { var e = document.createElement(tag); if (cls) { e.className = cls; } if (text !== undefined) { e.textContent = text; } return e; } function say(t, err) { $('status').textContent = t; $('status').classList.toggle('qt-error', !!err); } function kind(b) { if (b[0] === 255) { if (b[1] === 216) { return 'image\/jpeg'; } } if (b[0] === 137) { if (b[1] === 80) { if (b[2] === 78) { return 'image\/png'; } } } if (b[0] === 71) { if (b[1] === 73) { if (b[2] === 70) { return 'image\/gif'; } } } if (b[0] === 82) { if (b[1] === 73) { if (b[8] === 87) { if (b[9] === 69) { return 'image\/webp'; } } } } return ''; } function draw() { var L = $('list'); while (L.firstChild) { L.removeChild(L.firstChild); } $('empty').hidden = items.length > 0; items.forEach(function (it, i) { var li = el('li'), im = el('img'); im.src = it.url; im.alt = 'Page ' + (i + 1); li.appendChild(im); li.appendChild(el('span', 'qjp-num', String(i + 1))); var x = el('button', 'qjp-x qtx-nomark', '\u00d7'); x.type = 'button'; x.setAttribute('aria-label', 'Remove ' + it.name); x.addEventListener('click', function () { URL.revokeObjectURL(it.url); items.splice(i, 1); draw(); say(items.length + ' image' + (items.length === 1 ? '' : 's') + ' ready.'); }); li.appendChild(x); li.appendChild(el('p', 'qjp-name', it.name)); var mv = el('div', 'qjp-mv'), up = el('button', 'qtx-nomark', '\u2191'), dn = el('button', 'qtx-nomark', '\u2193'); up.type = 'button'; dn.type = 'button'; up.setAttribute('aria-label', 'Move earlier'); dn.setAttribute('aria-label', 'Move later'); up.disabled = i === 0; dn.disabled = i === items.length - 1; up.addEventListener('click', function () { var t = items[i - 1]; items[i - 1] = items[i]; items[i] = t; draw(); }); dn.addEventListener('click', function () { var t = items[i + 1]; items[i + 1] = items[i]; items[i] = t; draw(); }); mv.appendChild(up); mv.appendChild(dn); li.appendChild(mv); L.appendChild(li); }); } function add(files) { var list = Array.prototype.slice.call(files || []), skipped = [], pending = list.length; if (!pending) { return; } say('Checking ' + pending + ' file' + (pending === 1 ? '' : 's') + '...'); list.forEach(function (f) { if (items.length + 1 > MAXN) { skipped.push(f.name + ' (60 images max)'); fin(); return; } if (f.size > MAXB) { skipped.push(f.name + ' (over 20 MB)'); fin(); return; } var r = new FileReader(); r.onload = function () { var b = new Uint8Array(r.result), k = kind(b); if (!k) { skipped.push(f.name + ' (not a JPG, PNG, WebP or GIF image)'); } else if (items.length + 1 > MAXN) { skipped.push(f.name + ' (60 images max)'); } else { items.push({ name: String(f.name || 'image').slice(0, 80), url: URL.createObjectURL(f), type: k }); } fin(); }; r.onerror = function () { skipped.push(f.name); fin(); }; r.readAsArrayBuffer(f.slice(0, 16)); }); function fin() { pending--; if (pending) { return; } draw(); say(items.length + ' image' + (items.length === 1 ? '' : 's') + ' ready. Step 2: check the page settings, then press Make PDF.' + (skipped.length ? ' Skipped: ' + skipped.join('; ') + '.' : ''), skipped.length > 0); } } $('file').addEventListener('change', function () { add($('file').files); $('file').value = ''; }); var dz = $('drop'); if (window.matchMedia) { if (window.matchMedia('(pointer: coarse)').matches) { $('opt2').hidden = true; } } ['dragenter', 'dragover'].forEach(function (ev) { dz.addEventListener(ev, function (e) { e.preventDefault(); dz.classList.add('qt-hover'); }); }); ['dragleave', 'drop'].forEach(function (ev) { dz.addEventListener(ev, function (e) { e.preventDefault(); dz.classList.remove('qt-hover'); }); }); dz.addEventListener('drop', function (e) { if (e.dataTransfer) { add(e.dataTransfer.files); } }); function loadImg(url) { return new Promise(function (ok, bad) { var im = new Image(); im.onload = function () { ok(im); }; im.onerror = function () { bad(new Error('decode')); }; im.src = url; }); } function loadLib(cb) { if (window.jspdf) { cb(true); return; } var urls = ['https:' + '\/' + '\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js', 'https:' + '\/' + '\/cdn.jsdelivr.net\/npm\/jspdf@2.5.1\/dist\/jspdf.umd.min.js']; function tryOne(i) { if (i === urls.length) { cb(false); return; } var s = document.createElement('script'); s.src = urls[i]; s.async = true; s.onload = function () { cb(!!window.jspdf); }; s.onerror = function () { tryOne(i + 1); }; document.head.appendChild(s); } tryOne(0); } var SIZES = { a4: [210, 297], letter: [215.9, 279.4] }; function pageFor(w, h) { var size = $('size').value, or = $('or').value, land = or === 'l' ? true : (or === 'p' ? false : w > h); if (size === 'fit') { var s = 297 \/ Math.max(w, h); return [Math.max(30, w * s), Math.max(30, h * s)]; } var P = SIZES[size]; return land ? [P[1], P[0]] : [P[0], P[1]]; } function make() { var J = window.jspdf.jsPDF, q = Number($('q').value), mg = Number($('mg').value), doc = null, i = 0; function next() { if (i === items.length) { var nm = ($('name').value || 'images').replace(\/[^A-Za-z0-9 ._-]+\/g, '').trim() || 'images'; if (!\/[.]pdf$\/i.test(nm)) { nm += '.pdf'; } doc.save(nm); busy = false; say('Done. ' + nm + ' (' + items.length + ' page' + (items.length === 1 ? '' : 's') + ') is in your downloads.'); return; } var it = items[i]; say('Adding page ' + (i + 1) + ' of ' + items.length + '...'); loadImg(it.url).then(function (im) { var w = im.naturalWidth, h = im.naturalHeight, cap = 4000, sc = Math.min(1, cap \/ Math.max(w, h)), cw = Math.max(1, Math.round(w * sc)), ch = Math.max(1, Math.round(h * sc)); var cv = document.createElement('canvas'); cv.width = cw; cv.height = ch; var cx = cv.getContext('2d'); cx.fillStyle = '#ffffff'; cx.fillRect(0, 0, cw, ch); cx.drawImage(im, 0, 0, cw, ch); var data = cv.toDataURL('image\/jpeg', q); var pg = pageFor(w, h), pw = pg[0], ph = pg[1], orient = pw > ph ? 'l' : 'p'; if (!doc) { doc = new J({ unit: 'mm', format: [pw, ph], orientation: orient, compress: true }); doc.setProperties({ title: 'Images', creator: 'quickonlinetips.com JPG to PDF' }); } else { doc.addPage([pw, ph], orient); } var m = $('size').value === 'fit' ? Math.min(mg, 5) : mg, aw = pw - 2 * m, ah = ph - 2 * m, r = Math.min(aw \/ w, ah \/ h), dw = w * r, dh = h * r; doc.addImage(data, 'JPEG', (pw - dw) \/ 2, (ph - dh) \/ 2, dw, dh, undefined, 'FAST'); cv.width = 1; cv.height = 1; i++; setTimeout(next, 0); }, function () { busy = false; say('Could not read image ' + (i + 1) + ' (' + it.name + '). Remove it with the red \u00d7 and try again.', true); }); } next(); } $('go').addEventListener('click', function () { if (busy) { return; } if (!items.length) { say('Step 1 first: add at least one image.', true); return; } busy = true; say('Loading the PDF maker...'); loadLib(function (ok) { if (!ok) { busy = false; say('The PDF maker could not load. Check your connection and press Make PDF again.', true); return; } try { make(); } catch (e) { busy = false; say('Something went wrong while making the PDF. Please try again.', true); } }); }); $('reset').addEventListener('click', function () { items.forEach(function (it) { URL.revokeObjectURL(it.url); }); items = []; draw(); say(''); $('name').value = 'images'; }); draw(); }); })();<\/script>\n<div class=\"qt-next\"><p class=\"qt-next-h\">Try another free tool<\/p><div class=\"qt-next-g\"><a href=\"https:\/\/www.quickonlinetips.com\/archives\/tools\/image-compressor\/\">Image Compressor<\/a><a href=\"https:\/\/www.quickonlinetips.com\/archives\/tools\/image-resizer\/\">Image Resizer<\/a><a href=\"https:\/\/www.quickonlinetips.com\/archives\/tools\/image-converter\/\">Image Converter<\/a><a href=\"https:\/\/www.quickonlinetips.com\/archives\/tools\/image-to-text\/\">Image to Text<\/a><a href=\"https:\/\/www.quickonlinetips.com\/archives\/tools\/printable-calendar\/\">Printable Calendar<\/a><a href=\"https:\/\/www.quickonlinetips.com\/archives\/tools\/qr-code-generator\/\">QR Code Generator<\/a><\/div><\/div>\n<p><strong>Quick answer:<\/strong> Press <strong>Choose images<\/strong> (or drop them on the box), use the arrows to set the page order, pick the page size, then press <strong>Make PDF<\/strong>. Each image becomes one page, and the PDF downloads straight away.<\/p>\n<h2>How to convert JPG images to one PDF<\/h2>\n<ol>\n<li><strong>Add images.<\/strong> Pick up to 60 JPG, PNG, WebP or GIF files. Each one becomes a page.<\/li>\n<li><strong>Set the order.<\/strong> Use the &uarr; and &darr; buttons under each picture. Press the red &times; to remove one.<\/li>\n<li><strong>Choose page settings.<\/strong> A4 or US Letter for printing, or <em>Same shape as each image<\/em> for a PDF with no white borders. Auto orientation turns landscape photos sideways for you.<\/li>\n<li><strong>Press Make PDF.<\/strong> The file is saved to your downloads with the name you chose.<\/li>\n<\/ol>\n<h2>Which settings should I use?<\/h2>\n<ul>\n<li><strong>Printing or emailing documents:<\/strong> A4 (most of the world) or US Letter, small margin, high quality.<\/li>\n<li><strong>Photo albums or portfolios:<\/strong> Same shape as each image, no margin.<\/li>\n<li><strong>Smaller file for email or upload limits:<\/strong> Medium or Small file quality.<\/li>\n<\/ul>\n<p>Need smaller photos first? Use the <a href=\"https:\/\/www.quickonlinetips.com\/archives\/tools\/image-compressor\/\">image compressor<\/a> or <a href=\"https:\/\/www.quickonlinetips.com\/archives\/tools\/image-resizer\/\">image resizer<\/a>. To change PNG to JPG, try the <a href=\"https:\/\/www.quickonlinetips.com\/archives\/tools\/image-converter\/\">image converter<\/a>, and to pull text out of a scan, use <a href=\"https:\/\/www.quickonlinetips.com\/archives\/tools\/image-to-text\/\">image to text<\/a>.<\/p>\n<h2>FAQ<\/h2>\n<h3>Are my photos uploaded to a server?<\/h3>\n<p>No. The images are read and turned into a PDF inside your own browser. Only the free, open-source PDF library is downloaded from a public code site when you press Make PDF.<\/p>\n<h3>Can I convert several JPGs into one PDF?<\/h3>\n<p>Yes. Add up to 60 images at once and they all go into one PDF, one image per page, in the order shown.<\/p>\n<h3>Why does my phone photo look sideways?<\/h3>\n<p>It should not: the tool draws each photo the way your browser displays it, which follows the rotation saved by your camera. If a page still looks wrong, choose Portrait or Landscape instead of Auto.<\/p>\n<h3>Does it work on iPhone and Android?<\/h3>\n<p>Yes. Tap Choose images to pick photos from your gallery, then Make PDF. The PDF is saved to your downloads or Files app.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Convert JPG to PDF free, right in your browser. Add one photo or many, put them in order, choose A4, US Letter or a page that matches each image, and download a single PDF. Your photos are never uploaded, so it is safe for receipts, ID copies and private documents. PNG, WebP and GIF images&#8230;<\/p>\n","protected":false},"author":7,"featured_media":0,"parent":65595,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-70006","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.quickonlinetips.com\/archives\/wp-json\/wp\/v2\/pages\/70006","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.quickonlinetips.com\/archives\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.quickonlinetips.com\/archives\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.quickonlinetips.com\/archives\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.quickonlinetips.com\/archives\/wp-json\/wp\/v2\/comments?post=70006"}],"version-history":[{"count":0,"href":"https:\/\/www.quickonlinetips.com\/archives\/wp-json\/wp\/v2\/pages\/70006\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.quickonlinetips.com\/archives\/wp-json\/wp\/v2\/pages\/65595"}],"wp:attachment":[{"href":"https:\/\/www.quickonlinetips.com\/archives\/wp-json\/wp\/v2\/media?parent=70006"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}