Current Affairs, Latest News Updates, Online Tests for TNPSC Exams

Target TNPSC 2014 Test 5 Syllabus

Indian Polity
Constitution of India
Preamble to the constitution
Salient  features  of  constitution
Union,  State  and  territory
Citizenship‐rights  amend duties
Fundamental  rights
Fundamental  duties
Human  rights  charter
Union legislature  –  Parliament
State  executive  ‐  State  Legislature  –  assembly
Status  of  Jammu & Kashmir
Local government – panchayat raj
Tamil Nadu
Judiciary in India
Rule  of  law/Due  process  of  law
Indian  federalism  –  center  –  state  relations
Emergency provisions
Civil services in India
Administrative challenges in a welfare state
Complexities  of district administration
Elections ‐ Election  Commission Union and State
Official language and Schedule‐VIII
Amendments to constitution
Schedules to  constitution
Administrative  reforms  &  tribunals
Corruption  in  public  life-Anti‐corruption  measures
Central  Vigilance  Commission,    lok‐adalats,  Ombudsman, 
Comptroller  and  Auditor  General  of  India.
Right  to  information  ‐  Central  and  State Commission
Empowerment of women
Voluntary organizations and public grievances redressal
Consumer protection forms

இந்திய அரசியலமைப்பு
அரசியல் அமைப்பின் முன்னுரை
அரசியலமைப்பின் சிறப்பம்சங்கள்
மத்திய , மாநில மற்றும் பிராந்தியங்கள் (union territories)
குடியுரிமை உரிமைகள்,  கடமைகள் - அரசியலமைப்பு திருத்தங்கள்
அடிப்படை உரிமைகள்
அடிப்படை கடமைகள்
மனித உரிமைகள் சாசனம்
மத்திய  நாடாளுமன்றம்
மாநில சட்டமன்றம்
ஜம்மு & காஷ்மீர் சிறப்பு அந்தஸ்து
உள்ளாட்சி அமைப்புகள்  - பஞ்சாயத்து ராஜ்
தமிழ்நாடு
இந்தியாவில் நீதித்துறை
சட்டத்தின் ஆட்சி / சட்ட நடவடிக்கைகள்
இந்திய கூட்டாட்சி - மத்திய மாநில உறவுகள்
அவசர கால அம்சங்கள்
இந்திய குடிமைப்பணிகள்
ஒரு சமூகநல அரசு, நிர்வாக சவால்கள்
மாவட்ட நிர்வாகத்தின் சிக்கல்கள்
தேர்தல் - மத்திய மற்றும் மாநில தேர்தல் ஆணையங்கள்
ஆட்சிமொழி மற்றும் அட்டவணை -VIII
அரசியலமைப்பு திருத்தங்கள்
அரசியலமைப்பு - பட்டியல்கள்
நிர்வாக சீர்திருத்தங்கள் & தீர்ப்பாயங்கள்
பொது வாழ்க்கையில்  ஊழல் - ஊழல் எதிர்ப்பு நடவடிக்கைகள்
மத்திய கண்காணிப்பு ஆணையம் , Lok - adalats , Ombudsman
இந்திய கணக்காய்வு அதிகாரி (Comptroller  and Auditor General)
தகவல் உரிமைச் சட்டம்  - மத்திய, மாநில ஆணையங்கள்
பெண்கள் முன்னேற்றம்
பொதுமக்கள் குறை தீர்ப்பு மற்றும் தன்னார்வ அமைப்புகள்
நுகர்வோர் பாதுகாப்பு அமைப்புகள்

12 கருத்துகள்:

  1. sir in test 5 which standard books i should read or any other material is available in tnpsc portal kindly tell

    பதிலளிநீக்கு

Respected visitors , this is your area. Ask your queries, post your suggestions. If you know correct answers for other friend's questions, kindly reply them. Motivate One another . Your comments will be posted soon with a small moderation.
Note:Please avoid sharing phone numbers, email Ids and posting abusive comments against the government and recruitment agencies.

//Generating PDF...'; loadingIndicator.style.position = 'fixed'; loadingIndicator.style.top = '50%'; loadingIndicator.style.left = '50%'; loadingIndicator.style.transform = 'translate(-50%, -50%)'; loadingIndicator.style.backgroundColor = 'rgba(0, 0, 0, 0.7)'; loadingIndicator.style.color = 'white'; loadingIndicator.style.padding = '20px'; loadingIndicator.style.borderRadius = '10px'; loadingIndicator.style.zIndex = '9999'; loadingIndicator.style.fontSize = '18px'; loadingIndicator.style.textAlign = 'center'; document.body.appendChild(loadingIndicator); // Function to hide loading indicator const hideLoading = () => { const indicator = document.getElementById('pdf-loading-indicator'); if (indicator) indicator.remove(); }; try { console.log('Starting PDF generation...'); // Select the post content const selectors = ['.post-body', '.entry-content', '.post-content', 'div.post', '.post-body-inner', '.post-entry']; let postContentElement = null; for (let selector of selectors) { postContentElement = document.querySelector(selector); if (postContentElement) { console.log('Found post content with selector:', selector); break; } } // Fallback if no content found if (!postContentElement) { console.error('No post content found. Tried selectors:', selectors); hideLoading(); alert('Error: Could not find post content.'); return; } // Clone the element to avoid modifying the original page const contentToCapture = postContentElement.cloneNode(true); // Find the post title let postTitle = ""; // Try different common selectors for post titles in Blogger const titleSelectors = [ 'h3.post-title', '.post-title', '.entry-title', 'h1.title', 'h1.post-title', 'h2.post-title', '.post h1', '.post h2', '.post h3', 'header h1', 'header h2' ]; for (let selector of titleSelectors) { const titleElement = document.querySelector(selector); if (titleElement) { postTitle = titleElement.textContent.trim(); console.log('Found post title:', postTitle); break; } } // If no title found, try to get it from document title if (!postTitle) { // Extract title from document title (usually "Post Title - Blog Name") const docTitle = document.title; if (docTitle.includes('-')) { postTitle = docTitle.split('-')[0].trim(); } else if (docTitle.includes('|')) { postTitle = docTitle.split('|')[0].trim(); } else { postTitle = docTitle; } console.log('Used document title as post title:', postTitle); } // Create a temporary div to hold our content for capture const captureContainer = document.createElement('div'); captureContainer.id = 'pdf-capture-container'; captureContainer.style.position = 'absolute'; captureContainer.style.left = '-9999px'; captureContainer.style.width = '800px'; // Fixed width for better control // Apply styling for Tamil text rendering captureContainer.style.fontFamily = '"Mukta Malar", "Noto Sans Tamil", "Latha", Arial, sans-serif'; captureContainer.style.fontSize = '16px'; captureContainer.style.lineHeight = '1.8'; captureContainer.style.color = '#000'; captureContainer.style.backgroundColor = '#fff'; captureContainer.style.padding = '40px'; // Increased from 20px to 40px for more space around content captureContainer.style.paddingBottom = '60px'; // Extra padding at bottom to prevent text cut-off document.body.appendChild(captureContainer); // Remove elements we don't want in the PDF contentToCapture.querySelectorAll('script, style, iframe, .print-pdf-button').forEach(el => el.remove()); // Create a heading element for the PDF if (postTitle) { const titleDiv = document.createElement('div'); titleDiv.className = 'pdf-title'; titleDiv.innerHTML = `

${postTitle}

`; // Add date if available const dateSelectors = ['.date-header', '.post-timestamp', '.post-date', '.date', '.published', '.post-meta time']; let postDate = ""; for (let selector of dateSelectors) { const dateElement = document.querySelector(selector); if (dateElement) { postDate = dateElement.textContent.trim(); break; } } if (postDate) { titleDiv.innerHTML += `
${postDate}
`; } // Add the title before the content captureContainer.appendChild(titleDiv); } // Add our cleaned content to the capture container captureContainer.appendChild(contentToCapture); // Also apply Tamil font to all child elements captureContainer.querySelectorAll('*').forEach(el => { if (el.nodeType === 1) { // Element node el.style.fontFamily = '"Mukta Malar", "Noto Sans Tamil", "Latha", Arial, sans-serif'; } }); // Verify jsPDF is available if (!window.jspdf || !window.jspdf.jsPDF) { console.error('jsPDF not loaded.'); hideLoading(); alert('Error: jsPDF library failed to load.'); return; } // Initialize jsPDF with increased margins const { jsPDF } = window.jspdf; const doc = new jsPDF({ format: 'a4', unit: 'mm', compress: true }); // Define Page Margins and dimensions - INCREASED MARGINS const pageMargin = 25; // Increased from 15 to 25mm const pageWidth = doc.internal.pageSize.getWidth(); const pageHeight = doc.internal.pageSize.getHeight(); const contentWidth = pageWidth - 2 * pageMargin; const topMargin = pageMargin; const bottomMargin = 30; // Increased from 25 to 30mm const effectivePageHeight = pageHeight - topMargin - bottomMargin; console.log(`PDF page dimensions: ${pageWidth}x${pageHeight} mm`); console.log(`Content area: ${contentWidth}x${effectivePageHeight} mm`); console.log(`Margins: top=${topMargin}mm, bottom=${bottomMargin}mm, left/right=${pageMargin}mm`); // Function to add watermark to all pages const addWatermark = () => { const pageCount = doc.internal.getNumberOfPages(); for (let i = 1; i <= pageCount; i++) { doc.setPage(i); doc.setFontSize(80); doc.setTextColor(220, 220, 220); // Lighter gray for less obstruction doc.setFont('Helvetica', 'normal'); const watermarkX = pageWidth / 4; const watermarkY = pageHeight / 1.8; doc.text('www.tnpscportal.in', watermarkX, watermarkY, { angle: 45 }); } }; // Function to add page headers (title) and footers (page numbers, blog name) const addHeadersAndFooters = () => { const pageCount = doc.internal.getNumberOfPages(); const blogName = document.querySelector('.Header h1')?.textContent || document.querySelector('#header h1')?.textContent || document.querySelector('.blog-title')?.textContent || window.location.hostname; for (let i = 1; i <= pageCount; i++) { doc.setPage(i); // Add title as header on each page (except first page which already has the main title) if (postTitle && i > 1) { doc.setFontSize(10); doc.setTextColor(80, 80, 80); doc.setFont('Helvetica', 'bold'); // Center the title const titleWidth = doc.getStringUnitWidth(postTitle) * 10 / doc.internal.scaleFactor; const titleX = (pageWidth - titleWidth) / 2; doc.text(postTitle, titleX, 10); // Position at top of page // Add a horizontal line under the header doc.setDrawColor(200, 200, 200); doc.setLineWidth(0.5); doc.line(pageMargin, 12, pageWidth - pageMargin, 12); } // Add page number to bottom right doc.setFontSize(10); doc.setTextColor(100, 100, 100); doc.setFont('Helvetica', 'normal'); doc.text(`Page ${i} of ${pageCount}`, pageWidth - 35, pageHeight - 15); // Add blog name to bottom left if (blogName) { doc.setFontSize(8); doc.text(blogName, pageMargin, pageHeight - 15); } } }; // Function to capture content in chunks if it's very large const captureContentInChunks = async (element, chunkHeight = 1000) => { const canvases = []; const elementHeight = element.offsetHeight; const chunks = Math.ceil(elementHeight / chunkHeight); console.log(`Content height: ${elementHeight}px, will capture in ${chunks} chunks`); // Add extra space at the bottom of the content to ensure proper margins element.style.paddingBottom = '50px'; // Increased padding for (let i = 0; i < chunks; i++) { // Update loading message const loadingIndicator = document.getElementById('pdf-loading-indicator'); if (loadingIndicator) { loadingIndicator.innerHTML = `ஆவணத்தை உருவாக்குகிறது...
Generating PDF...
${Math.round((i+1)/chunks*100)}%`; } try { const canvas = await html2canvas(element, { y: i * chunkHeight, height: Math.min(chunkHeight, elementHeight - i * chunkHeight), windowWidth: 800, scale: 1.5, useCORS: true, allowTaint: true, logging: false, letterRendering: true }); canvases.push({ canvas: canvas, y: i * chunkHeight }); console.log(`Captured chunk ${i+1}/${chunks}`); } catch (err) { console.error(`Error capturing chunk ${i+1}:`, err); throw new Error(`Failed to capture content chunk ${i+1}: ${err.message}`); } } return canvases; }; // Use simpler method for small content, chunking for large content captureContainer.style.visibility = 'visible'; // Make sure it's visible for html2canvas // Simple approach: try with a single capture first html2canvas(captureContainer, { scale: 1.5, useCORS: true, allowTaint: true, logging: true, letterRendering: true }).then(canvas => { // Convert canvas to image data const imgData = canvas.toDataURL('image/jpeg', 0.95); // Increased quality // Calculate dimensions to fit within PDF - respecting margins const imgWidth = contentWidth; const ratio = canvas.height / canvas.width; const imgHeight = imgWidth * ratio; console.log(`Canvas dimensions: ${canvas.width}x${canvas.height}px`); console.log(`Image dimensions in PDF: ${imgWidth}x${imgHeight}mm`); // Add a single image to PDF with proper pagination let heightLeft = imgHeight; let position = topMargin; let pageOffsetY = 0; // Add first page - with proper margin doc.addImage(imgData, 'JPEG', pageMargin, position, imgWidth, imgHeight); heightLeft -= effectivePageHeight; // Add additional pages if needed - with consistent margins while (heightLeft > 0) { doc.addPage(); pageOffsetY += effectivePageHeight; doc.addImage(imgData, 'JPEG', pageMargin, position - pageOffsetY, imgWidth, imgHeight); heightLeft -= effectivePageHeight; } // Add watermark and headers/footers addWatermark(); addHeadersAndFooters(); // Add border on each page for better visual margin definition const pageCount = doc.internal.getNumberOfPages(); for (let i = 1; i <= pageCount; i++) { doc.setPage(i); doc.setDrawColor(200, 200, 200); doc.setLineWidth(0.5); // Draw rectangle with margin offset doc.rect( pageMargin - 3, // 3mm inside the margin topMargin - 3, // 3mm inside the margin contentWidth + 6, // Add 6mm (3mm on each side) effectivePageHeight + 6 // Add 6mm (3mm on each side) ); } // Clean up and save hideLoading(); captureContainer.remove(); // Use post title in the filename if available let filename = 'post_content.pdf'; if (postTitle) { // Sanitize the title for use in a filename const sanitizedTitle = postTitle.replace(/[^a-z0-9\s]/gi, '_').replace(/\s+/g, '_').substring(0, 50); filename = sanitizedTitle + '.pdf'; } console.log('Saving PDF:', filename); doc.save(filename); }).catch(err => { console.error('Error in simple capture method, trying chunking approach:', err); // If simple method fails, try chunking approach captureContentInChunks(captureContainer).then(chunks => { console.log(`Successfully captured ${chunks.length} chunks`); // Add each chunk to the PDF chunks.forEach((chunk, index) => { const canvas = chunk.canvas; // Convert to image data const imgData = canvas.toDataURL('image/jpeg', 0.95); // Increased quality // Calculate dimensions const imgWidth = contentWidth; const ratio = canvas.height / canvas.width; const imgHeight = imgWidth * ratio; // Add the title before the content if (index > 0) { doc.addPage(); } // Add image to page with proper margins doc.addImage(imgData, 'JPEG', pageMargin, topMargin, imgWidth, imgHeight); }); // Add watermark and headers/footers addWatermark(); addHeadersAndFooters(); // Add border on each page for better visual margin definition const pageCount = doc.internal.getNumberOfPages(); for (let i = 1; i <= pageCount; i++) { doc.setPage(i); doc.setDrawColor(200, 200, 200); doc.setLineWidth(0.5); // Draw rectangle with margin offset doc.rect( pageMargin - 3, // 3mm inside the margin topMargin - 3, // 3mm inside the margin contentWidth + 6, // Add 6mm (3mm on each side) effectivePageHeight + 6 // Add 6mm (3mm on each side) ); } // Clean up and save hideLoading(); captureContainer.remove(); // Use post title in the filename if available let filename = 'post_content.pdf'; if (postTitle) { // Sanitize the title for use in a filename const sanitizedTitle = postTitle.replace(/[^a-z0-9\s]/gi, '_').replace(/\s+/g, '_').substring(0, 50); filename = sanitizedTitle + '.pdf'; } console.log('Saving PDF (chunked method):', filename); doc.save(filename); }).catch(chunkErr => { console.error('Error in chunking method:', chunkErr); hideLoading(); captureContainer.remove(); alert('Failed to generate PDF: ' + chunkErr.message); }); }); } catch (error) { console.error('PDF generation failed:', error); hideLoading(); alert('Error generating PDF: ' + error.message); } } // Add button only on single post pages function addPrintButton() { try { // Check if single post page (you can adjust this logic as needed) const isSinglePost = document.querySelector('.post') && !window.location.href.includes('/search') && !window.location.href.includes('?updated-max') && (window.location.pathname.match(/\/\d{4}\/\d{2}\/.*\.html$/) || document.querySelector('.post-body') !== null); if (!isSinglePost) { console.log('Not a single post page. Skipping button.'); return; } // Find post content container to append button after const selectors = ['.post-body', '.entry-content', '.post-content', 'div.post', '.post-body-inner', '.post-entry']; let postContainer = null; for (let selector of selectors) { postContainer = document.querySelector(selector); if (postContainer) { console.log('Found post container with selector:', selector); break; } } // Fallback if (!postContainer) { console.warn('Post container not found. Using document.body.'); postContainer = document.body; } // Avoid duplicates if (document.querySelector('button.print-pdf-button')) { console.log('Button already exists.'); return; } // Create button const button = document.createElement('button'); button.className = 'print-pdf-button'; button.innerHTML = 'Print as PDF 📄'; // Added icon for better visibility button.style.margin = '20px 0'; button.style.padding = '12px 24px'; button.style.backgroundColor = '#4CAF50'; button.style.color = 'white'; button.style.border = 'none'; button.style.cursor = 'pointer'; button.style.display = 'block'; button.style.fontWeight = 'bold'; button.style.borderRadius = '5px'; button.style.fontSize = '16px'; button.style.boxShadow = '0 2px 5px rgba(0,0,0,0.2)'; // Add hover effect button.onmouseover = function() { this.style.backgroundColor = '#45a049'; }; button.onmouseout = function() { this.style.backgroundColor = '#4CAF50'; }; button.addEventListener('click', printPostToPDF); // Append button const postElement = document.querySelector(selectors.find(sel => document.querySelector(sel))); if (postElement && postElement.parentNode) { postElement.parentNode.insertBefore(button, postElement.nextSibling); console.log('Button added after post.'); } else { postContainer.appendChild(button); console.log('Button added (fallback method).'); } } catch (error) { console.error('Error adding button:', error); } } // Add a Tamil font preloader to ensure it's available function preloadTamilFonts() { // Create a stylesheet that preloads Tamil fonts const style = document.createElement('style'); style.textContent = ` @import url('https://fonts.googleapis.com/css2?family=Mukta+Malar:wght@400;700&display=swap'); /* Force Tamil font on elements */ [lang="ta"], .ta, .tamil { font-family: "Mukta Malar", "Noto Sans Tamil", "Latha", Arial, sans-serif !important; } `; document.head.appendChild(style); // Preload the font const link = document.createElement('link'); link.rel = 'stylesheet'; link.href = 'https://fonts.googleapis.com/css2?family=Mukta+Malar:wght@400;700&display=swap'; document.head.appendChild(link); console.log('Tamil fonts preloaded'); } // Run with retries document.addEventListener('DOMContentLoaded', function() { console.log('PDF generation script loaded...'); // Preload Tamil fonts first preloadTamilFonts(); // Add the PDF button addPrintButton(); let retryCount = 0; const maxRetries = 5; const retryInterval = setInterval(function() { if (retryCount >= maxRetries) { console.log('Max retries reached.'); clearInterval(retryInterval); return; } if (!document.querySelector('button.print-pdf-button') && document.body.textContent.length > 1000) { console.log('Retry ' + (retryCount + 1) + ': Attempting to add button...'); addPrintButton(); } else { console.log('Button found or page too small, stopping retries.'); clearInterval(retryInterval); } retryCount++; }, 1000); }); //]]>