📚 PDF to CSV Mock Test Generator
Koi file select nahi ki gayi
Extracted Data Preview
| Type | Question Title | Option A | Option B | Option C | Option D | Answer | Description | Image URL |
|---|
| Type | Question Title | Option A | Option B | Option C | Option D | Answer | Description | Image URL |
|---|
// Naya function file ka naam dikhane ke liye function showFileName() { const fileInput = document.getElementById('pdfFile'); const fileNameDisplay = document.getElementById('fileNameDisplay'); if (fileInput.files.length > 0) { fileNameDisplay.innerHTML = `Selected: ${fileInput.files[0].name}`; } else { fileNameDisplay.innerHTML = "Koi file select nahi ki gayi"; } }
async function processPDF() { const fileInput = document.getElementById('pdfFile'); const statusDiv = document.getElementById('loadingStatus');
if (fileInput.files.length === 0) { statusDiv.innerHTML = "Kripya pehle 'Choose PDF File' par click karke ek PDF select karein!"; return; }
statusDiv.innerHTML = "Processing PDF... Kripya pratiksha karein..."; const file = fileInput.files[0]; const fileReader = new FileReader();
fileReader.onload = async function() { const typedarray = new Uint8Array(this.result); try { const pdf = await pdfjsLib.getDocument(typedarray).promise; let fullText = "";
for (let i = 1; i <= pdf.numPages; i++) { const page = await pdf.getPage(i); const textContent = await page.getTextContent(); const pageText = textContent.items.map(item => item.str).join(" "); fullText += pageText + " \n"; }
parseTextToCSV(fullText); statusDiv.innerHTML = "PDF successfully extract ho gayi! Niche check karein."; document.getElementById('downloadBtn').disabled = false; } catch (error) { statusDiv.innerHTML = "Error: PDF read nahi ho saki. Yeh file shayad image-based PDF hai."; console.error(error); } };
fileReader.readAsArrayBuffer(file); }
function parseTextToCSV(text) { let parts = text.split(/(?=\b\d{1,2}\s*\.)/); extractedQuestions = [];
parts.forEach(part => { if (part.trim().length > 10) { let qText = part.trim(); let options = ["", "", "", ""];
const optARegex = /(?:\(a\)|a\))\s*(.*?)(?=\(b\)|b\)|\(c\)|c\)|\(d\)|d\)|$)/i; const optBRegex = /(?:\(b\)|b\))\s*(.*?)(?=\(c\)|c\)|\(d\)|d\)|$)/i; const optCRegex = /(?:\(c\)|c\))\s*(.*?)(?=\(d\)|d\)|$)/i; const optDRegex = /(?:\(d\)|d\))\s*(.*)/i;
let matchA = qText.match(optARegex); let matchB = qText.match(optBRegex); let matchC = qText.match(optCRegex); let matchD = qText.match(optDRegex);
if (matchA) { options[0] = matchA[1].trim(); qText = qText.replace(matchA[0], ''); } if (matchB) { options[1] = matchB[1].trim(); qText = qText.replace(matchB[0], ''); } if (matchC) { options[2] = matchC[1].trim(); qText = qText.replace(matchC[0], ''); } if (matchD) { options[3] = matchD[1].trim(); qText = qText.replace(matchD[0], ''); }
qText = qText.replace(/[\r\n]+/g, ' ').trim();
extractedQuestions.push({ type: "MCQ", title: qText, a: options[0], b: options[1], c: options[2], d: options[3], ans: "", desc: "", img: "" }); } }); renderTable(); }
function renderTable() { const tbody = document.getElementById('tableBody'); tbody.innerHTML = "";
extractedQuestions.forEach((q, index) => { const tr = document.createElement('tr'); tr.innerHTML = `
`; tbody.appendChild(tr); });
const qCount = extractedQuestions.length; const counterEl = document.getElementById('qCounter'); if(qCount === 20) { counterEl.innerHTML = `Questions: ${qCount} / 20 (Perfect Set!)`; } else { counterEl.innerHTML = `Questions: ${qCount} / 20`; } }
function downloadCSV() { if (extractedQuestions.length === 0) return;
let csvContent = "data:text/csv;charset=utf-8,\uFEFF"; csvContent += "question_type,question_title,option.a,option.b,option.c,option.d,answer,description,image\n";
for (let i = 0; i < extractedQuestions.length; i++) { let type = document.getElementById(`type_${i}`).value.replace(/"/g, '""'); let title = document.getElementById(`title_${i}`).value.replace(/"/g, '""'); let a = document.getElementById(`a_${i}`).value.replace(/"/g, '""'); let b = document.getElementById(`b_${i}`).value.replace(/"/g, '""'); let c = document.getElementById(`c_${i}`).value.replace(/"/g, '""'); let d = document.getElementById(`d_${i}`).value.replace(/"/g, '""'); let ans = document.getElementById(`ans_${i}`).value.replace(/"/g, '""'); let desc = document.getElementById(`desc_${i}`).value.replace(/"/g, '""'); let img = document.getElementById(`img_${i}`).value.replace(/"/g, '""');csvContent += `"${type}","${title}","${a}","${b}","${c}","${d}","${ans}","${desc}","${img}"\n`; }const encodedUri = encodeURI(csvContent); const link = document.createElement("a"); link.setAttribute("href", encodedUri); link.setAttribute("download", "mock_test_bulk.csv"); document.body.appendChild(link); link.click(); document.body.removeChild(link); }