{"id":3037,"date":"2023-03-06T07:22:47","date_gmt":"2023-03-06T07:22:47","guid":{"rendered":"https:\/\/www.toolkit.keywordfinder.us\/?page_id=3037"},"modified":"2023-03-06T07:22:47","modified_gmt":"2023-03-06T07:22:47","slug":"pdf-text-extractor","status":"publish","type":"page","link":"https:\/\/tools.billionsideas.com\/hi\/pdf-text-extractor\/","title":{"rendered":"Text To PDF &#8211; PDF To Text"},"content":{"rendered":"<section>\n\n<h1>Text To PDF &#8211; PDF To Text<>\n\n<html lang=\"en\">\n\n<head>\n\t<meta charset=\"UTF-8\">\n\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n\t<link rel=\"stylesheet\" href=\".\/CSS\/style.css\">\n\t<link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/5.15.3\/css\/all.min.css\"\n\t\tintegrity=\"sha512-iBBXm8fW90+nuLcSKlbmrPcLa0OT92xO1BIsZ+ywDWZCvqsWgccV3gFoRBv0z+8dLJgyAHIhR35VZc2oM\/gI1w==\" crossorigin=\"anonymous\"\n\t\treferrerpolicy=\"no-referrer\" \/>\n\t<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/2.9.359\/pdf.min.js\"\n\t\tintegrity=\"sha512-U5C477Z8VvmbYAoV4HDq17tf4wG6HXPC6\/KM9+0\/wEXQQ13gmKY2Zb0Z2vu0VNUWch4GlJ+Tl\/dfoLOH4i2msw==\" crossorigin=\"anonymous\"\n\t\treferrerpolicy=\"no-referrer\"><\/script>\n\t<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.3.1\/jspdf.umd.min.js\"><\/script>\n\n\t<title>PDF to TXT converter<\/title>\n<\/head>\n\n<body>\n\t<nav>\n\t\t<button id=\"pdf_txt\">PDF <i class=\"fas fa-arrow-right\"><\/i> TXT<\/button>\n\t\t<button id=\"txt_pdf\">TXT <i class=\"fas fa-arrow-right\"><\/i> PDF<\/button>\n\t<\/nav>\n\t<main>\n\t\t<div class=\"convert\">\n\t\t\t<i class=\"far fa-file-pdf\"><\/i><i class=\"fas fa-arrow-right arrow\"><\/i><i class=\"fas fa-file-alt\"><\/i>\n\t\t<\/div>\n\t\t<section class=\"drop_area\">\n\t\t\t<div><i class=\"fas fa-cloud-upload-alt fa-3x\"><\/i><\/div>\n\t\t\t<div>\n\t\t\t\t<h4>Drag or drop to upload your file<\/h4>\n\t\t\t\t<button id=\"browseBtn\">Browse<\/button>\n\t\t\t\t<input type=\"file\" name=\"upload_file\" hidden>\n\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"Download\">\n\t\t\t<h4 id=\"fileName\">Download<\/h4>\n\t\t\t<button id=\"donwloadButton\">Download<i class=\"fas fa-download\"><\/i><\/button>\n\t\t<\/div>\n\t<\/main>\n\t<script src=\".\/JS\/index.js\" type=\"text\/javascript\"><\/script>\n<\/body>\n\n\n<style>\n\n\nnav{\n\tdisplay:flex;\n\tjustify-content: center;\n\talign-items:flex-end;\n\theight:10vh;\n  margin-bottom:0px;\n  \n}\n\nnav button{\n\tpadding: 10px 20px;\n\tfont-size: 0.9rem;\n\tfont-weight: 600;\n\tmargin: 0 20px;\n\toutline:0;\n\tborder:0;\n\tbackground:#1E1E1E;\n\tcolor: #fff;\n\tposition: relative;\n\tcursor: pointer;\n}\n\nnav button::after{\n\tcontent:\"\";\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\tbackground-color:#DA0037;\n\theight: 100%;\n\twidth:0;\n\tz-index: -1;\n\ttransition: width 0.5s;\n}\n\nnav button:hover:after{\n\twidth: 100%;\n}\n\nnav button:hover i{\n\tcolor:#fff;\n}\n\nnav button:active{\n\tbox-shadow: 0 0 5px 2px #585858;\n}\n\nnav i{\n\ttransition: color 1s;\n\tcolor: #fff;\n\tpadding: 0 5px;\n}\n\nmain{\n\twidth:100%;\n\tmin-height: 100vh;\n\tposition:relative;\n  \n}\n\n.fa-file-pdf{\n\tcolor: #d34646;\n  margin-top:0px;\n}\n\n.fa-file-alt{\n\tcolor:rgb(61, 107, 206);margin-top:0px;\n}\n\n.convert{\n\ttext-align: center;\n\tpadding:50px;\n\tfont-size: 2.5rem;\n}\n\n.convert .arrow{\n\ttransition: transform 1s;\n\tpadding:0 20px;\n\tfont-size: 1.7rem;\n}\n\n.opposite{\n\ttransform: rotate(180deg);\n}\n\nmain .drop_area{\n\twidth: 100%;\n\theight: 450px;\n\tbackground-color:#f2f2f2;\n\tcolor: #444444;;\n\tborder-radius: 5px;\n\tposition:absolute;\n\tleft:50%;\n\ttop:50%;\n\ttransform: translate(-50%, -50%);\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: center;\n\talign-items: center;\n  margin-top:50px;\n}\n\nmain .dragover{\n\tborder: #DA0037 solid 3px;\n}\n\n\n.drop_area div{\n\twidth:100%;\n\tmargin: 10px;\n\ttext-align: center;\n}\n\n.drop_area div:last-child{\n\theight: 100px;\n}\n\n.drop_area button{\n\tmargin-top: 10px;\n\tpadding:10px 20px;\n\tfont-size: 0.9rem;\n\toutline: none;\n\tborder: #171717 solid 1px;\n}\n\n.drop_area button:hover{\n\tbackground-color:#171717;\n\tcolor:#fff;\n\tborder:none;\n}\n\nmain .Download{\n\tposition:absolute;\n\tbottom:50px;\n\tleft:50%;\n\ttransform:translateX(-50%);\n\tdisplay:none;\n}\n\n.Download button{\n\tdisplay:block;\n\tpadding: 10px 20px;\n\tfont-size: 1rem;\n\tbackground:blue;\n  color:white;\n\tborder: none;\n\tcursor: pointer;\n\tmargin:auto;\n}\n\n.Download i{\n\tpadding-left: 10px;\n\tcolor: #1b1b1b;\n\tfont-size: 1.2rem;\n}\n\n.Download button:hover i{\n\tcolor:#000000;\n}\n\n.Download button:active{\n\tbox-shadow: 1px 1px 5px #DA0037;\n}\n\n#fileName{\n\ttext-align: center;\n\tpadding: 10px;\n\tcolor: #3996bb;\n\tfont-size: 0.9rem;\n}\n\n@media only screen and (max-width: 768px){\n\tmain .drop_area{\n\t\twidth:90%;\n\t}\n}\n<\/style>\n\n<script>\nwindow.jsPDF = window.jspdf.jsPDF\n\/\/Convert pdf to text button\nconst pdf_txt = document.querySelector('#pdf_txt');\n\/\/Convert text to pdf button\nconst txt_pdf = document.querySelector('#txt_pdf');\nconst arrow = document.querySelector('.arrow');\nconst dropArea = document.querySelector('.drop_area');\nconst browseBtn = document.getElementById('browseBtn');\nconst inputFile = dropArea.querySelector('input');\n\/\/ Change this to false if we want to convert text to pdf file otherwise it should be true\nlet pdfToText = true;\n\/\/ Create a 'a' tag to be able to download the output txt file\nlet a = document.createElement('a');\nlet outputFileName = \"\";\n\/\/ Later in the code this variable will be assingn to 'new jsPDF()'\nlet doc = null;\n\n\n\ninputFile.addEventListener('change', async () => {\n\t\/\/ Get the first file that user selected\n\tconst file = inputFile.files[0];\n\tawait openFile(file);\n});\n\nbrowseBtn.addEventListener('click', () => {\n\tinputFile.click();\n});\n\n\/\/ Change the arrows direction to currect direction ( pdf to txt )\npdf_txt.addEventListener('click', () => {\n\tarrow.classList.remove('opposite');\n\tpdfToText = true;\n});\n\n\/\/ Change the arrows direction to currect direction ( txt to pdf)\ntxt_pdf.addEventListener('click', () => {\n\tarrow.classList.add('opposite');\n\tpdfToText = false;\n});\n\n\ndropArea.addEventListener(\"dragover\", event => {\n\tevent.preventDefault();\n\tdropArea.classList.add(\"dragover\");\n});\n\ndropArea.addEventListener(\"dragleave\", () => {\n\tdropArea.classList.remove(\"dragover\");\n});\n\n\ndocument.addEventListener(\"drop\", async event => {\n\tevent.preventDefault();\n\tconst file = event.dataTransfer.files[0];\n\tawait openFile(file);\n});\n\n\/\/ Add event listeners to the download button\n\/\/ Depending on user converted pdf => txt or txt => pdf the metheod for downloading will be different\ndocument.getElementById('donwloadButton').addEventListener('click', event => {\n\tif (pdfToText) {\n\t\ta.download = outputFileName;\n\t\ta.click();\n\t}\n\telse {\n\t\tdoc.save(outputFileName);\n\t}\n});\n\n\n\/\/ Open the input file\nasync function openFile(file) {\n\tdropArea.classList.remove(\"dragover\");\n\t\/\/ determine whether user wants to convert pdf => txt or txt => pdf\n\tif (pdfToText) {\n\t\tsaveToTextFile(file, file.type);\n\t}\n\telse {\n\t\tsaveToPdfFile(file, file.type);\n\t}\n}\n\n\/\/ Convert txt to pdf\nfunction saveToPdfFile(inputFile, contentType) {\n\tif (contentType != 'text\/plain') {\n\t\talert('Expected a txt file');\n\t\treturn;\n\t}\n\t\/\/ We create a new instance of jsPDF each time user chose a new input file\n\t\/\/ Otherwise the text of new file and the previous file will mix together \n\tdoc = new jsPDF()\n\tconst fileName = inputFile.name.split('.')[0] + '.pdf';\n\tconst reader = new FileReader();\n\n\toutputFileName = fileName;\n\tdocument.getElementById('fileName').innerHTML = fileName;\n\treader.readAsText(inputFile);\n\treader.onload = () => {\n\t\tlet result = doc.splitTextToSize(reader.result, 180);\n\t\tlet pageHeight = doc.internal.pageSize.height;\n\t\tconsole.log(doc)\n\t\tlet y = 15;\n\t\tresult.forEach(item => {\n\t\t\tif (y + 10 > pageHeight) {\n\t\t\t\ty = 15;\n\t\t\t\tdoc.addPage();\n\t\t\t}\n\t\t\tdoc.text(item, 10, y);\n\t\t\ty += 7;\n\t\t})\n\t}\n\tdocument.querySelector('.Download').style.display = 'block';\n}\n\n\/\/ Convert pdf to txt\nfunction saveToTextFile(inputFile, contentType) {\n\tif (contentType != 'application\/pdf') {\n\t\talert('Expected a pdf file');\n\t\treturn;\n\t}\n\tconst fileName = inputFile.name.split('.')[0] + '.txt';\n\toutputFileName = fileName;\n\tdocument.getElementById('fileName').innerHTML = fileName;\n\tconst reader = new FileReader();\n\treader.readAsDataURL(inputFile);\n\treader.onload = async () => {\n\t\tconst content = await pdfjsLib.getDocument(reader.result).promise;\n\t\tconst textContent = await get_pdfsText(content);\n\t\tconst file = new Blob([textContent], { type: 'text\/plain' });\n\t\ta.href = URL.createObjectURL(file);\n\t}\n\tdocument.querySelector('.Download').style.display = 'block';\n\n}\n\n\/\/ Extract pdf's text\nasync function get_pdfsText(pdfContent) {\n\tlet resultText = \"\";\n\tlet page = null;\n\tlet temp = \"\";\n\tconst totalPageNum = pdfContent._pdfInfo.numPages;\n\tfor (let i = 1; i <= totalPageNum; i++) {\n\t\tpage = await pdfContent.getPage(i);\n\t\ttemp = await page.getTextContent();\n\t\ttemp.items.map((item) => {\n\t\t\tresultText += item.str;\n\t\t})\n\t}\n\treturn resultText;\n}\n\n\n<\/script>\n\n\n\n\n\n\n\n\n\n\n\n<\/section>\n \n<style>\nsection{\n         margin-top:40px;\n        width: 100%;\n        max-width: 970px;\n        background-color: #fff;\n        border: 1px solid #ddd;\n        padding: 25px;\n      }\n<\/style>\n<\/body>\n<\/html>","protected":false},"excerpt":{"rendered":"<p>Text To PDF &#8211; PDF To Text PDF to TXT converter PDF TXT TXT PDF Drag or drop to upload your file Browse Download Download<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","footnotes":""},"class_list":["post-3037","page","type-page","status-publish"],"taxonomy_info":[],"featured_image_src_large":false,"author_info":{"display_name":"Billions Ideas","author_link":"https:\/\/tools.billionsideas.com\/hi\/author\/loginbillionsideas-com\/"},"comment_info":0,"jetpack-related-posts":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tools.billionsideas.com\/hi\/wp-json\/wp\/v2\/pages\/3037","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tools.billionsideas.com\/hi\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tools.billionsideas.com\/hi\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tools.billionsideas.com\/hi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tools.billionsideas.com\/hi\/wp-json\/wp\/v2\/comments?post=3037"}],"version-history":[{"count":0,"href":"https:\/\/tools.billionsideas.com\/hi\/wp-json\/wp\/v2\/pages\/3037\/revisions"}],"wp:attachment":[{"href":"https:\/\/tools.billionsideas.com\/hi\/wp-json\/wp\/v2\/media?parent=3037"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}