{"id":10714,"date":"2026-06-24T14:19:46","date_gmt":"2026-06-24T12:19:46","guid":{"rendered":"https:\/\/lukasbarda.cz\/?page_id=10714"},"modified":"2026-06-24T15:00:33","modified_gmt":"2026-06-24T13:00:33","slug":"pdf-nastroje","status":"publish","type":"page","link":"https:\/\/lukasbarda.cz\/english\/pdf-nastroje\/","title":{"rendered":"PDF tools"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"10714\" class=\"elementor elementor-10714\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5451463 e-con-full e-flex e-con e-parent\" data-id=\"5451463\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-16dc212 elementor-widget elementor-widget-html\" data-id=\"16dc212\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"cs\">\r\n<head>\r\n<meta charset=\"UTF-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n<title>PDF N\u00e1stroje<\/title>\r\n<style>\r\n#pdf-app * { box-sizing: border-box; margin: 0; padding: 0; }\r\n#pdf-app {\r\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\r\n  padding: 1.5rem 0;\r\n  color: #111;\r\n}\r\n#pdf-app .tabs { display: flex; gap: 8px; margin-bottom: 1.5rem; flex-wrap: wrap; }\r\n#pdf-app .tab {\r\n  padding: 8px 18px; border-radius: 8px;\r\n  border: 1px solid #d0d0d0; background: transparent;\r\n  cursor: pointer; font-size: 14px; color: #666;\r\n  transition: all 0.15s;\r\n}\r\n#pdf-app .tab.active {\r\n  background: #f0f0f0; color: #111;\r\n  border-color: #999; font-weight: 500;\r\n}\r\n#pdf-app .tab:hover:not(.active) { background: #f5f5f5; }\r\n#pdf-app .panel { display: none; }\r\n#pdf-app .panel.active { display: block; }\r\n#pdf-app .dropzone {\r\n  border: 2px dashed #ccc; border-radius: 12px;\r\n  padding: 2.5rem 1.5rem; text-align: center;\r\n  cursor: pointer; background: #fafafa;\r\n  transition: all 0.15s;\r\n}\r\n#pdf-app .dropzone:hover,\r\n#pdf-app .dropzone.drag { border-color: #888; background: #fff; }\r\n#pdf-app .dropzone-icon { font-size: 36px; margin-bottom: 10px; }\r\n#pdf-app .dropzone p { font-size: 14px; color: #666; }\r\n#pdf-app .dropzone p strong { color: #111; font-weight: 500; }\r\n#pdf-app .file-list { margin-top: 1rem; display: flex; flex-direction: column; gap: 8px; }\r\n#pdf-app .file-item {\r\n  display: flex; align-items: center; gap: 10px;\r\n  padding: 10px 14px; background: #fff;\r\n  border: 1px solid #e5e5e5; border-radius: 8px;\r\n}\r\n#pdf-app .file-icon { font-size: 18px; flex-shrink: 0; }\r\n#pdf-app .file-name { flex: 1; font-size: 13px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\r\n#pdf-app .file-size { font-size: 12px; color: #888; flex-shrink: 0; }\r\n#pdf-app .file-remove {\r\n  background: none; border: none; cursor: pointer;\r\n  color: #aaa; font-size: 18px; line-height: 1;\r\n  flex-shrink: 0; padding: 0 2px;\r\n}\r\n#pdf-app .file-remove:hover { color: #333; }\r\n#pdf-app .actions { margin-top: 1.25rem; display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }\r\n#pdf-app .btn-primary {\r\n  padding: 9px 20px; background: #111; color: #fff;\r\n  border: none; border-radius: 8px; font-size: 14px;\r\n  font-weight: 500; cursor: pointer;\r\n  display: flex; align-items: center; gap: 6px;\r\n}\r\n#pdf-app .btn-primary:hover { background: #333; }\r\n#pdf-app .btn-primary:disabled { opacity: 0.4; cursor: not-allowed; }\r\n#pdf-app .hint { font-size: 13px; color: #888; }\r\n#pdf-app .split-options { margin-top: 1rem; display: flex; gap: 8px; flex-wrap: wrap; }\r\n#pdf-app .split-opt {\r\n  padding: 7px 14px; border: 1px solid #d0d0d0;\r\n  border-radius: 8px; cursor: pointer; font-size: 13px;\r\n  color: #666; background: transparent;\r\n}\r\n#pdf-app .split-opt.active {\r\n  border-color: #888; color: #111;\r\n  background: #f0f0f0; font-weight: 500;\r\n}\r\n#pdf-app .input-row { margin-top: 1rem; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }\r\n#pdf-app .input-row label { font-size: 13px; color: #666; white-space: nowrap; }\r\n#pdf-app .input-row input {\r\n  width: 160px; padding: 7px 10px;\r\n  border: 1px solid #d0d0d0; border-radius: 8px;\r\n  font-size: 13px; background: #fff; color: #111;\r\n}\r\n#pdf-app .quality-opts { margin-top: 1rem; display: flex; gap: 8px; flex-wrap: wrap; }\r\n#pdf-app .quality-opt {\r\n  padding: 8px 16px; border: 1px solid #d0d0d0;\r\n  border-radius: 8px; cursor: pointer; font-size: 13px;\r\n  color: #666; background: transparent; text-align: center;\r\n}\r\n#pdf-app .quality-opt.active {\r\n  border-color: #888; color: #111;\r\n  background: #f0f0f0; font-weight: 500;\r\n}\r\n#pdf-app .quality-opt small { display: block; font-size: 11px; margin-top: 2px; color: #888; }\r\n#pdf-app .result-box {\r\n  margin-top: 1.25rem; padding: 14px 16px; border-radius: 8px;\r\n}\r\n#pdf-app .result-box.success { background: #f0faf3; border: 1px solid #a8d5b5; }\r\n#pdf-app .result-box.error { background: #fff0f0; border: 1px solid #f5a0a0; }\r\n#pdf-app .result-header { display: flex; align-items: center; gap: 9px; margin-bottom: 10px; }\r\n#pdf-app .result-header .ri { font-size: 18px; }\r\n#pdf-app .result-box.success .ri { color: #2d7a4f; }\r\n#pdf-app .result-box.error .ri { color: #c0392b; }\r\n#pdf-app .result-header strong { font-size: 14px; font-weight: 500; }\r\n#pdf-app .dl-list { display: flex; flex-direction: column; gap: 6px; }\r\n#pdf-app .dl-item {\r\n  display: flex; align-items: center; gap: 8px;\r\n  padding: 8px 10px; background: #fff;\r\n  border-radius: 8px; border: 1px solid #e5e5e5;\r\n}\r\n#pdf-app .dl-item span { flex: 1; font-size: 13px; }\r\n#pdf-app .dl-item span small { color: #888; font-size: 11px; margin-left: 6px; }\r\n#pdf-app .dl-btn {\r\n  padding: 5px 14px; background: #111; color: #fff;\r\n  border: none; border-radius: 6px; font-size: 12px;\r\n  font-weight: 500; cursor: pointer; flex-shrink: 0;\r\n  display: flex; align-items: center; gap: 4px;\r\n}\r\n#pdf-app .dl-btn:hover { background: #333; }\r\n#pdf-app .progress { margin-top: 1rem; }\r\n#pdf-app .pb-wrap { height: 4px; background: #eee; border-radius: 2px; overflow: hidden; }\r\n#pdf-app .pb { height: 100%; background: #111; width: 0; transition: width 0.25s; border-radius: 2px; }\r\n#pdf-app .pb-label { font-size: 12px; color: #888; margin-top: 6px; }\r\n<\/style>\r\n\r\n<div id=\"pdf-app\">\r\n  <div class=\"tabs\">\r\n    <button class=\"tab active\" onclick=\"pdfSw('merge')\">\ud83d\udcc4 Slou\u010dit<\/button>\r\n    <button class=\"tab\" onclick=\"pdfSw('split')\">\u2702\ufe0f Rozd\u011blit<\/button>\r\n    <button class=\"tab\" onclick=\"pdfSw('compress')\">\ud83d\udddc\ufe0f Komprimovat<\/button>\r\n  <\/div>\r\n\r\n  <!-- MERGE -->\r\n  <div id=\"pdf-p-merge\" class=\"panel active\">\r\n    <div class=\"dropzone\" id=\"pdf-dz-merge\"\r\n      onclick=\"document.getElementById('pdf-i-merge').click()\"\r\n      ondragover=\"pdfDd(event,'merge')\" ondragleave=\"pdfDl('merge')\" ondrop=\"pdfDr(event,'merge')\">\r\n      <div class=\"dropzone-icon\">\ud83d\udcc2<\/div>\r\n      <p><strong>P\u0159et\u00e1hni PDF soubory<\/strong> sem nebo klikni pro v\u00fdb\u011br<\/p>\r\n      <p style=\"margin-top:6px;font-size:12px;\">Vyber v\u00edce soubor\u016f najednou<\/p>\r\n    <\/div>\r\n    <input type=\"file\" id=\"pdf-i-merge\" accept=\".pdf,application\/pdf\" multiple style=\"display:none\" onchange=\"pdfAf('merge',this.files)\">\r\n    <div class=\"file-list\" id=\"pdf-l-merge\"><\/div>\r\n    <div class=\"actions\">\r\n      <button class=\"btn-primary\" id=\"pdf-b-merge\" onclick=\"pdfMerge()\" disabled>\ud83d\udcce Slou\u010dit PDF<\/button>\r\n      <span class=\"hint\" id=\"pdf-h-merge\">Vyber alespo\u0148 2 soubory<\/span>\r\n    <\/div>\r\n    <div id=\"pdf-pg-merge\" class=\"progress\" style=\"display:none\">\r\n      <div class=\"pb-wrap\"><div class=\"pb\" id=\"pdf-pb-merge\"><\/div><\/div>\r\n      <div class=\"pb-label\" id=\"pdf-pbl-merge\"><\/div>\r\n    <\/div>\r\n    <div id=\"pdf-r-merge\"><\/div>\r\n  <\/div>\r\n\r\n  <!-- SPLIT -->\r\n  <div id=\"pdf-p-split\" class=\"panel\">\r\n    <div class=\"dropzone\" id=\"pdf-dz-split\"\r\n      onclick=\"document.getElementById('pdf-i-split').click()\"\r\n      ondragover=\"pdfDd(event,'split')\" ondragleave=\"pdfDl('split')\" ondrop=\"pdfDr(event,'split')\">\r\n      <div class=\"dropzone-icon\">\ud83d\udcc4<\/div>\r\n      <p><strong>P\u0159et\u00e1hni jeden PDF soubor<\/strong> sem nebo klikni pro v\u00fdb\u011br<\/p>\r\n    <\/div>\r\n    <input type=\"file\" id=\"pdf-i-split\" accept=\".pdf,application\/pdf\" style=\"display:none\" onchange=\"pdfAf('split',this.files)\">\r\n    <div class=\"file-list\" id=\"pdf-l-split\"><\/div>\r\n    <div id=\"pdf-sc\" style=\"display:none\">\r\n      <div class=\"split-options\">\r\n        <button class=\"split-opt active\" onclick=\"pdfSsm('all')\" id=\"pdf-so-all\">Ka\u017ed\u00e1 str\u00e1nka zvl\u00e1\u0161\u0165<\/button>\r\n        <button class=\"split-opt\" onclick=\"pdfSsm('range')\" id=\"pdf-so-range\">Rozsah str\u00e1nek<\/button>\r\n        <button class=\"split-opt\" onclick=\"pdfSsm('every')\" id=\"pdf-so-every\">Po N str\u00e1nk\u00e1ch<\/button>\r\n      <\/div>\r\n      <div class=\"input-row\" id=\"pdf-ir-range\" style=\"display:none\">\r\n        <label>Str\u00e1nky (nap\u0159. 1-3, 5, 7-9):<\/label>\r\n        <input type=\"text\" id=\"pdf-sv-range\" placeholder=\"1-3, 5, 7-9\">\r\n      <\/div>\r\n      <div class=\"input-row\" id=\"pdf-ir-every\" style=\"display:none\">\r\n        <label>Str\u00e1nek na d\u00edl:<\/label>\r\n        <input type=\"number\" id=\"pdf-sv-every\" value=\"1\" min=\"1\">\r\n      <\/div>\r\n    <\/div>\r\n    <div class=\"actions\">\r\n      <button class=\"btn-primary\" id=\"pdf-b-split\" onclick=\"pdfSplit()\" disabled>\u2702\ufe0f Rozd\u011blit PDF<\/button>\r\n      <span class=\"hint\" id=\"pdf-h-split\">Vyber soubor<\/span>\r\n    <\/div>\r\n    <div id=\"pdf-pg-split\" class=\"progress\" style=\"display:none\">\r\n      <div class=\"pb-wrap\"><div class=\"pb\" id=\"pdf-pb-split\"><\/div><\/div>\r\n      <div class=\"pb-label\" id=\"pdf-pbl-split\"><\/div>\r\n    <\/div>\r\n    <div id=\"pdf-r-split\"><\/div>\r\n  <\/div>\r\n\r\n  <!-- COMPRESS -->\r\n  <div id=\"pdf-p-compress\" class=\"panel\">\r\n    <div class=\"dropzone\" id=\"pdf-dz-compress\"\r\n      onclick=\"document.getElementById('pdf-i-compress').click()\"\r\n      ondragover=\"pdfDd(event,'compress')\" ondragleave=\"pdfDl('compress')\" ondrop=\"pdfDr(event,'compress')\">\r\n      <div class=\"dropzone-icon\">\ud83d\udcc4<\/div>\r\n      <p><strong>P\u0159et\u00e1hni PDF soubor<\/strong> sem nebo klikni pro v\u00fdb\u011br<\/p>\r\n    <\/div>\r\n    <input type=\"file\" id=\"pdf-i-compress\" accept=\".pdf,application\/pdf\" style=\"display:none\" onchange=\"pdfAf('compress',this.files)\">\r\n    <div class=\"file-list\" id=\"pdf-l-compress\"><\/div>\r\n    <div class=\"quality-opts\" id=\"pdf-cc\" style=\"display:none\">\r\n      <button class=\"quality-opt active\" onclick=\"pdfSq('low')\" id=\"pdf-cq-low\">N\u00edzk\u00e1 kvalita<small>max. komprese<\/small><\/button>\r\n      <button class=\"quality-opt\" onclick=\"pdfSq('medium')\" id=\"pdf-cq-medium\">St\u0159edn\u00ed<small>doporu\u010deno<\/small><\/button>\r\n      <button class=\"quality-opt\" onclick=\"pdfSq('high')\" id=\"pdf-cq-high\">Vysok\u00e1 kvalita<small>men\u0161\u00ed komprese<\/small><\/button>\r\n    <\/div>\r\n    <div class=\"actions\">\r\n      <button class=\"btn-primary\" id=\"pdf-b-compress\" onclick=\"pdfCompress()\" disabled>\ud83d\udddc\ufe0f Komprimovat<\/button>\r\n      <span class=\"hint\" id=\"pdf-h-compress\">Vyber soubor<\/span>\r\n    <\/div>\r\n    <div id=\"pdf-pg-compress\" class=\"progress\" style=\"display:none\">\r\n      <div class=\"pb-wrap\"><div class=\"pb\" id=\"pdf-pb-compress\"><\/div><\/div>\r\n      <div class=\"pb-label\" id=\"pdf-pbl-compress\"><\/div>\r\n    <\/div>\r\n    <div id=\"pdf-r-compress\"><\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf-lib\/1.17.1\/pdf-lib.min.js\"><\/script>\r\n<script>\r\n(function() {\r\n  var S = { merge: [], split: [], compress: [], sm: 'all', q: 'low' };\r\n\r\n  window.pdfSw = function(t) {\r\n    document.querySelectorAll('#pdf-app .tab').forEach(function(el, i) {\r\n      el.classList.toggle('active', ['merge','split','compress'][i] === t);\r\n    });\r\n    document.querySelectorAll('#pdf-app .panel').forEach(function(el) { el.classList.remove('active'); });\r\n    document.getElementById('pdf-p-' + t).classList.add('active');\r\n  };\r\n\r\n  window.pdfDd = function(e, t) { e.preventDefault(); document.getElementById('pdf-dz-' + t).classList.add('drag'); };\r\n  window.pdfDl = function(t) { document.getElementById('pdf-dz-' + t).classList.remove('drag'); };\r\n  window.pdfDr = function(e, t) { e.preventDefault(); pdfDl(t); pdfAf(t, e.dataTransfer.files); };\r\n\r\n  function fmtSize(b) {\r\n    if (b < 1024) return b + ' B';\r\n    if (b < 1048576) return Math.round(b \/ 1024) + ' KB';\r\n    return (b \/ 1048576).toFixed(1) + ' MB';\r\n  }\r\n\r\n  window.pdfAf = function(tab, files) {\r\n    var arr = Array.from(files).filter(function(f) {\r\n      return f.type === 'application\/pdf' || f.name.toLowerCase().endsWith('.pdf');\r\n    });\r\n    if (!arr.length) return;\r\n    if (tab === 'merge') S.merge = S.merge.concat(arr);\r\n    else S[tab] = [arr[0]];\r\n    renderList(tab);\r\n  };\r\n\r\n  window.pdfRf = function(tab, idx) { S[tab].splice(idx, 1); renderList(tab); };\r\n\r\n  function renderList(tab) {\r\n    var list = document.getElementById('pdf-l-' + tab);\r\n    list.innerHTML = '';\r\n    S[tab].forEach(function(f, i) {\r\n      var d = document.createElement('div');\r\n      d.className = 'file-item';\r\n      d.innerHTML = '<span class=\"file-icon\">\ud83d\udcc4<\/span>' +\r\n        '<span class=\"file-name\">' + f.name + '<\/span>' +\r\n        '<span class=\"file-size\">' + fmtSize(f.size) + '<\/span>' +\r\n        '<button class=\"file-remove\" onclick=\"pdfRf(\\'' + tab + '\\',' + i + ')\" aria-label=\"Odebrat\">\u2715<\/button>';\r\n      list.appendChild(d);\r\n    });\r\n    if (tab === 'split' && S.split.length) document.getElementById('pdf-sc').style.display = 'block';\r\n    if (tab === 'compress' && S.compress.length) document.getElementById('pdf-cc').style.display = 'block';\r\n    updateBtn(tab);\r\n  }\r\n\r\n  function updateBtn(tab) {\r\n    var b = document.getElementById('pdf-b-' + tab);\r\n    var h = document.getElementById('pdf-h-' + tab);\r\n    if (tab === 'merge') {\r\n      b.disabled = S.merge.length < 2;\r\n      h.textContent = S.merge.length < 2 ? 'Vyber alespo\u0148 2 soubory' : S.merge.length + ' soubor\u016f vybr\u00e1no';\r\n    } else {\r\n      b.disabled = !S[tab].length;\r\n      h.textContent = !S[tab].length ? 'Vyber soubor' : '1 soubor vybr\u00e1n';\r\n    }\r\n  }\r\n\r\n  window.pdfSsm = function(m) {\r\n    S.sm = m;\r\n    ['all','range','every'].forEach(function(x) {\r\n      document.getElementById('pdf-so-' + x).classList.toggle('active', x === m);\r\n    });\r\n    document.getElementById('pdf-ir-range').style.display = m === 'range' ? 'flex' : 'none';\r\n    document.getElementById('pdf-ir-every').style.display = m === 'every' ? 'flex' : 'none';\r\n  };\r\n\r\n  window.pdfSq = function(q) {\r\n    S.q = q;\r\n    ['low','medium','high'].forEach(function(x) {\r\n      document.getElementById('pdf-cq-' + x).classList.toggle('active', x === q);\r\n    });\r\n  };\r\n\r\n  function showProg(tab, pct, lbl) {\r\n    document.getElementById('pdf-pg-' + tab).style.display = 'block';\r\n    document.getElementById('pdf-pb-' + tab).style.width = pct + '%';\r\n    document.getElementById('pdf-pbl-' + tab).textContent = lbl;\r\n  }\r\n  function hideProg(tab) { document.getElementById('pdf-pg-' + tab).style.display = 'none'; }\r\n  function showErr(tab, msg) {\r\n    hideProg(tab);\r\n    document.getElementById('pdf-r-' + tab).innerHTML =\r\n      '<div class=\"result-box error\"><div class=\"result-header\"><span class=\"ri\">\u274c<\/span><strong>' + msg + '<\/strong><\/div><\/div>';\r\n  }\r\n\r\n  function makeDlBtn(bytes, fname) {\r\n    var blob = new Blob([bytes], { type: 'application\/pdf' });\r\n    var url = URL.createObjectURL(blob);\r\n    var btn = document.createElement('button');\r\n    btn.className = 'dl-btn';\r\n    btn.textContent = '\u2b07 St\u00e1hnout';\r\n    btn.onclick = function() {\r\n      var a = document.createElement('a');\r\n      a.href = url;\r\n      a.download = fname;\r\n      document.body.appendChild(a);\r\n      a.click();\r\n      document.body.removeChild(a);\r\n    };\r\n    return btn;\r\n  }\r\n\r\n  function readFile(f) {\r\n    return f.arrayBuffer().then(function(buf) { return new Uint8Array(buf); });\r\n  }\r\n\r\n  window.pdfMerge = function() {\r\n    document.getElementById('pdf-b-merge').disabled = true;\r\n    document.getElementById('pdf-r-merge').innerHTML = '';\r\n    showProg('merge', 10, 'Na\u010d\u00edt\u00e1m soubory\u2026');\r\n    var files = S.merge.slice();\r\n    var PDFDocument = PDFLib.PDFDocument;\r\n    PDFDocument.create().then(function(merged) {\r\n      var chain = Promise.resolve();\r\n      files.forEach(function(f, i) {\r\n        chain = chain.then(function() {\r\n          showProg('merge', 10 + Math.round(75 * i \/ files.length), 'P\u0159id\u00e1v\u00e1m ' + f.name + '\u2026');\r\n          return readFile(f).then(function(bytes) {\r\n            return PDFDocument.load(bytes).then(function(doc) {\r\n              return merged.copyPages(doc, doc.getPageIndices()).then(function(pages) {\r\n                pages.forEach(function(p) { merged.addPage(p); });\r\n              });\r\n            });\r\n          });\r\n        });\r\n      });\r\n      return chain.then(function() {\r\n        showProg('merge', 90, 'Ukl\u00e1d\u00e1m\u2026');\r\n        return merged.save();\r\n      });\r\n    }).then(function(out) {\r\n      showProg('merge', 100, 'Hotovo!');\r\n      setTimeout(function() { hideProg('merge'); }, 600);\r\n      var res = document.getElementById('pdf-r-merge');\r\n      res.innerHTML = '<div class=\"result-box success\"><div class=\"result-header\"><span class=\"ri\">\u2705<\/span><strong>Slou\u010deno \u2014 ' + files.length + ' soubor\u016f, ' + fmtSize(out.byteLength) + '<\/strong><\/div><div class=\"dl-list\"><div class=\"dl-item\" id=\"pdf-mr0\"><span>slouceny.pdf<\/span><\/div><\/div><\/div>';\r\n      document.getElementById('pdf-mr0').appendChild(makeDlBtn(out, 'slouceny.pdf'));\r\n    }).catch(function() {\r\n      showErr('merge', 'Chyba p\u0159i zpracov\u00e1n\u00ed. Je PDF zaheslovan\u00fd?');\r\n    }).finally(function() {\r\n      document.getElementById('pdf-b-merge').disabled = false;\r\n    });\r\n  };\r\n\r\n  window.pdfSplit = function() {\r\n    document.getElementById('pdf-b-split').disabled = true;\r\n    document.getElementById('pdf-r-split').innerHTML = '';\r\n    showProg('split', 10, 'Na\u010d\u00edt\u00e1m soubor\u2026');\r\n    var PDFDocument = PDFLib.PDFDocument;\r\n    readFile(S.split[0]).then(function(bytes) {\r\n      return PDFDocument.load(bytes).then(function(src) {\r\n        var total = src.getPageCount();\r\n        var ranges = [];\r\n        if (S.sm === 'all') {\r\n          for (var i = 0; i < total; i++) ranges.push({ pages: [i], name: 'strana_' + (i+1) + '.pdf' });\r\n        } else if (S.sm === 'every') {\r\n          var n = Math.max(1, parseInt(document.getElementById('pdf-sv-every').value) || 1);\r\n          for (var i = 0; i < total; i += n) {\r\n            var chunk = [];\r\n            for (var j = i; j < Math.min(i+n, total); j++) chunk.push(j);\r\n            ranges.push({ pages: chunk, name: 'cast_' + (Math.floor(i\/n)+1) + '.pdf' });\r\n          }\r\n        } else {\r\n          var raw = document.getElementById('pdf-sv-range').value;\r\n          raw.split(',').forEach(function(part, idx) {\r\n            part = part.trim(); var pg = [];\r\n            if (part.indexOf('-') > -1) {\r\n              var ab = part.split('-');\r\n              var a = parseInt(ab[0].trim()) - 1, b = parseInt(ab[1].trim()) - 1;\r\n              if (!isNaN(a) && !isNaN(b)) for (var i = a; i <= Math.min(b, total-1); i++) pg.push(i);\r\n            } else {\r\n              var nn = parseInt(part) - 1;\r\n              if (!isNaN(nn) && nn >= 0 && nn < total) pg.push(nn);\r\n            }\r\n            if (pg.length) ranges.push({ pages: pg, name: 'cast_' + (idx+1) + '.pdf' });\r\n          });\r\n        }\r\n        if (!ranges.length) { showErr('split', 'Neplatn\u00fd rozsah str\u00e1nek.'); return; }\r\n\r\n        var chain = Promise.resolve([]);\r\n        ranges.forEach(function(r, i) {\r\n          chain = chain.then(function(results) {\r\n            showProg('split', 10 + Math.round(80 * i \/ ranges.length), '\u010c\u00e1st ' + (i+1) + '\/' + ranges.length + '\u2026');\r\n            return PDFDocument.create().then(function(out) {\r\n              return out.copyPages(src, r.pages).then(function(pages) {\r\n                pages.forEach(function(p) { out.addPage(p); });\r\n                return out.save().then(function(b) {\r\n                  results.push({ bytes: b, name: r.name });\r\n                  return results;\r\n                });\r\n              });\r\n            });\r\n          });\r\n        });\r\n        return chain;\r\n      });\r\n    }).then(function(results) {\r\n      showProg('split', 100, 'Hotovo!');\r\n      setTimeout(function() { hideProg('split'); }, 600);\r\n      var cnt = results.length;\r\n      var res = document.getElementById('pdf-r-split');\r\n      res.innerHTML = '<div class=\"result-box success\"><div class=\"result-header\"><span class=\"ri\">\u2705<\/span><strong>Rozd\u011bleno na ' + cnt + ' ' + (cnt===1?'soubor':cnt<5?'soubory':'soubor\u016f') + '<\/strong><\/div><div class=\"dl-list\" id=\"pdf-dl-split\"><\/div><\/div>';\r\n      var dl = document.getElementById('pdf-dl-split');\r\n      results.forEach(function(r) {\r\n        var row = document.createElement('div');\r\n        row.className = 'dl-item';\r\n        row.innerHTML = '<span>' + r.name + '<small>' + fmtSize(r.bytes.byteLength) + '<\/small><\/span>';\r\n        row.appendChild(makeDlBtn(r.bytes, r.name));\r\n        dl.appendChild(row);\r\n      });\r\n    }).catch(function() {\r\n      showErr('split', 'Chyba p\u0159i zpracov\u00e1n\u00ed. Je PDF zaheslovan\u00fd?');\r\n    }).finally(function() {\r\n      document.getElementById('pdf-b-split').disabled = false;\r\n    });\r\n  };\r\n\r\n  window.pdfCompress = function() {\r\n    document.getElementById('pdf-b-compress').disabled = true;\r\n    document.getElementById('pdf-r-compress').innerHTML = '';\r\n    showProg('compress', 10, 'Na\u010d\u00edt\u00e1m soubor\u2026');\r\n    var PDFDocument = PDFLib.PDFDocument;\r\n    var origSize = S.compress[0].size;\r\n    var fname = S.compress[0].name.replace(\/\\.pdf$\/i, '_komprimovany.pdf');\r\n    readFile(S.compress[0]).then(function(bytes) {\r\n      showProg('compress', 40, 'Zpracov\u00e1v\u00e1m\u2026');\r\n      return PDFDocument.load(bytes, { updateMetadata: false }).then(function(doc) {\r\n        doc.setTitle(''); doc.setAuthor(''); doc.setSubject('');\r\n        doc.setKeywords([]); doc.setProducer(''); doc.setCreator('');\r\n        showProg('compress', 75, 'Ukl\u00e1d\u00e1m\u2026');\r\n        return doc.save({ useObjectStreams: S.q !== 'high', addDefaultPage: false });\r\n      });\r\n    }).then(function(out) {\r\n      showProg('compress', 100, 'Hotovo!');\r\n      setTimeout(function() { hideProg('compress'); }, 600);\r\n      var newSize = out.byteLength;\r\n      var saved = origSize > newSize ? Math.round((1 - newSize\/origSize) * 100) : 0;\r\n      var desc = saved > 0\r\n        ? 'U\u0161et\u0159eno ' + saved + '% (' + fmtSize(origSize) + ' \u2192 ' + fmtSize(newSize) + ')'\r\n        : 'Soubor nelze d\u00e1l zmen\u0161it (' + fmtSize(newSize) + ')';\r\n      var res = document.getElementById('pdf-r-compress');\r\n      res.innerHTML = '<div class=\"result-box success\"><div class=\"result-header\"><span class=\"ri\">\u2705<\/span><strong>Komprimace dokon\u010dena<\/strong><\/div><div class=\"dl-list\"><div class=\"dl-item\" id=\"pdf-cr0\"><span>' + fname + '<small>' + desc + '<\/small><\/span><\/div><\/div><\/div>';\r\n      document.getElementById('pdf-cr0').appendChild(makeDlBtn(out, fname));\r\n    }).catch(function() {\r\n      showErr('compress', 'Chyba p\u0159i zpracov\u00e1n\u00ed. Je PDF zaheslovan\u00fd?');\r\n    }).finally(function() {\r\n      document.getElementById('pdf-b-compress').disabled = false;\r\n    });\r\n  };\r\n\r\n})();\r\n<\/script>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>&nbsp; \ud83d\udcc4 Slou\u010dit \u2702\ufe0f Rozd\u011blit \ud83d\udddc\ufe0f Komprimovat \ud83d\udcc2 P\u0159et\u00e1hni PDF soubory sem nebo klikni pro v\u00fdb\u011br Vyber v\u00edce soubor\u016f najednou \ud83d\udcce Slou\u010dit PDF Vyber alespo\u0148 2 soubory \ud83d\udcc4 P\u0159et\u00e1hni jeden PDF soubor sem nebo klikni pro v\u00fdb\u011br Ka\u017ed\u00e1 str\u00e1nka zvl\u00e1\u0161\u0165 Rozsah str\u00e1nek Po N str\u00e1nk\u00e1ch Str\u00e1nky (nap\u0159. 1-3, 5, 7-9): Str\u00e1nek na d\u00edl: \u2702\ufe0f Rozd\u011blit [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-10714","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/lukasbarda.cz\/english\/wp-json\/wp\/v2\/pages\/10714","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lukasbarda.cz\/english\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/lukasbarda.cz\/english\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/lukasbarda.cz\/english\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/lukasbarda.cz\/english\/wp-json\/wp\/v2\/comments?post=10714"}],"version-history":[{"count":10,"href":"https:\/\/lukasbarda.cz\/english\/wp-json\/wp\/v2\/pages\/10714\/revisions"}],"predecessor-version":[{"id":10722,"href":"https:\/\/lukasbarda.cz\/english\/wp-json\/wp\/v2\/pages\/10714\/revisions\/10722"}],"wp:attachment":[{"href":"https:\/\/lukasbarda.cz\/english\/wp-json\/wp\/v2\/media?parent=10714"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}