PDF & Document Tools · EasyTutorGuide

PDF Splitter

Split a PDF by page range, custom pages, or separate every page into its own downloadable PDF file.

Original full-featured version also available

— views

Use PDF Splitter

Choose an input or option above to begin.

How to use PDF Splitter — step by step

Split a PDF by page range, custom pages, or separate every page into its own downloadable PDF file.

  1. Prepare a safe sample

    PDF Splitter helps you split a PDF by page range, custom pages, or separate every page into its own downloadable PDF file . Before working, decide what a successful result should look like. Use a two- or three-page practice document that does not contain personal information. Keep the starting material available so that you can compare it with the processed version. Avoid personal or business records on your first run. This simple preparation makes troubleshooting easier and helps you notice unexpected changes.

  2. Open and configure the app

    From the library, select Open App on the PDF Splitter card. Use the app category menu below the logo to find related tools without losing the main page. Choose a PDF and type page numbers such as 1,3-5. Read each field label and make sure any numbers use the correct units. If an option has several modes, begin with the default setting. Do not skip browser prompts without reading what they allow.

  3. Run the first practical test

    Extract the selection and download the new PDF. Work in a short sequence: enter or select the input, choose the processing action, and look for an explicit preview or result message. If there is no immediate result, check the required fields for missing information instead of clicking repeatedly. Give the browser time to complete file processing, especially when a large document, screen recording or image is involved.

  4. Review the output

    Compare the result with your starting input. Page numbers start at one; verify the original document page count. Check names, dimensions, file extensions, units, dates and calculations as appropriate for this app. If the output is a file, open the downloaded copy in another viewer when possible. For a writing tool, proofread the text manually. For a calculator, check at least one example by hand so you understand what the result represents.

  5. Download, copy or share correctly

    When you are satisfied, use the available Download, Copy, Print or Save action inside PDF Splitter. A download saves the processed content to your device; it does not automatically update the original uploaded file. The Share App button sends the app URL rather than your private input, result or uploaded document. If your device offers a sharing sheet, choose a destination there. If not, copy and paste the link yourself.

  6. Keep information safe

    Use a non-sensitive example PDF first; check page count, ordering, formatting and accessibility after saving the resulting document. Some browser-based features work locally, but Google Translate, analytics, advertising and optional processing libraries may make external requests according to their providers' privacy practices. Make sure you are authorized to upload, record, publish or distribute the material. Do not put secret passwords or confidential records into a tool merely to see how it works. Review the Privacy, Terms and Legal pages linked below.

  7. Troubleshoot and practise again

    If PDF Splitter shows an error, simplify the input and repeat the steps with a new small example. Refresh only after saving any useful work. Permission-based recording needs HTTPS and compatible browser support; downloaded file types can also vary across operating systems. If processing depends on an online PDF or QR library, check your connection. Reopen the result, confirm it works, then return to the library to explore another app in this category.

How to use PDF Splitter

1. Start with a clear purpose. Open PDF Splitter and decide exactly what you want it to accomplish before entering any information. For example, if you are using it for pdf & documents, choose one small real task rather than a huge collection of unrelated jobs. Read the labels beside the controls. When a setting is unfamiliar, leave it at the default until you understand what it changes. This helps you get a useful result on the first attempt instead of guessing.

2. Prepare an example. Gather the text, numbers, dates, image, or other information required by PDF Splitter. Enter a small sample first so you can check the behavior without risking important work. Only give the app access to files or browser permissions when a feature actually needs them. Avoid entering passwords, payment details, private medical records, or confidential documents unless you know how the app handles them.

3. Enter your input carefully. Find the main field, upload control, picker, or action button. Type or select your sample, then review everything before running the operation. Check spelling, measurement units, date format, and selected options. If your task involves a file, confirm its type and size. On a phone, use the same controls in the narrower layout; you should not have to drag the entire webpage sideways.

4. Make one change at a time. Adjust the most relevant option and observe how PDF Splitter responds. For pdf & documents, a simple before-and-after comparison is usually more informative than changing five things together. If the result looks wrong, undo the last adjustment or start again with the sample. Some functions depend on browser support, device permissions, or an available download option, so read any message displayed by the app.

5. Inspect the result. Do not assume that a generated preview, calculation, or transformed file is correct merely because it appeared quickly. Compare it with your original goal. Look for missing lines, odd characters, unexpected rounding, changed dimensions, or incomplete output. Test the most important part by hand where possible. If a file is generated, inspect the downloaded version too, because a preview and a saved file are not always identical.

6. Save what matters. Use the app’s available copy, print, export, or download option if one is shown. Give saved files descriptive names and keep your original copy until you have checked the result. If no saving control exists, you can usually preserve important text by copying it to your own notes. Never assume an online tool automatically backs up your work or remembers your changes between sessions.

7. Try a realistic task. Now repeat the workflow with a real pdf splitter task, beginning with input, choosing only necessary options, reviewing output, and saving it. This sequence turns a one-time experiment into a repeatable habit. If you get stuck, simplify your input and try again. Use the browser Back button or the library link to return to other EasyTutorGuide tools, and share a useful link with someone who might benefit.

`;on('run',()=>{$('preview-frame').srcdoc=documentHTML();notice('Preview updated in a sandboxed frame.')});on('save',()=>download('my-web-page.html',documentHTML(),'text/html'));return;} set(`${textarea('source','HTML, CSS or JavaScript source','Paste code to minify')}${controls(btn('run','Minify'),btn('save','Download result','alt'))}`);on('run',()=>{let s=val('source'),lang=val('lang');let output=lang==='json'?JSON.stringify(JSON.parse(s)):lang==='html'?s.replace(//g,'').replace(/>\s+<').trim():lang==='css'?s.replace(/\/\*[\s\S]*?\*\//g,'').replace(/\s*([{}:;,])\s*/g,'$1').trim():s.replace(/\/\*[\s\S]*?\*\//g,'').replace(/^[ \t]+/gm,'').replace(/\n{2,}/g,'\n');notice(output+'\n\nNote: JavaScript minification here is whitespace/comment reduction, not a full parser; review before deployment.')});on('save',()=>download('minified.txt',$('result').textContent));} function writer(){set(`${field('topic','Topic','text','How to prepare for an interview')}${textarea('ideas','Key facts to include','Add your facts, requirements and preferred tone.')}${controls(btn('run','Create structured writing outline'),btn('save','Download draft','alt'))}`);on('run',()=>notice(`WRITING OUTLINE: ${val('topic')}\n\nIntroduction: Explain why ${val('topic')} matters.\n\nImportant points from your notes:\n${val('ideas')}\n\nSuggested structure:\n1. Start with a clear purpose and audience.\n2. Give one accurate example per main idea.\n3. Include real details from your source notes.\n4. Review grammar, clarity and tone.\n5. Conclude with a useful next action.\n\nThis tool creates a local outline, not a generated AI response. Edit before publishing.`));on('save',()=>download('writing-outline.txt',$('result').textContent));} function finance(mode){if(mode==='property'){set(`
${field('price','Property price / sale price','number','650000')}${field('down','Down payment or mortgage balance','number','130000')}${field('legal','Legal and closing costs','number','2000')}${field('tax','Transfer tax / other taxes','number','10000')}${field('commission','Agent commission (%) on sale','number','0')}
${controls(btn('run','Estimate costs'))}`);on('run',()=>{let p=num('price'),d=num('down'),l=num('legal'),t=num('tax'),com=p*num('commission')/100;notice(val('what')==='buy'?`Property price: $${p.toFixed(2)}\nDown payment: $${d.toFixed(2)}\nEstimated mortgage principal: $${(p-d).toFixed(2)}\nEstimated cash required at closing: $${(d+l+t).toFixed(2)}\n\nEstimates only. Check location-specific land-transfer taxes and lender requirements.`:`Sale amount: $${p.toFixed(2)}\nMortgage payoff: $${d.toFixed(2)}\nAgent commission: $${com.toFixed(2)}\nEstimated net proceeds: $${(p-d-l-t-com).toFixed(2)}\n\nCheck taxes and professional advice before making a decision.`)});return;} set(`${field('income','Monthly income ($)','number','5000')}${textarea('items','Expenses: one label,amount per line','Rent,1800\nGroceries,500\nTransport,200')}${controls(btn('run','Calculate budget'),btn('save','Download summary','alt'))}`);on('run',()=>{const lines=val('items').split('\n').filter(x=>x.trim()).map(x=>{let [label,amount]=x.split(/,(?=[^,]*$)/);return {label,amount:Number(amount)}});if(lines.some(x=>!Number.isFinite(x.amount)))throw Error('Each line needs a label and numeric amount separated by a comma.');let total=lines.reduce((a,b)=>a+b.amount,0);notice(`Monthly income: $${num('income').toFixed(2)}\nExpenses:\n${lines.map(x=>`${x.label}: $${x.amount.toFixed(2)}`).join('\n')}\nTotal expenses: $${total.toFixed(2)}\nBalance: $${(num('income')-total).toFixed(2)}`)});on('save',()=>download('budget.txt',$('result').textContent));} function receipt(){set(`
${field('business','Business name','text','Example Services')}${field('customer','Customer','text','Customer name')}${field('date','Date','date',new Date().toISOString().slice(0,10))}${field('tax','Tax rate (%)','number','13')}
${textarea('items','Items: description,quantity,unit price per line','Tutoring,2,25\nMaterials,1,10')}${controls(btn('run','Calculate receipt'),btn('print','Print / Save PDF','alt'))}`);on('run',()=>{let lines=val('items').split('\n').filter(Boolean).map(s=>s.split(',')),sum=0;const itemRows=lines.map(parts=>{let [n,q,p]=parts,amount=Number(q)*Number(p);if(!Number.isFinite(amount))throw Error('Use item,quantity,price on each line.');sum+=amount;return `${n}: ${q} × $${Number(p).toFixed(2)} = $${amount.toFixed(2)}`});notice(`SERVICE RECEIPT\n${val('business')}\nCustomer: ${val('customer')}\nDate: ${val('date')}\n\n${itemRows.join('\n')}\nSubtotal: $${sum.toFixed(2)}\nTax: $${(sum*num('tax')/100).toFixed(2)}\nTOTAL: $${(sum*(1+num('tax')/100)).toFixed(2)}\n\nConfirm taxes and payment status before issuing.`)});on('print',()=>window.print());} function planner(){set(`${field('title','Task title','text','Prepare presentation')}${field('due','Due date','date',new Date().toISOString().slice(0,10))}${textarea('notes','Notes','Add specific actions or reminders')}${controls(btn('add','Add task'),btn('export','Download tasks','alt'),btn('clear','Clear tasks','danger'))}`);let key='etg-tasks-'+location.pathname, tasks=[];try{tasks=JSON.parse(localStorage.getItem(key))||[]}catch{}function render(){localStorage.setItem(key,JSON.stringify(tasks));$('tasks').innerHTML=tasks.map((t,i)=>`
  • ${html(t.notes)}
  • `).join('')||'
  • No tasks added yet.
  • '; $('tasks').querySelectorAll('input[data-i]').forEach(x=>x.addEventListener('change',()=>{tasks[+x.dataset.i].done=x.checked;render()}));$('tasks').querySelectorAll('[data-remove]').forEach(x=>x.addEventListener('click',()=>{tasks.splice(+x.dataset.remove,1);render()}))};on('add',()=>{if(!val('title').trim())throw Error('Enter a task title.');tasks.push({title:val('title'),due:val('due'),priority:val('priority'),notes:val('notes'),done:false});render();notice('Task added on this browser.')});on('export',()=>download('task-list.json',JSON.stringify(tasks,null,2),'application/json'));on('clear',()=>{if(confirm('Clear all saved tasks in this browser?')){tasks=[];render();notice('Tasks cleared.')}});render();} function kitchen(){let clocks=Array.from({length:6},()=>({left:0,on:false,end:0}));set('
    ');let labels=['Rice','Pasta','Tea','Oven','Vegetables','Extra'];$('clocks').innerHTML=labels.map((t,i)=>`

    ${t}

    ${field('min'+i,'Minutes','number','5')}05:00${controls(btn('start'+i,'Start'),btn('pause'+i,'Pause','alt'),btn('reset'+i,'Reset','alt'))}
    `).join('');function sound(){try{let a=new (window.AudioContext||window.webkitAudioContext)(),o=a.createOscillator(),g=a.createGain();o.frequency.value=740;g.gain.value=.08;o.connect(g);g.connect(a.destination);o.start();setTimeout(()=>{o.stop();a.close()},420)}catch{}}clocks.forEach((v,i)=>{on('start'+i,()=>{v.left=v.on?v.left:Math.max(1,Math.round(num('min'+i)*60))*1000;v.end=Date.now()+v.left;v.on=true;notice(labels[i]+' timer started. Leave this page open to hear the alert.')});on('pause'+i,()=>{v.left=Math.max(0,v.end-Date.now());v.on=false});on('reset'+i,()=>{v.left=0;v.on=false;$('clock'+i).textContent='00:00'})});setInterval(()=>{clocks.forEach((v,i)=>{if(!v.on)return;v.left=Math.max(0,v.end-Date.now());let s=Math.ceil(v.left/1000);$('clock'+i).textContent=`${String(Math.floor(s/60)).padStart(2,'0')}:${String(s%60).padStart(2,'0')}`;if(!s){v.on=false;sound();notice(`${labels[i]} timer finished.`)}});},200);} function recipe(){set(`${textarea('ingredients','Ingredients you have (comma separated)','eggs, tomato, bread')}${field('people','Servings','number','2')}${controls(btn('run','Suggest cooking plan'),btn('save','Download recipe','alt'))}`);on('run',()=>{const ings=val('ingredients').split(',').map(x=>x.trim()).filter(Boolean);if(!ings.length)throw Error('Enter at least one ingredient.');notice(`RECIPE IDEA: ${val('style')} ingredient skillet\nServings: ${Math.max(1,num('people'))}\n\nIngredients: ${ings.join(', ')}\n\nPreparation:\n1. Wash and prepare ingredients safely; separate raw and ready-to-eat foods.\n2. Chop suitable vegetables into even pieces and measure seasonings.\n3. Heat an appropriate pan; add a small amount of oil or water if needed.\n4. Cook ingredients in order of required cooking time, using food-safe internal temperatures for meat, eggs, and seafood.\n5. Taste, adjust seasoning, divide into portions, and serve promptly.\n\nThis is a general idea from the ingredients you entered, not a tested recipe. Check allergies and cooking temperatures.`)});on('save',()=>download('recipe.txt',$('result').textContent));} function whiteboard(){set(`
    ${field('pen','Pen color','color','#194d38')}${field('weight','Pen width (pixels)','number','4')}
    ${controls(btn('clear','Clear board','danger'),btn('undo','Undo stroke','alt'),btn('save','Download PNG','alt'))}`);let c=$('board'),ctx=c.getContext('2d'),painting=false,undo=[];function point(ev){let r=c.getBoundingClientRect();return{x:(ev.clientX-r.left)*c.width/r.width,y:(ev.clientY-r.top)*c.height/r.height}}c.addEventListener('pointerdown',ev=>{ev.preventDefault();undo.push(ctx.getImageData(0,0,c.width,c.height));painting=true;c.setPointerCapture(ev.pointerId);let p=point(ev);ctx.beginPath();ctx.moveTo(p.x,p.y)});c.addEventListener('pointermove',ev=>{if(!painting)return;let p=point(ev);ctx.lineCap='round';ctx.lineJoin='round';ctx.strokeStyle=val('pen');ctx.lineWidth=Math.max(1,num('weight'));ctx.lineTo(p.x,p.y);ctx.stroke()});c.addEventListener('pointerup',()=>painting=false);c.addEventListener('pointercancel',()=>painting=false);on('clear',()=>{undo.push(ctx.getImageData(0,0,c.width,c.height));ctx.clearRect(0,0,c.width,c.height)});on('undo',()=>{let p=undo.pop();if(p)ctx.putImageData(p,0,0)});on('save',()=>exportCanvas(c,'image/png','whiteboard.png'));} function qr(){set(`${textarea('text','Text or website URL','https://easytutorguide.com')}${controls(btn('run','Generate QR code'),btn('save','Download PNG','alt'))}
    `);on('run',async()=>{if(!window.QRCode)throw Error('QR library did not load. Connect to the internet and reload.');let text=val('text').trim();if(!text)throw Error('Enter text or a link.');$('qr').innerHTML='';new QRCode($('qr'),{text,width:256,height:256,correctLevel:QRCode.CorrectLevel.M});notice('QR created. Test it with another device before printing.')});on('save',()=>{let cv=$('qr').querySelector('canvas');if(!cv)throw Error('Generate the code first.');exportCanvas(cv,'image/png','qr-code.png')});} function words(){set(`${textarea('source','Text to analyze','Paste an essay, paragraph or notes')}${controls(btn('run','Analyze text'),btn('copy','Copy analysis','alt'))}`);on('run',()=>{const s=val('source'),ws=s.match(/[\p{L}\p{N}]+(?:['’][\p{L}]+)*/gu)||[],chars=s.length,plain=s.replace(/\s/g,'').length,sen=s.split(/[.!?]+/).filter(v=>v.trim()).length,pars=s.split(/\n\s*\n/).filter(x=>x.trim()).length;let freq={};ws.forEach(w=>freq[w.toLowerCase()]=(freq[w.toLowerCase()]||0)+1);let common=Object.entries(freq).sort((a,b)=>b[1]-a[1]).slice(0,8);notice(`Words: ${ws.length}\nCharacters (with spaces): ${chars}\nCharacters (without spaces): ${plain}\nSentences: ${sen}\nParagraphs: ${pars}\nReading time at 200 words/min: ${(ws.length/200).toFixed(1)} minutes\nSpeaking time at 130 words/min: ${(ws.length/130).toFixed(1)} minutes\nCommon words: ${common.map(([w,n])=>`${w} (${n})`).join(', ')}`)});outcopy();} function units(){const groups={Length:{m:1,km:1000,cm:.01,mm:.001,mi:1609.344,ft:.3048,in:.0254},Mass:{kg:1,g:.001,lb:.45359237,oz:.0283495},Volume:{L:1,mL:.001,'US gal':3.785411784,'US cup':.2365882365},Area:{'m²':1,'ft²':.09290304,acre:4046.8564224},Speed:{'m/s':1,'km/h':1/3.6,mph:.44704},Time:{s:1,min:60,h:3600,day:86400},Storage:{B:1,KB:1000,MB:1e6,GB:1e9,KiB:1024,MiB:1048576},Temperature:{C:1,F:1,K:1}};set(`
    ${field('amount','Value','number','1')}
    ${controls(btn('run','Convert units'))}`);function fill(){let opts=Object.keys(groups[val('kind')]).map(k=>``).join('');$('from').innerHTML=opts;$('to').innerHTML=opts;if($('to').options.length>1)$('to').selectedIndex=1}$('kind').addEventListener('change',fill);fill();on('run',()=>{let group=val('kind'),a=val('from'),b=val('to'),n=num('amount'),result;if(group==='Temperature'){let c=a==='C'?n:a==='F'?(n-32)*5/9:n-273.15;result=b==='C'?c:b==='F'?c*9/5+32:c+273.15}else result=n*groups[group][a]/groups[group][b];notice(`${n} ${a} = ${Number(result.toPrecision(11))} ${b}`)});} function password(){set(`
    ${field('length','Password length','number','20')}
    ${controls(btn('run','Create secure password'),btn('copy','Copy password','alt'))}`);on('run',()=>{let n=num('length');if(n<8||n>128)throw Error('Choose a length from 8 to 128.');let chars='ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'+($('numbers').checked?'23456789':'')+($('sym').checked?'!@#$%^&*-_+=?':'');let arr=new Uint32Array(n);crypto.getRandomValues(arr);notice(Array.from(arr,z=>chars[z%chars.length]).join(''))});outcopy();} function pdf(mode){set(`${mode==='split'?field('pages','Page numbers (e.g. 1,3-5)','text','1'):''}${controls(btn('run',mode==='merge'?'Merge PDF files':'Extract selected pages'))}`);on('run',async()=>{if(!window.PDFLib)throw Error('PDF processing library unavailable. Connect to the internet to load it.');let files=Array.from($('files').files);if(!files.length)throw Error('Choose at least one PDF.');if(mode==='merge'){let doc=await PDFLib.PDFDocument.create();for(let file of files){let source=await PDFLib.PDFDocument.load(await file.arrayBuffer()),parts=await doc.copyPages(source,source.getPageIndices());parts.forEach(p=>doc.addPage(p))}download('merged.pdf',new Blob([await doc.save()],{type:'application/pdf'}));notice(`Combined ${files.length} PDF files and downloaded merged.pdf.`)}else{let source=await PDFLib.PDFDocument.load(await files[0].arrayBuffer()),total=source.getPageCount(),selected=new Set();for(let token of val('pages').split(',')){let [a,b]=token.trim().split('-').map(Number);if(!Number.isInteger(a)||a<1)throw Error('Enter page numbers starting at 1.');for(let x=a;x<=(b||a);x++){if(x>total)throw Error('Page '+x+' exceeds '+total+' pages.');selected.add(x-1)}}let doc=await PDFLib.PDFDocument.create();(await doc.copyPages(source,[...selected])).forEach(p=>doc.addPage(p));download('selected-pages.pdf',new Blob([await doc.save()],{type:'application/pdf'}));notice(`Downloaded ${selected.size} selected pages of ${total}.`)}});} function age(){set(`
    ${field('birth','Birth date','date','1990-01-01')}${field('asof','Calculate as of','date',new Date().toISOString().slice(0,10))}
    ${controls(btn('run','Calculate age'))}`);on('run',()=>{let b=new Date(val('birth')+'T12:00:00'),n=new Date(val('asof')+'T12:00:00');if(!Number.isFinite(b.getTime())||!Number.isFinite(n.getTime())||nConvert${controls(btn('run','Convert text'),btn('copy','Copy result','alt'))}`);on('run',()=>{let s=val('source'),m=val('mode');let r=m==='upper'?s.toUpperCase():m==='lower'?s.toLowerCase():m==='title'?s.toLowerCase().replace(/\b[\p{L}]/gu,x=>x.toUpperCase()):m==='sentence'?s.toLowerCase().replace(/(^\s*[a-z]|[.!?]\s*[a-z])/g,x=>x.toUpperCase()):Array.from(s).map((x,i)=>i%2?x.toUpperCase():x.toLowerCase()).join('');notice(r)});outcopy();} window.ETG_EXTRA_BOOT=mode=>{const handlers={resizer:()=>images('resizer'),sketch:()=>images('sketch'),editor:()=>images('editor'),color:colors,code:()=>code('editor'),minifier:()=>code('minifier'),writer,property:()=>finance('property'),budget:()=>finance('budget'),receipt,planner,kitchen,recipe,whiteboard,qr,words,units,password,split:()=>pdf('split'),merge:()=>pdf('merge'),age,casing};if(!handlers[mode])return false;handlers[mode]();return true;}; })();