<!DOCTYPE html><html lang="en"><head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title>File Converter (Online & Free) | jedok.com</title> <meta name="description" content="Convert any file online in seconds with jedok - free, secure file converter. Upload any file and save as you want without installing any software."> <link rel="canonical" href="https://jedok.com/" /> <meta property="og:title" content="File Converter (Online & Free) - jedok.com"> <meta property="og:description" content="Convert any file online in seconds with jedok - free, secure file converter. Upload any file and save as you want without installing any software."> <meta property="og:url" content="https://jedok.com/"> <meta property="og:type" content="website"> <meta property="og:image" content="https://jedok.com/jedok-og-image.jpg" /> <meta property="og:image:width" content="1200" /> <meta property="og:image:height" content="630" /> <meta property="og:image:type" content="image/jpeg" /> <meta name="twitter:card" content="summary_large_image"> <script type="application/ld+json"> { "@context":"https://schema.org", "@type":"SoftwareApplication", "name":"File Converter (Online & Free) - jedok.com", "applicationCategory":"UtilitiesApplication", "operatingSystem":"Web", "description":"Convert any file online in seconds with jedok - free, secure file converter. Upload any file and save as you want without installing any software.", "offers": {"@type":"Offer","price":"0","priceCurrency":"USD"}, "url":"https://jedok.com/" } </script> <script type="application/ld+json"> { "@context":"https://schema.org", "@type":"WebSite", "name":"JeDok", "url":"https://jedok.com/", "potentialAction":{"@type":"SearchAction","target":"https://jedok.com/formats/{format}","query-input":"required name=format"} } </script> <!-- ✅ Performance: Preconnect to CDNs --> <link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin> <link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin> <link rel="preconnect" href="https://code.jquery.com" crossorigin> <link rel="preconnect" href="https://www.googletagmanager.com" crossorigin> <!-- ✅ CSS --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" defer crossorigin> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css" defer crossorigin> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons/font/bootstrap-icons.css" defer crossorigin> <!-- ✅ Favicons --> <link rel="icon" type="image/png" sizes="32x32" href="/favicon.png"> <link rel="icon" type="image/png" sizes="64x64" href="/favicon.png"> <link rel="apple-touch-icon" href="/favicon.png"> <!-- ✅ Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-K6FQF5LSG9" type="931c24cd1b0ea44ca7164d25-text/javascript"></script> <script type="931c24cd1b0ea44ca7164d25-text/javascript"> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-K6FQF5LSG9', { anonymize_ip: true }); </script> <!-- ✅ App Config --> <script type="931c24cd1b0ea44ca7164d25-text/javascript"> window.APP_CONFIG = Object.freeze({ apiBaseUrl: "https://api.jedok.com/api", appBaseUrl: "https://jedok.com" }); </script> <!-- Your site styles --> <script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="931c24cd1b0ea44ca7164d25-|49"></script><link rel="preload" href="/css/site.css?v=85IF2Oi2NMeLED_gSW3dFrZjKfMm5lOm5QjDu-HU9c4" as="style" onload="this.onload=null;this.rel='stylesheet'"> <noscript b-2u57mvn44z><link rel="stylesheet" href="/css/site.css?v=85IF2Oi2NMeLED_gSW3dFrZjKfMm5lOm5QjDu-HU9c4"></noscript> <!-- Tiny critical inline CSS --> <style> /* Base + top bar */ body { font-family: "Open Sans",Arial,sans-serif; font-size: .875rem; color: #333; margin-bottom: 5px } .top-bar { background: #333; color: #fff; font-size: 14px; padding: 5px 0 } .navbar-brand { font-weight: 700; font-size: 24px } </style> <!-- jQuery: must load before inline scripts --> <script src="https://code.jquery.com/jquery-3.6.4.min.js" crossorigin type="931c24cd1b0ea44ca7164d25-text/javascript"></script> <link rel="preconnect" href="https://pagead2.googlesyndication.com" crossorigin> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-0313867933438659" crossorigin="anonymous" type="931c24cd1b0ea44ca7164d25-text/javascript"></script> </head> <body> <!-- Top Bar --> <div b-2u57mvn44z class="top-bar text-center"> <span b-2u57mvn44z> <a b-2u57mvn44z rel="nofollow" href="https://fileproinfo.com/free-online-viewer" class="text-white" target="_blank" title="Free online file viewer">Online File Viewer</a> | <a b-2u57mvn44z class="text-white" href="/contact">[Contact for this Slot]</a> </span> </div> <!-- Navbar --> <nav b-2u57mvn44z class="navbar navbar-expand-lg navbar-light bg-light shadow-sm"> <div b-2u57mvn44z class="container"> <a b-2u57mvn44z class="navbar-brand text-danger" href="/"><img b-2u57mvn44z src="/jedok-logo.png" width="130" alt="jedok" /></a> <button b-2u57mvn44z class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span b-2u57mvn44z class="navbar-toggler-icon"></span> </button> <div b-2u57mvn44z class="collapse navbar-collapse" id="navbarNav"> <ul b-2u57mvn44z class="navbar-nav ms-auto align-items-lg-center"> <li b-2u57mvn44z class="nav-item"><a b-2u57mvn44z class="nav-link" href="/">Home</a></li> <!-- Mega menu --> <li b-2u57mvn44z class="nav-item dropdown megamenu position-static"> <a b-2u57mvn44z class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false"> Convert </a> <!-- Full-width on desktop, stacked on mobile --> <div b-2u57mvn44z class="dropdown-menu w-100 mt-0 border-0 shadow"> <div b-2u57mvn44z class="container py-3"> <div b-2u57mvn44z class="row gy-4"> <!-- Col 1 (11 items) --> <div b-2u57mvn44z class="col-12 col-md-6 col-lg-3"> <ul b-2u57mvn44z class="list-unstyled mb-0"> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/3d-file-converter"><i b-2u57mvn44z class="bi bi-box"></i><span b-2u57mvn44z>3D Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/archive-file-converter"><i b-2u57mvn44z class="bi bi-file-earmark-zip"></i><span b-2u57mvn44z>Archive Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/audio-file-converter"><i b-2u57mvn44z class="bi bi-music-note"></i><span b-2u57mvn44z>Audio Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/backup-file-converter"><i b-2u57mvn44z class="bi bi-cloud-arrow-up"></i><span b-2u57mvn44z>Backups Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/cad-file-converter"><i b-2u57mvn44z class="bi bi-dice-3"></i><span b-2u57mvn44z>CAD Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/camera-raw-file-converter"><i b-2u57mvn44z class="bi bi-camera"></i><span b-2u57mvn44z>Camera Raw File Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/common-file-converter"><i b-2u57mvn44z class="bi bi-collection"></i><span b-2u57mvn44z>Common Files Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/compression-file-converter"><i b-2u57mvn44z class="bi bi-arrows-collapse"></i><span b-2u57mvn44z>Compression Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/data-file-converter"><i b-2u57mvn44z class="bi bi-file-binary"></i><span b-2u57mvn44z>Data File Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/database-file-converter"><i b-2u57mvn44z class="bi bi-database"></i><span b-2u57mvn44z>Database Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/developer-file-converter"><i b-2u57mvn44z class="bi bi-code-slash"></i><span b-2u57mvn44z>Developer Files Converter</span></a></li> </ul> </div> <!-- Col 2 (11 items) --> <div b-2u57mvn44z class="col-12 col-md-6 col-lg-3"> <ul b-2u57mvn44z class="list-unstyled mb-0"> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/diagram-file-converter"><i b-2u57mvn44z class="bi bi-diagram-3"></i><span b-2u57mvn44z>Diagram Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/disk-image-file-converter"><i b-2u57mvn44z class="bi bi-device-hdd"></i><span b-2u57mvn44z>Disk Image Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/document-file-converter"><i b-2u57mvn44z class="bi bi-file-earmark-text"></i><span b-2u57mvn44z>Document Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/ebook-file-converter"><i b-2u57mvn44z class="bi bi-book"></i><span b-2u57mvn44z>eBook Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/email-file-converter"><i b-2u57mvn44z class="bi bi-envelope"></i><span b-2u57mvn44z>Email Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/excel-file-converter"><i b-2u57mvn44z class="bi bi-file-earmark-excel"></i><span b-2u57mvn44z>Excel Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/executable-file-converter"><i b-2u57mvn44z class="bi bi-terminal"></i><span b-2u57mvn44z>Executable File Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/font-file-converter"><i b-2u57mvn44z class="bi bi-type"></i><span b-2u57mvn44z>Font Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/game-file-converter"><i b-2u57mvn44z class="bi bi-controller"></i><span b-2u57mvn44z>Game Files Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/gis-file-converter"><i b-2u57mvn44z class="bi bi-geo-alt"></i><span b-2u57mvn44z>GIS Converter</span></a></li> </ul> </div> <!-- Col 3 (11 items) --> <div b-2u57mvn44z class="col-12 col-md-6 col-lg-3"> <ul b-2u57mvn44z class="list-unstyled mb-0"> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/image-file-converter"><i b-2u57mvn44z class="bi bi-file-earmark-image"></i><span b-2u57mvn44z>Image Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/misc-file-converter"><i b-2u57mvn44z class="bi bi-three-dots"></i><span b-2u57mvn44z>Misc Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/note-file-converter"><i b-2u57mvn44z class="bi bi-journal-text"></i><span b-2u57mvn44z>One Note Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/outlook-file-converter"><i b-2u57mvn44z class="bi bi-envelope-open"></i><span b-2u57mvn44z>Outlook Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/page-description-language-file-converter"><i b-2u57mvn44z class="bi bi-code-slash"></i><span b-2u57mvn44z>Page Description Language</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/page-layout-file-converter"><i b-2u57mvn44z class="bi bi-layout-text-window"></i><span b-2u57mvn44z>Page Layout Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/pdf-file-converter"><i b-2u57mvn44z class="bi bi-file-earmark-pdf"></i><span b-2u57mvn44z>PDF Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/plugin-file-converter"><i b-2u57mvn44z class="bi bi-plug"></i><span b-2u57mvn44z>Plugin Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/presentation-file-converter"><i b-2u57mvn44z class="bi bi-file-earmark-ppt"></i><span b-2u57mvn44z>Presentation Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/project-file-converter"><i b-2u57mvn44z class="bi bi-kanban"></i><span b-2u57mvn44z>Project Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/project-management-file-converter"><i b-2u57mvn44z class="bi bi-kanban-fill"></i><span b-2u57mvn44z>Project Management Converter</span></a></li> </ul> </div> <!-- Col 4 (10 items) --> <div b-2u57mvn44z class="col-12 col-md-6 col-lg-3 d-none d-lg-block"> <ul b-2u57mvn44z class="list-unstyled mb-0"> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/publisher-file-converter"><i b-2u57mvn44z class="bi bi-journal-richtext"></i><span b-2u57mvn44z>Publisher Files Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/raster-image-file-converter"><i b-2u57mvn44z class="bi bi-image"></i><span b-2u57mvn44z>Raster Image Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/settings-file-converter"><i b-2u57mvn44z class="bi bi-gear"></i><span b-2u57mvn44z>Settings File Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/spreadsheet-file-converter"><i b-2u57mvn44z class="bi bi-table"></i><span b-2u57mvn44z>Spreadsheet Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/system-file-converter"><i b-2u57mvn44z class="bi bi-cpu"></i><span b-2u57mvn44z>System Files Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/text-file-converter"><i b-2u57mvn44z class="bi bi-text-paragraph"></i><span b-2u57mvn44z>Text File Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/vector-image-file-converter"><i b-2u57mvn44z class="bi bi-bezier"></i><span b-2u57mvn44z>Vector Image Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/video-file-converter"><i b-2u57mvn44z class="bi bi-camera-video"></i><span b-2u57mvn44z>Video Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/web-file-converter"><i b-2u57mvn44z class="bi bi-globe"></i><span b-2u57mvn44z>Web Files Converter</span></a></li> <li b-2u57mvn44z><a b-2u57mvn44z class="dropdown-item d-flex align-items-center gap-2" href="/converters/word-processing-file-converter"><i b-2u57mvn44z class="bi bi-file-earmark-richtext"></i><span b-2u57mvn44z>Word Processing Converter</span></a></li> </ul> </div> </div> </div> </div> </li> <li b-2u57mvn44z class="nav-item"><a b-2u57mvn44z class="nav-link" href="/formats">Formats</a></li> <li b-2u57mvn44z class="nav-item"><a b-2u57mvn44z class="nav-link" href="/blog/">Blog</a></li> <li b-2u57mvn44z class="nav-item"><a b-2u57mvn44z class="nav-link" href="https://docpose.cloud/api-docs" target="_blank">API</a></li> <li b-2u57mvn44z class="nav-item"><a b-2u57mvn44z class="nav-link" href="/help">Help</a></li> <li b-2u57mvn44z class="nav-item"> <a b-2u57mvn44z class="nav-link" href="/download"> My Files <span b-2u57mvn44z class="ui-badge text-red"><strong b-2u57mvn44z id="jobsCountLabel">0</strong></span> </a> </li> <li b-2u57mvn44z class="nav-item auth-buttons ms-lg-3 mt-3 mt-lg-0"> <a b-2u57mvn44z href="/login" class="btn btn-outline-secondary me-2">Login</a> <a b-2u57mvn44z href="/signup" class="btn btn-primary">Sign Up</a> </li> </ul> </div> </div> </nav> <div b-2u57mvn44z class="container"> <main b-2u57mvn44z role="main" class="pb-3"> <!-- fallback if a view doesn’t use the layout or ViewBag is empty --> <!-- Include SignalR Library --><script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/7.0.5/signalr.min.js" type="931c24cd1b0ea44ca7164d25-text/javascript"></script> <!-- Drop effect overlay --><div id="dropOverlay" class="drag-over"> <div class="drop-content"> <svg width="80" height="80" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <line x1="12" y1="5" x2="12" y2="19"></line> <line x1="5" y1="12" x2="19" y2="12"></line> </svg> <p>Drop files here</p> </div></div><div class="container mt-5"> <h1 class="text-center text-red"> File Converter </h1> <h2 class="text-center">Welcome to the most advanced free online file converter </h2> <p class="text-center">Convert any file online in seconds with jedok - free, secure file converter. Upload any file and save as you want without installing any software.</p> <form id="convertForm"> <!-- Drag-and-Drop Zone --> <div id="dropZone"> <button type="button" class="file-upload-btn" onclick="if (!window.__cfRLUnblockHandlers) return false; document.getElementById('fileInput').click()" data-cf-modified-931c24cd1b0ea44ca7164d25-="">Select Files</button> <input type="file" id="fileInput" multiple /> <div class="file-source-caption"><span class="security-icon" data-placement="left" title="All your data is always protected and under your control. Learn more about technical and organizational security measures we take on the Security page."></span><span>Drop max 5 files here. 25 MB maximum file size or <a style="color:white;" href="/signup">Sign Up</a> (free).</span></div> </div> <div class="text-center mt-2"><span class="text-green">All your data is always protected and under your control. Learn more about technical and organizational security measures we take on the <a href="/security">Security</a> page.</span> </div> <div class="text-center mt-2">Powered by <a href="https://docpose.cloud" target="_blank">Docpose.Cloud</a> API's, 200+ <a href="/formats">formats</a> supported.</div> <!-- fallback if a view doesn’t use the layout or ViewBag is empty --> <div class="adb d-md-block"> <!-- jedoktop responsive --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-0313867933438659" data-ad-slot="1439225974" data-ad-format="auto" data-full-width-responsive="true"></ins> <script type="931c24cd1b0ea44ca7164d25-text/javascript"> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <!-- File list --> <div id="file-list-container" class="mt-3 container"> <ul id="file-list" class="list-group"></ul> </div> <!-- Convert button --> <div class="mt-3 container text-center d-none" id="butonsDiv"> <div class="file-source-caption" id="myFilesMessage">Files will be stored for 24 hours. Go to <a class="text-red" href="/download/">My Files</a> to delete them manually.</div> <button id="convertButton" type="submit" style="padding: 12px 24px!important; font-size: 25px!important;" class="btn btn-success w-50 mt-3">Convert</button> <!-- Clear All button (Initially Hidden) --> <button id="clearAllButton" type="button" style="padding: 12px 24px!important; font-size: 25px!important;" class="btn btn-info w-50 mt-3 d-none" onclick="if (!window.__cfRLUnblockHandlers) return false; resetForm()" data-cf-modified-931c24cd1b0ea44ca7164d25-="">Clear All</button> </div> </form> <!-- Status message --> <p id="message" class="text-center mt-3"></p> </div> <section class="container text-center my-5"> <div class="steps text-center mt-5"> <h2>How to convert</h2> <div class="row"> <div class="col-lg-4"> <div class="card text-bg-light"> <div class="step-label badge bg-info text-dark fs-6">STEP 1</div> <div class="card-body"> <h3>Upload your file(s)</h3> <p>Select files from your Computer, mobile, tablet, or by dragging it on the page.</p> </div> </div> </div> <div class="col-lg-4"> <div class="card text-bg-light"> <div class="step-label badge bg-warning text-dark fs-6">STEP 2</div> <div class="card-body"> <h3>Choose "to format"</h3> <p>Choose format (e.g pdf, docx, mp4, mp3, pptx, dot, png) you need as a result (<a href="/formats" title="list of all supported formats">supported formats</a>)</p> </div> </div> </div> <div class="col-lg-4"> <div class="card text-bg-light"> <div class="step-label badge bg-success text-dark fs-6">STEP 3</div> <div class="card-body"> <h3>Download your file/s</h3> <p>Let the file convert and you can download your converted file right afterwards</p> </div> </div> </div> </div> </div> </section> <section class="container text-center my-5"> <div class="row"> <div class="col-md-4 mb-4"> <div class="p-3"> <p class="mb-3"> <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40"> <path fill="red" d="M28,10v5h-5l2.279-2.279C23.752,11.609,21.925,11,20,11c-4.962,0-9,4.038-9,9h-1c0-5.514,4.486-10,10-10 c2.191,0,4.271,0.711,5.993,2.007L28,10z"></path> <path d="M20,2C10.075,2,2,10.075,2,20c0,9.925,8.075,18,18,18c9.925,0,18-8.075,18-18C38,10.075,29.925,2,20,2z M20,37c-9.374,0-17-7.626-17-17S10.626,3,20,3s17,7.626,17,17S29.374,37,20,37z M29,20h1c0,5.514-4.486,10-10,10 c-2.193,0-4.272-0.711-5.993-2.007L12,30v-5h5l-2.279,2.279C16.248,28.391,18.075,29,20,29C24.963,29,29,24.963,29,20z"></path> </svg> </p> <h5>200+ formats supported</h5> <p>We support more than 10000+ different conversions between more than 200+ different <a href="/formats">file formats</a>. More than any other converter.</p> </div> </div> <div class="col-md-4 mb-4"> <div class="p-3"> <p class="mb-3"> <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40"> <path fill="red" d="M13.35,29.4c-0.111,0-0.222-0.037-0.312-0.109c-0.154-0.123-0.222-0.326-0.172-0.518l1.825-6.968 l-4.535-4.284c-0.139-0.131-0.191-0.33-0.134-0.512c0.057-0.183,0.212-0.316,0.401-0.346l6.218-0.963l2.908-6.019 c0.167-0.345,0.733-0.345,0.9,0l2.908,6.019l6.218,0.963c0.189,0.029,0.345,0.163,0.401,0.346c0.057,0.182,0.005,0.381-0.134,0.512 l-4.535,4.284l1.825,6.968c0.051,0.191-0.017,0.395-0.171,0.518c-0.155,0.124-0.369,0.144-0.543,0.053L20,26.009l-6.419,3.335 C13.508,29.382,13.429,29.4,13.35,29.4z M20,24.945c0.079,0,0.158,0.019,0.23,0.057l5.65,2.936l-1.614-6.165 c-0.047-0.177,0.007-0.365,0.14-0.49l4.008-3.786l-5.468-0.847c-0.163-0.025-0.303-0.128-0.374-0.276L20,11.049l-2.572,5.323 c-0.071,0.148-0.211,0.251-0.374,0.276l-5.469,0.847l4.008,3.786c0.133,0.125,0.187,0.313,0.141,0.49l-1.615,6.165l5.65-2.936 C19.842,24.964,19.921,24.945,20,24.945z"></path> <path d="M20,38c-9.925,0-18-8.075-18-18c0-9.925,8.075-18,18-18c9.925,0,18,8.075,18,18C38,29.925,29.925,38,20,38z M20,3C10.626,3,3,10.626,3,20s7.626,17,17,17s17-7.626,17-17S29.374,3,20,3z"></path> </svg> </p> <h5>Fast and easy</h5> <p>Simply drag and drop your files, select the desired output format, and click 'Convert' — most file conversions are completed in under 2 minutes.</p> </div> </div> <div class="col-md-4 mb-4"> <div class="p-3"> <p class="mb-3"> <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40"> <path fill="red" d="M24.781,24.46L20,19.678V34h-1V19.678l-4.782,4.782l-0.637-0.637l5.918-5.918l5.918,5.918L24.781,24.46z"></path> <path d="M33.812,32H26v-1h7.812C36.673,31,39,28.771,39,26.031s-2.327-4.969-5.188-4.969 c-0.181,0-0.395-0.093-0.482-0.25c-0.089-0.158-0.133-0.346-0.038-0.5c0.554-0.91,0.834-1.877,0.834-2.875 c0-3.17-2.691-5.75-5.999-5.75c-0.902,0-1.797,0.209-2.661,0.623c-0.237,0.113-0.524,0.023-0.652-0.207 C23.053,8.955,19.652,7,15.937,7c-5.548,0-10.062,4.332-10.062,9.656c0,0.761,0.104,1.549,0.311,2.344 c0.035,0.133,0.013,0.275-0.061,0.392c-0.073,0.117-0.192,0.198-0.327,0.224C3.018,20.157,1,22.526,1,25.25C1,28.421,3.692,31,7,31 h6v1H7c-3.86,0-7-3.028-7-6.75c0-3.032,2.116-5.689,5.1-6.498c-0.149-0.708-0.225-1.412-0.225-2.096C4.875,10.78,9.837,6,15.937,6 c3.92,0,7.525,1.989,9.517,5.222c0.87-0.355,1.767-0.534,2.672-0.534c3.859,0,6.999,3.028,6.999,6.75 c0,0.924-0.201,1.823-0.599,2.681C37.642,20.485,40,22.998,40,26.031C40,29.322,37.224,32,33.812,32z"></path> </svg> </p> <h5>In the cloud</h5> <p>Cloud-based conversion means all processing happens online — keeping your device fast and free from heavy resource usage.</p> </div> </div> <div class="col-md-4 mb-4"> <div class="p-3"> <p class="mb-3"> <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40"> <path fill="red" d="M20,26.002c-3.309,0-6-2.692-6-6.002s2.691-6.002,6-6.002S26,16.69,26,20S23.309,26.002,20,26.002z M20,14.998c-2.757,0-5,2.244-5,5.002c0,2.758,2.243,5.002,5,5.002s5-2.244,5-5.002C25,17.242,22.757,14.998,20,14.998z"></path> <path d="M20,38c-0.851,0-1.73-0.074-2.766-0.232l-0.35-0.054l-0.883-4.639c-0.853-0.261-1.665-0.596-2.42-0.997 L9.68,34.731l-0.285-0.209c-1.499-1.098-2.813-2.41-3.905-3.903l-0.208-0.284l2.648-3.9c-0.411-0.773-0.749-1.591-1.007-2.438 l-4.636-0.884l-0.053-0.349C2.074,21.721,2,20.843,2,20c0-0.834,0.074-1.711,0.232-2.758l0.053-0.35l4.636-0.884 c0.26-0.852,0.598-1.669,1.006-2.437l-2.65-3.899l0.208-0.285c1.093-1.493,2.405-2.806,3.9-3.902L9.67,5.277l3.898,2.65 c0.765-0.407,1.581-0.743,2.433-1.003l0.884-4.637l0.349-0.054c2.063-0.316,3.506-0.314,5.522,0l0.348,0.054l0.884,4.633 c0.855,0.261,1.678,0.6,2.449,1.012l3.898-2.651l0.284,0.208c1.488,1.088,2.801,2.402,3.902,3.905l0.209,0.285l-2.652,3.901 c0.409,0.77,0.744,1.584,1.001,2.431l4.634,0.883l0.054,0.349C37.926,18.281,38,19.156,38,20c0,0.849-0.074,1.727-0.234,2.762 l-0.054,0.349l-4.634,0.883c-0.258,0.851-0.595,1.667-1.003,2.434l2.649,3.9l-0.208,0.284c-1.094,1.496-2.409,2.811-3.909,3.907 l-0.284,0.209l-3.897-2.653c-0.771,0.41-1.588,0.746-2.436,1.004l-0.884,4.635l-0.348,0.055C21.756,37.924,20.854,38,20,38z M17.734,36.83c1.669,0.23,2.898,0.228,4.522,0.001l0.866-4.546l0.299-0.083c0.979-0.273,1.917-0.66,2.787-1.148l0.271-0.152 l3.819,2.6c1.207-0.921,2.281-1.994,3.2-3.198l-2.598-3.823l0.152-0.27c0.487-0.864,0.874-1.802,1.148-2.785l0.083-0.299 l4.544-0.865C36.945,21.427,37,20.701,37,20c0-0.696-0.055-1.421-0.17-2.256l-4.543-0.866l-0.083-0.299 c-0.273-0.979-0.658-1.915-1.146-2.783l-0.152-0.27l2.599-3.823c-0.924-1.209-1.996-2.283-3.193-3.197l-3.821,2.6L26.22,8.954 c-0.869-0.491-1.812-0.881-2.8-1.158l-0.299-0.083l-0.866-4.543c-1.638-0.229-2.86-0.231-4.52,0.001l-0.866,4.545l-0.298,0.084 c-0.987,0.278-1.925,0.665-2.786,1.149l-0.27,0.152l-3.82-2.598C8.492,7.423,7.42,8.495,6.502,9.696l2.598,3.822l-0.152,0.27 c-0.487,0.866-0.875,1.804-1.152,2.79l-0.084,0.297L3.17,17.741C3.055,18.585,3,19.31,3,20c0,0.696,0.055,1.423,0.172,2.263 l4.543,0.866l0.083,0.299c0.274,0.979,0.662,1.917,1.153,2.79l0.151,0.27l-2.596,3.823c0.917,1.201,1.991,2.273,3.197,3.194 l3.824-2.601l0.27,0.152c0.849,0.479,1.782,0.863,2.773,1.144l0.297,0.084L17.734,36.83z"></path> </svg> </p> <h5>Custom settings</h5> <p>Many of our file converters include advanced customization options. For instance, when converting videos, you can adjust resolution, aspect ratio, codec, bitrate, and even apply rotation or flip transformations — all to meet your exact needs.</p> </div> </div> <div class="col-md-4 mb-4"> <div class="p-3"> <p class="mb-3"> <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40"> <path fill="red" d="M16.9,25.699c-0.128,0-0.256-0.049-0.354-0.146l-6.2-6.199c-0.195-0.195-0.195-0.512,0-0.707 s0.512-0.195,0.707,0l5.847,5.846l12.047-12.046c0.195-0.195,0.512-0.195,0.707,0s0.195,0.512,0,0.707l-12.4,12.399 C17.156,25.65,17.028,25.699,16.9,25.699z"></path> <path d="M20,38.1c-0.048,0-0.097-0.007-0.144-0.021C19.209,37.885,4,33.194,4,22.1V3.5C4,3.224,4.224,3,4.5,3h31 C35.776,3,36,3.224,36,3.5v18.6c0,11.095-15.209,15.785-15.856,15.979C20.097,38.093,20.048,38.1,20,38.1z M5,4v18.1 c0,9.812,13.451,14.472,15,14.976c1.549-0.504,15-5.172,15-14.976V4H5z"></path> </svg> </p> <h5>Security guaranteed</h5> <p>Your uploaded files are automatically deleted right after processing, while converted files are securely removed within 24 hours. We guarantee 100% privacy — no one but you can access your data. Learn more about our file <a href="/security" target="_blank">security</a> and <a href="/privacy" target="_blank">privacy policy</a>.</p> </div> </div> <div class="col-md-4 mb-4"> <div class="p-3"> <p class="mb-3"> <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40"> <path fill="red" d="M35.5,38h-11c-1.379,0-2.5-1.121-2.5-2.5v-19c0-1.378,1.121-2.5,2.5-2.5h11c1.379,0,2.5,1.122,2.5,2.5v19 C38,36.879,36.879,38,35.5,38z M24.5,15c-0.827,0-1.5,0.673-1.5,1.5v19c0,0.827,0.673,1.5,1.5,1.5h11c0.827,0,1.5-0.673,1.5-1.5v-19 c0-0.827-0.673-1.5-1.5-1.5H24.5z"></path> <path d="M31.5,35h-3c-0.276,0-0.5-0.224-0.5-0.5s0.224-0.5,0.5-0.5h3c0.276,0,0.5,0.224,0.5,0.5S31.776,35,31.5,35z"></path> <path d="M33,4.5V12h-1V5H3v18h17v1H3v2h17v1h-6.497c-0.144,0.893-0.688,2.883-2.741,5H20v1H9.5 c-0.209,0-0.396-0.13-0.469-0.326c-0.073-0.196-0.016-0.417,0.144-0.554c2.457-2.105,3.129-4.188,3.312-5.12H2.5 C2.224,27,2,26.776,2,26.5v-22C2,4.224,2.224,4,2.5,4h30C32.776,4,33,4.224,33,4.5z"></path> </svg> </p> <h5>All devices supported</h5> <p>Our browser-based file conversion works seamlessly across all devices and operating systems — no software installation required.</p> </div> </div> </div> </section> <script defer type="931c24cd1b0ea44ca7164d25-text/javascript"> const maxFilesAllowed = 3; const maxFileSizeMB = 25; let selectedFiles = []; const convertButton = document.getElementById("convertButton"); function showWarningMessage(message) { const el = document.getElementById('message'); if (!el) { console.warn('#message not found'); return; } el.innerHTML = message; el.classList.remove('d-none'); // unhide if it was hidden el.classList.add('alert', 'alert-danger'); // style as Bootstrap alert } // Function to reset warning message function resetWarningMessage() { const msgElement = document.getElementById("message"); msgElement.textContent = ""; msgElement.classList.remove("text-danger"); } // File input change event document.getElementById("fileInput").addEventListener("change", (e) => { let newFiles = Array.from(e.target.files).filter(file => file.size <= maxFileSizeMB * 1024 * 1024); if (selectedFiles.length + newFiles.length > maxFilesAllowed) { showWarningMessage(`You can only upload a maximum of ${maxFilesAllowed} files.`); return; } document.getElementById("butonsDiv").classList.remove("d-none"); //resetWarningMessage(); selectedFiles = selectedFiles.concat(newFiles); updateFileList(); }); // Drag-and-drop event listeners let dropOverlay = $("#dropOverlay"); // Show overlay when dragging $(document).on("dragenter dragover", function (e) { e.preventDefault(); e.stopPropagation(); dropOverlay.show(); }); // Hide overlay when leaving $(document).on("dragleave", function (e) { if (e.relatedTarget === null) { dropOverlay.hide(); } }); // Handle file drop $(document).on("drop", function (e) { e.preventDefault(); dropOverlay.hide(); let newFiles = Array.from(e.originalEvent.dataTransfer.files).filter(file => file.size <= maxFileSizeMB * 1024 * 1024); if (selectedFiles.length + newFiles.length > maxFilesAllowed) { showWarningMessage(`You can only upload a maximum of ${maxFilesAllowed} files.`); return; } document.getElementById("butonsDiv").classList.remove("d-none"); // Hide Convert button //resetWarningMessage(); selectedFiles = selectedFiles.concat(newFiles); updateFileList(); }); document.getElementById("convertForm").addEventListener("submit", async function (e) { e.preventDefault(); if(document.getElementById("message").innerHTML.includes("file conversion limit")) { alert(document.getElementById("message").textContent); return; } if (selectedFiles.length === 0) return; var now = new Date(); var batchId = now.getHours() * 100 + now.getMinutes(); // Combine hour and minute //console.log("batchId: " + batchId); convertButton.textContent = "Converting..."; convertButton.disabled = true; selectedFiles.forEach(async (file, index) => { const badgeStatus = document.getElementById(`badgeStatus-${index}`); const progressBar = document.getElementById(`progressBar-${index}`); if(badgeStatus.textContent === "Ready"){ const outputFormat = document.getElementById(`outputFormat-${index}`).value; if (!outputFormat) { document.getElementById("message").textContent = `Please select an output format for ${file.name}`; document.getElementById("message").classList.add("text-danger"); return; } const formData = new FormData(); formData.append("file", file); formData.append("outputFormat", outputFormat); formData.append("batchId", batchId); const fileItem = document.querySelector(`#file-list li:nth-child(${index + 1})`); badgeStatus.textContent = "Uploading"; progressBar.style.width = "10%"; try { const data = await postFormDataWithProgress("/Conversion/ConvertFile", formData, (pct) => { progressBar.style.width = pct + "%"; }); // try { // const response = await fetch("/Conversion/ConvertFile", { // method: "POST", // body: formData, // }); // progressBar.style.width = "40%"; // badgeStatus.textContent = "Converting"; // if (!response.ok) throw new Error(`Failed to convert file: ${file.name}`); // const data = await response.json(); // const jobId = data.jobId; // fileItem.setAttribute("data-job-id", jobId); // } // catch (error) { // //console.error(error); // } // Upload finished; backend accepted the job progressBar.style.width = "40%"; badgeStatus.textContent = "Converting"; // Expect JSON like { jobId: 12345 } const jobId = data.jobId ?? data.JobId ?? data.id; if (!jobId) throw new Error("No jobId returned."); fileItem.setAttribute("data-job-id", jobId); //convertButton.textContent = "Convert"; convertButton.disabled = true; } catch (err) { progressBar.style.width = "100%"; progressBar.classList.add("bg-danger"); badgeStatus.classList.add("text-error"); //retryButton.classList.remove("d-none"); // Show retry button badgeStatus.textContent = "Upload failed"; convertButton.disabled = false; console.error(err); } } }); }); // 1) POST with real-time UPLOAD progress (10% → 40%) function postFormDataWithProgress(url, formData, onProgress) { return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); xhr.open("POST", url); // Upload progress xhr.upload.onprogress = (e) => { if (!e.lengthComputable) return; const uploaded = e.loaded / e.total; // 0..1 const pct = Math.min(40, Math.max(10, 10 + Math.round(uploaded * 30))); // map to 10..40 onProgress?.(pct); }; xhr.onload = () => { if (xhr.status >= 200 && xhr.status < 300) { try { resolve(JSON.parse(xhr.responseText)); } catch { resolve(xhr.responseText); } } else { reject(new Error(`HTTP ${xhr.status}: ${xhr.statusText}`)); } }; xhr.onerror = () => reject(new Error("Network error")); xhr.send(formData); }); } function checkAllJobsFinished() { const allJobs = document.querySelectorAll("#file-list .file-item"); let allProcessed = true; allJobs.forEach(job => { const statusMessage = job.querySelector(".ui-badge").textContent; if (!statusMessage.includes("Completed") && !statusMessage.includes("Failed")) { allProcessed = false; } }); if (allProcessed) { document.getElementById("convertButton").classList.add("d-none"); // Hide Convert button document.getElementById("clearAllButton").classList.remove("d-none"); // Show Clear All button fetchConversionsCount(); } } // Function to update file list function updateFileList() { const fileList = document.getElementById("file-list"); fileList.innerHTML = ""; selectedFiles.forEach((file, index) => { const fileItem = document.createElement("li"); fileItem.className = "file-item list-group-item d-flex flex-column flex-md-row align-items-center"; fileItem.innerHTML = ` <div class="d-flex align-items-center w-100 mb-2 mb-md-0"> <img src="/file-icon.png" alt="icon" class="file-icon me-2"> <span class="file-name-inner" title="${file.name}">${truncateFileName(file.name)}</span> <small class="text-muted ms-2 file-size">${formatFileSize(file.size)}</small> </div> <div class="output-format-container w-50 w-md-25 px-2"> <select class="form-control output-format w-100" id="outputFormat-${index}"> <option value="">Loading formats...</option> </select> </div> <div class="w-100 w-md-50 px-2 text-center"> <div class="progress w-70 my-2"> <div class="progress-bar progress-bar-striped progress-bar-animated" id="progressBar-${index}" role="progressbar" style="width: 0%;" aria-valuemin="0" aria-valuemax="100"></div> </div> <div class="ui-badge text-green" id="badgeStatus-${index}">Ready</div> </div> <div class="d-flex flex-wrap justify-content-center gap-2 mt-2 mt-md-0"> <button type="button" class="btn btn-outline-danger btn-sm btn-remove" onclick="removeFile(${index})"><i class="bi bi-x-lg"></i> </button> <a class="btn btn-primary btn-sm file-download d-none" href="#" target="_blank">Download</a> <button type="button" class="btn btn-warning btn-sm retry-job d-none" onclick="retryJob(${index})">Retry</button> </div> `; fileList.appendChild(fileItem); fetchConversionFormats(file, index); }); convertButton.disabled = selectedFiles.length === 0 || selectedFiles.length > maxFilesAllowed; } function resetForm() { location.reload(); // Reload the page to reset the form } // Remove file function function removeFile(index) { selectedFiles.splice(index, 1); updateFileList(); } // Retry Job Functionality async function retryJob(index) { const fileItem = document.querySelector(`#file-list li:nth-child(${index + 1})`); const jobId = fileItem.getAttribute("data-job-id"); const progressBar = fileItem.querySelector(".progress-bar"); const message = fileItem.querySelector(".ui-badge"); const retryButton = fileItem.querySelector(".retry-job"); if (!jobId) { //console.error("No job ID found for retry."); return; } retryButton.disabled = true; message.textContent = "Retrying conversion..."; try { const response = await fetch(window.APP_CONFIG?.apiBaseUrl + `/admin/jobs/${jobId}/retry`, { method: "POST" }); if (!response.ok) throw new Error("Failed to retry the job."); message.textContent = "Retry initiated..."; progressBar.style.width = "50%"; retryButton.classList.add("d-none"); } catch (error) { //console.error(error); message.textContent = "Retry failed."; retryButton.disabled = false; } } // SignalR Connection const connection = new signalR.HubConnectionBuilder() .withUrl((window.APP_CONFIG?.apiBaseUrl + "/").replace("/api/","") + "/jobHub") .build(); connection.start().then().catch(err => console.error("Error connecting to SignalR:", err)); connection.on("JobStatusUpdate", (jobId, status, outputFilePath) => { //console.log(`Received OUTSIDE update for Job ${jobId}: Status = ${status}, OutputFilePath = ${outputFilePath}`); // Select the correct file item based on jobId const fileItem = document.querySelector(`#file-list li[data-job-id='${jobId}']`); if (!fileItem) { //console.error(`No file item found for Job ${jobId}`); return; } const progressBar = fileItem.querySelector(".progress-bar"); const message = fileItem.querySelector(".ui-badge"); const downloadButton = fileItem.querySelector(".file-download"); const retryButton = fileItem.querySelector(".retry-job"); const outputFormatSelect = fileItem.querySelector(".output-format"); outputFormatSelect.classList.add("disabled"); message.textContent = status; if (status === "Completed") { progressBar.style.width = "100%"; downloadButton.href = (window.APP_CONFIG?.apiBaseUrl + "/").replace("/api/","") + "" + outputFilePath; downloadButton.classList.remove("d-none"); const removeButton = fileItem.querySelector(".btn-remove"); removeButton.classList.add("d-none"); } else if (status === "Failed") { progressBar.style.width = "100%"; progressBar.classList.add("bg-danger"); message.classList.add("text-error"); retryButton.classList.remove("d-none"); // Show retry button } else { progressBar.style.width = "60%"; } checkAllJobsFinished(); }); function truncateFileName(name) { if (name.length <= 24) return name; const extensionIndex = name.lastIndexOf("."); const extension = extensionIndex !== -1 ? name.substring(extensionIndex) : ""; const nameWithoutExtension = extensionIndex !== -1 ? name.substring(0, extensionIndex) : name; const firstPart = nameWithoutExtension.substring(0, 12); const lastPart = nameWithoutExtension.substring(nameWithoutExtension.length - 8); return `${firstPart}...${lastPart}${extension}`; } function formatFileSize(size) { if (size < 1024) return size + " B"; else if (size < 1024 * 1024) return (size / 1024).toFixed(2) + " KB"; else if (size < 1024 * 1024 * 1024) return (size / (1024 * 1024)).toFixed(2) + " MB"; else return (size / (1024 * 1024 * 1024)).toFixed(2) + " GB"; } async function fetchConversionFormats(file, index) { const fileExt = file.name.toLowerCase(); const outputFormatSelect = document.getElementById(`outputFormat-${index}`); // Clear the dropdown outputFormatSelect.innerHTML = '<option value="">Output format</option>'; const apiUrl = window.APP_CONFIG?.apiBaseUrl + `/conversion/formats/${encodeURIComponent(fileExt)}`; try { // Call the API to get possible conversions const response = await fetch(apiUrl); if (!response.ok) { outputFormatSelect.innerHTML = '<option value="">Failed to fetch formats</option>'; throw new Error(`Failed to fetch conversion formats. Status: ${response.status}`); } const data = await response.json(); if (data.possibleConversions.length === 0) { outputFormatSelect.innerHTML = '<option value="">No more supported</option>'; // console.log("data.possibleConversions.length: "+data.possibleConversions.length); // var option = document.createElement("option"); // option.value = "TXT"; // option.textContent = "txt".toUpperCase(); // Display in uppercase // outputFormatSelect.appendChild(option); // option = document.createElement("option"); // option.value = "PDF"; // option.textContent = "pdf".toUpperCase(); // Display in uppercase // outputFormatSelect.appendChild(option); } // Sort the possible conversions alphabetically data.possibleConversions.sort((a, b) => a.localeCompare(b)); // Populate the dropdown with sorted conversions data.possibleConversions.forEach(format => { const options = document.createElement("option"); options.value = format; options.textContent = format.toUpperCase(); // Display in uppercase outputFormatSelect.appendChild(options); }); } catch (error) { //console.error("Error fetching formats:", error); outputFormatSelect.innerHTML = '<option value="">Error loading formats</option>'; } } </script> </main> </div> <footer b-2u57mvn44z class="bg-dark text-light py-4"> <div b-2u57mvn44z class="container"> <div b-2u57mvn44z class="row"> <!-- Left Column --> <div b-2u57mvn44z class="col-md-3"> <h6 b-2u57mvn44z class="fw-bold">About</h6> <ul b-2u57mvn44z class="list-unstyled"> <li b-2u57mvn44z><a b-2u57mvn44z href="/about" class="text-light text-decoration-none">About</a></li> <li b-2u57mvn44z><a b-2u57mvn44z href="/blog" class="text-light text-decoration-none">Blog</a></li> <li b-2u57mvn44z><a b-2u57mvn44z href="/security" class="text-light text-decoration-none">Security</a></li> <li b-2u57mvn44z><a b-2u57mvn44z href="/formats" class="text-light text-decoration-none">Formats</a></li> <li b-2u57mvn44z><a b-2u57mvn44z href="/help" class="text-light text-decoration-none">Help</a></li> <li b-2u57mvn44z><a b-2u57mvn44z href="/help" class="text-light text-decoration-none">Contact</a></li> </ul> </div> <!-- Middle Column --> <div b-2u57mvn44z class="col-md-3"> <h6 b-2u57mvn44z class="fw-bold">Converters</h6> <ul b-2u57mvn44z class="list-unstyled"> <li b-2u57mvn44z><a b-2u57mvn44z href="/video-file-converter" class="text-light text-decoration-none">Video Converter</a></li> <li b-2u57mvn44z><a b-2u57mvn44z href="/audio-file-converter" class="text-light text-decoration-none">Audio Converter</a></li> <li b-2u57mvn44z><a b-2u57mvn44z href="/document-file-converter" class="text-light text-decoration-none">Document Converter</a></li> <li b-2u57mvn44z><a b-2u57mvn44z href="/image-file-converter" class="text-light text-decoration-none">Image Converter</a></li> <li b-2u57mvn44z><a b-2u57mvn44z href="/youtube-file-converter" class="text-light text-decoration-none">YouTube Converter</a></li> </ul> </div> <!-- Right Column --> <div b-2u57mvn44z class="col-md-3"> <h6 b-2u57mvn44z class="fw-bold">Increase Daily Limits</h6> <ul b-2u57mvn44z class="list-unstyled"> <li b-2u57mvn44z><a b-2u57mvn44z href="/signup" class="text-light text-decoration-none">Go Ad Free</a></li> <li b-2u57mvn44z><a b-2u57mvn44z href="/signup" class="text-light text-decoration-none">Free Register</a></li> <li b-2u57mvn44z><a b-2u57mvn44z href="/login" class="text-light text-decoration-none">Login</a></li> </ul> </div> <!-- Right Column --> <div b-2u57mvn44z class="col-md-3"> <h6 b-2u57mvn44z class="fw-bold">Developers API</h6> <ul b-2u57mvn44z class="list-unstyled"> <li b-2u57mvn44z><a b-2u57mvn44z href="https://docpose.cloud/api-docs" target="_blank" class="text-light text-decoration-none">API Docs</a></li> </ul> </div> </div> <hr b-2u57mvn44z class="bg-secondary"> <div b-2u57mvn44z class="row text-center"> <div b-2u57mvn44z class="col-md-12"> <p b-2u57mvn44z class="mb-0">© 2025 JeDok.com Ltd. All rights reserved. | <a b-2u57mvn44z href="/terms" class="text-light text-decoration-none">Terms of Use</a> | <a b-2u57mvn44z href="/privacy" class="text-light text-decoration-none">Privacy Policy</a></p> </div> </div> </div> </footer> <!-- Rest can be deferred --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" defer crossorigin type="931c24cd1b0ea44ca7164d25-text/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11" defer type="931c24cd1b0ea44ca7164d25-text/javascript"></script> <script defer type="931c24cd1b0ea44ca7164d25-text/javascript"> async function fetchConversionsCount() { const jobsCountLabel = document.getElementById("jobsCountLabel"); jobsCountLabel.innerHTML = ""; $.ajax({ url: "/Conversion/GetJobsCount", type: "GET", dataType: "json", success: function (jobsCount) { jobsCountLabel.innerHTML = jobsCount; if (jobsCount >= 5) { showWarningMessage('You’ve reached today’s file conversion limit (5). To increase your limit, please <a href="/signup" class="alert-link">sign up</a>, or try again tomorrow.'); } }, error: function (xhr) { //console.error("Error fetching jobs count:", xhr); jobsCountLabel.innerHTML = "0"; } }); } fetchConversionsCount(); </script> <script type="931c24cd1b0ea44ca7164d25-text/javascript"> function animateContinuousCounter(id, startValue, incrementPerSecond = 60, minDelay = 1000, maxDelay = 4000) { const el = document.getElementById(id); let currentValue = startValue; let lastUpdate = performance.now(); let nextIncrementTime = lastUpdate + getRandomDelay(); function format(n) { return n.toLocaleString(undefined, { maximumFractionDigits: 2 }); } function getRandomDelay() { return Math.random() * (maxDelay - minDelay) + minDelay; // ms } function update(currentTime) { if (currentTime >= nextIncrementTime) { // Time to increment currentValue += incrementPerSecond * 2; // Double tick effect el.textContent = format(currentValue); // Schedule next increment nextIncrementTime = currentTime + getRandomDelay(); } requestAnimationFrame(update); } requestAnimationFrame(update); } </script> <script src="https://protagcdn.com/d/jedok.com.js" async type="931c24cd1b0ea44ca7164d25-text/javascript"></script> <!-- Why Register Popup --> <div b-2u57mvn44z class="modal fade" id="whyRegisterModal" tabindex="-1" aria-labelledby="whyRegisterLabel" aria-hidden="true"> <div b-2u57mvn44z class="modal-dialog modal-lg modal-dialog-centered modal-dialog-scrollable"> <div b-2u57mvn44z class="modal-content rounded-3 shadow"> <div b-2u57mvn44z class="modal-header border-0"> <h2 b-2u57mvn44z class="h4 modal-title mx-auto" id="whyRegisterLabel">Why Register on Jedok?</h2> <button b-2u57mvn44z type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div b-2u57mvn44z class="modal-body"> <div b-2u57mvn44z class="row g-4"> <div b-2u57mvn44z class="col-12 col-md-6"> <h3 b-2u57mvn44z class="h5 text-center mb-3">Free</h3> <ul b-2u57mvn44z class="list-unstyled fs-6"> <li b-2u57mvn44z>✅ <strong b-2u57mvn44z>Free Conversions</strong> – Enjoy <strong b-2u57mvn44z>15 per day</strong>.</li> <li b-2u57mvn44z>✅ <strong b-2u57mvn44z>Bigger Files</strong> – Upload up to <strong b-2u57mvn44z>250 MB</strong>.</li> <li b-2u57mvn44z>✅ <strong b-2u57mvn44z>Parallel Conversions</strong> – Run up to <strong b-2u57mvn44z>10</strong> at once.</li> <li b-2u57mvn44z>✅ Conversion priority <strong b-2u57mvn44z>High</strong></li> <li b-2u57mvn44z>✅ <strong b-2u57mvn44z>File Management</strong> – Files kept for <strong b-2u57mvn44z>24 hours</strong> (auto-delete) or delete anytime.</li> <li b-2u57mvn44z>✅ <strong b-2u57mvn44z>All Formats Supported</strong> – 200+ formats (docs, images, audio, video, archives, and more).</li> <li b-2u57mvn44z>✅ <strong b-2u57mvn44z>Email Verification</strong> – A valid email is required; we’ll send a quick verification link.</li> </ul> <div b-2u57mvn44z class="text-center"> <a b-2u57mvn44z class="btn btn-primary btn-sm" href="/signup">Register Now</a> </div> </div> <div b-2u57mvn44z class="col-12 col-md-6"> <h3 b-2u57mvn44z class="h5 text-center mb-3"> Subscribed<br b-2u57mvn44z /><small b-2u57mvn44z>(USD $3.99 / month)</small> </h3> <ul b-2u57mvn44z class="list-unstyled fs-6"> <li b-2u57mvn44z>✅ <strong b-2u57mvn44z>Free Conversions</strong> – Enjoy <strong b-2u57mvn44z>60 per day</strong>.</li> <li b-2u57mvn44z>✅ <strong b-2u57mvn44z>Bigger Files</strong> – Upload up to <strong b-2u57mvn44z>500 MB</strong>.</li> <li b-2u57mvn44z>✅ <strong b-2u57mvn44z>Parallel Conversions</strong> – Run up to <strong b-2u57mvn44z>25</strong> at once.</li> <li b-2u57mvn44z>✅ Conversion priority <strong b-2u57mvn44z>Highest</strong></li> <li b-2u57mvn44z>✅ <strong b-2u57mvn44z>Ad-Free</strong> – 100% ad-free experience.</li> <li b-2u57mvn44z>✅ <strong b-2u57mvn44z>File Management</strong> – Files kept for <strong b-2u57mvn44z>24 hours</strong> (auto-delete) or delete anytime.</li> <li b-2u57mvn44z>✅ <strong b-2u57mvn44z>All Formats Supported</strong> – 200+ formats.</li> </ul> <div b-2u57mvn44z class="text-center"> <a b-2u57mvn44z class="btn btn-primary btn-sm" href="/contact">Contact Us for Subscription</a> </div> </div> </div> <p b-2u57mvn44z class="text-center mt-4 mb-0"> <strong b-2u57mvn44z>Sign up now</strong> to unlock these features and enjoy a faster, more powerful conversion experience! </p> </div> </div> </div> </div> <script type="931c24cd1b0ea44ca7164d25-text/javascript"> document.addEventListener("DOMContentLoaded", function () { const modalEl = document.getElementById('whyRegisterModal'); const modal = new bootstrap.Modal(modalEl); const key = "whyRegisterShownCount"; // Check how many times shown in this session let shownCount = parseInt(sessionStorage.getItem(key) || "0"); if (shownCount < 2) { setTimeout(() => { modal.show(); shownCount++; sessionStorage.setItem(key, shownCount); }, 15000); // 15 seconds } }); </script><script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="931c24cd1b0ea44ca7164d25-|49" defer></script><script defer src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon='{"version":"2024.11.0","token":"b675e68b422a4d21b07fefa11bd3a716","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script></body></html>