

{"id":28,"date":"2024-09-07T17:17:36","date_gmt":"2024-09-07T15:17:36","guid":{"rendered":"https:\/\/pacific-webtools.com\/pdf\/?page_id=28"},"modified":"2024-09-07T17:49:13","modified_gmt":"2024-09-07T15:49:13","slug":"ocr-pdf-convertir-vos-pdf-en-texte-editable","status":"publish","type":"page","link":"https:\/\/pacific-webtools.com\/pdf\/ocr-pdf-convertir-vos-pdf-en-texte-editable\/","title":{"rendered":"OCR PDF &#8211; Convertir vos PDF en texte \u00e9ditable"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"28\" class=\"elementor elementor-28\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cecfbf6 e-con-full e-flex e-con e-parent\" data-id=\"cecfbf6\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3910326 elementor-widget elementor-widget-html\" data-id=\"3910326\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"pdf-ocr-widget\">\r\n  <html>\r\n  <head>\r\n    <base href=\"https:\/\/websim-creation-engine.com\/pdf-ocr-convertir-les-pdf-en-texte%20-%20En%20format%20mobile%20la%20selection%20des%20pages%20n'a%20pas%20suffisamment%20de%20hauteur%20et%20ne%20permet%20pas%20de%20pouvoir%20les%20selectionner.%20Je%20souhaite%20donc%20augmenter%20la%20hauteur%20de%20celui-ci%20de%20mani%C3%A8re%20automatique%20selon%20le%20nombre%20de%20page%20%C3%A0%20selectionner%20en%20rendant%20la%20page%20scrollable%20vers%20le%20bas%20(UNIQUEMENT%20pour%20le%20format%20mobile)\">\r\n    <meta charset=\"UTF-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n    <title>PDF OCR - Convertir les PDF en texte (Version mobile am\u00e9lior\u00e9e)<\/title>\r\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Roboto:wght@300;400;700&display=swap\" rel=\"stylesheet\">\r\n    <link href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.4.0\/css\/all.min.css\" rel=\"stylesheet\">\r\n    <link href=\"https:\/\/cdn.quilljs.com\/1.3.6\/quill.snow.css\" rel=\"stylesheet\">\r\n    <style>\r\n      .pdf-ocr-widget {\r\n        --background-color: #f0f4f8;\r\n        --text-color: #333;\r\n        --border-color: #e0e0e0;\r\n        --button-color: #3498db;\r\n        --button-hover-color: #2980b9;\r\n        --header-color: #2c3e50;\r\n        --secondary-color: #34495e;\r\n        --border-radius: 8px;\r\n        --slider-thumb-color: #3498db;\r\n        --slider-track-color: #bdc3c7;\r\n        --success-color: #2ecc71;\r\n        --card-background: #ffffff;\r\n        --card-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\r\n      }\r\n\r\n      \/* Forcer les couleurs pour s'assurer que tout est visible *\/\r\n      .pdf-ocr-widget, .pdf-ocr-widget * {\r\n        color: #333 !important; \/* Forcer la couleur du texte en gris fonc\u00e9 *\/\r\n      }\r\n\r\n      .pdf-ocr-widget .drop-zone {\r\n        color: #333 !important; \/* Assure que le texte dans la drop-zone est visible *\/\r\n        background-color: rgba(52, 152, 219, 0.05) !important; \/* Conserver un fond l\u00e9ger *\/\r\n      }\r\n\r\n      .pdf-ocr-widget .ql-editor {\r\n        color: #333 !important; \/* Forcer la couleur du texte dans l'\u00e9diteur Quill *\/\r\n        background-color: #ffffff !important; \/* S'assurer que le fond de l'\u00e9diteur est blanc *\/\r\n      }\r\n\r\n      .pdf-ocr-widget body, .pdf-ocr-widget html {\r\n        margin: 0;\r\n        padding: 0;\r\n        font-family: 'Roboto', sans-serif;\r\n        height: 100vh;\r\n        background-color: var(--background-color);\r\n        color: var(--text-color);\r\n      }\r\n\r\n      .pdf-ocr-widget .container {\r\n        display: flex;\r\n        flex-direction: column;\r\n        height: 100vh;\r\n      }\r\n\r\n      .pdf-ocr-widget .hero-section {\r\n        background: linear-gradient(135deg, #3498db, #2980b9);\r\n        padding: 1rem;\r\n        text-align: center;\r\n        color: white;\r\n        position: relative;\r\n        overflow: hidden;\r\n      }\r\n\r\n      .pdf-ocr-widget .hero-content {\r\n        position: relative;\r\n        z-index: 2;\r\n      }\r\n\r\n      .pdf-ocr-widget .hero-section h1 {\r\n        font-size: 1.5rem;\r\n        margin-bottom: 0.25rem;\r\n      }\r\n\r\n      .pdf-ocr-widget .hero-section p {\r\n        font-size: 0.9rem;\r\n        margin: 0;\r\n      }\r\n\r\n      .pdf-ocr-widget #matrix-canvas {\r\n        position: absolute;\r\n        top: 0;\r\n        left: 0;\r\n        width: 100%;\r\n        height: 100%;\r\n        opacity: 0.1;\r\n        z-index: 1;\r\n      }\r\n\r\n      .pdf-ocr-widget main {\r\n        display: flex;\r\n        flex: 1;\r\n        overflow: hidden;\r\n      }\r\n\r\n      .pdf-ocr-widget .panel {\r\n        flex: 1;\r\n        display: flex;\r\n        flex-direction: column;\r\n        background-color: var(--background-color);\r\n        border: 1px solid var(--border-color);\r\n        border-radius: var(--border-radius);\r\n        overflow: hidden;\r\n        margin: 0.5rem;\r\n      }\r\n\r\n      .pdf-ocr-widget .section-header {\r\n        background-color: var(--header-color);\r\n        color: white;\r\n        padding: 0.5rem;\r\n        font-weight: 600;\r\n      }\r\n\r\n      .pdf-ocr-widget .drop-zone {\r\n        flex: 0 0 auto;\r\n        display: flex;\r\n        flex-direction: column;\r\n        justify-content: center;\r\n        align-items: center;\r\n        padding: 1rem;\r\n        border: 2px dashed var(--border-color);\r\n        border-radius: var(--border-radius);\r\n        margin: 0.5rem;\r\n        transition: all 0.3s ease;\r\n        cursor: pointer;\r\n        background-color: rgba(52, 152, 219, 0.05);\r\n        height: 100px;\r\n      }\r\n\r\n      .pdf-ocr-widget .drop-zone:hover,\r\n      .pdf-ocr-widget .drop-zone.drag-over {\r\n        background-color: rgba(52, 152, 219, 0.1);\r\n        border-color: var(--button-color);\r\n      }\r\n\r\n      .pdf-ocr-widget .drop-zone p {\r\n        font-size: 0.9rem;\r\n        margin-bottom: 0.5rem;\r\n      }\r\n\r\n      .pdf-ocr-widget .btn {\r\n        padding: 0.5rem 1rem;\r\n        background-color: var(--button-color);\r\n        color: white;\r\n        border: none;\r\n        border-radius: var(--border-radius);\r\n        cursor: pointer;\r\n        font-size: 0.9rem;\r\n        font-weight: 600;\r\n        transition: all 0.3s ease;\r\n      }\r\n\r\n      .pdf-ocr-widget .btn:hover {\r\n        background-color: var(--button-hover-color);\r\n      }\r\n\r\n      .pdf-ocr-widget .btn:disabled {\r\n        background-color: var(--border-color);\r\n        cursor: not-allowed;\r\n      }\r\n\r\n      .pdf-ocr-widget #file-cards {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        gap: 1rem;\r\n        padding: 1rem;\r\n        overflow-y: auto;\r\n      }\r\n\r\n      .pdf-ocr-widget .file-card {\r\n        background-color: var(--card-background);\r\n        border-radius: var(--border-radius);\r\n        box-shadow: var(--card-shadow);\r\n        padding: 1rem;\r\n        width: calc(50% - 0.5rem);\r\n        display: flex;\r\n        flex-direction: column;\r\n        transition: all 0.3s ease;\r\n      }\r\n\r\n      .pdf-ocr-widget .file-card:hover {\r\n        transform: translateY(-5px);\r\n        box-shadow: 0 6px 8px rgba(0, 0, 0, 0.15);\r\n      }\r\n\r\n      .pdf-ocr-widget .file-icon {\r\n        font-size: 2rem;\r\n        color: var(--button-color);\r\n        margin-bottom: 0.5rem;\r\n      }\r\n\r\n      .pdf-ocr-widget .file-name {\r\n        font-weight: bold;\r\n        margin-bottom: 0.25rem;\r\n        word-break: break-word;\r\n      }\r\n\r\n      .pdf-ocr-widget .file-size {\r\n        font-size: 0.8rem;\r\n        color: var(--secondary-color);\r\n      }\r\n\r\n      .pdf-ocr-widget #preview-container {\r\n        flex: 1;\r\n        overflow-y: auto;\r\n        padding: 0.5rem;\r\n      }\r\n\r\n      .pdf-ocr-widget .pdf-preview {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        gap: 0.5rem;\r\n      }\r\n\r\n      .pdf-ocr-widget .page-thumbnail {\r\n        width: 150px;\r\n        height: 200px;\r\n        border: 1px solid var(--border-color);\r\n        border-radius: var(--border-radius);\r\n        overflow: hidden;\r\n        position: relative;\r\n        cursor: pointer;\r\n      }\r\n\r\n      .pdf-ocr-widget .page-thumbnail.selected {\r\n        border-color: var(--button-color);\r\n        box-shadow: 0 0 5px rgba(52, 152, 219, 0.5);\r\n      }\r\n\r\n      .pdf-ocr-widget .page-thumbnail img {\r\n        width: 100%;\r\n        height: 100%;\r\n        object-fit: contain;\r\n      }\r\n\r\n      .pdf-ocr-widget .page-number {\r\n        position: absolute;\r\n        bottom: 0;\r\n        left: 0;\r\n        right: 0;\r\n        background-color: rgba(0, 0, 0, 0.5);\r\n        color: white;\r\n        text-align: center;\r\n        padding: 2px;\r\n        font-size: 0.8rem;\r\n      }\r\n\r\n      .pdf-ocr-widget #editor-container {\r\n        flex: 1;\r\n        margin: 0.5rem;\r\n        overflow-y: auto;\r\n        border: 1px solid var(--border-color);\r\n        border-radius: var(--border-radius);\r\n        background-color: white;\r\n      }\r\n\r\n      .pdf-ocr-widget .ql-toolbar {\r\n        border-top: none !important;\r\n        border-left: none !important;\r\n        border-right: none !important;\r\n      }\r\n\r\n      .pdf-ocr-widget .ql-container {\r\n        border: none !important;\r\n      }\r\n\r\n      .pdf-ocr-widget .progress-bar {\r\n        width: 100%;\r\n        height: 6px;\r\n        background-color: var(--background-color);\r\n        border-radius: 3px;\r\n        margin-top: 0.5rem;\r\n        overflow: hidden;\r\n        display: none;\r\n      }\r\n\r\n      .pdf-ocr-widget .progress {\r\n        width: 0%;\r\n        height: 100%;\r\n        background-color: var(--button-color);\r\n        transition: width 0.3s ease;\r\n      }\r\n\r\n      .pdf-ocr-widget .editor-actions {\r\n        display: flex;\r\n        justify-content: flex-end;\r\n        padding: 0.5rem;\r\n        background-color: var(--background-color);\r\n        border-top: 1px solid var(--border-color);\r\n      }\r\n\r\n      .pdf-ocr-widget .editor-actions .btn {\r\n        margin-left: 0.5rem;\r\n      }\r\n\r\n      @media (max-width: 768px) {\r\n        .pdf-ocr-widget main {\r\n          flex-direction: column;\r\n          overflow-y: auto;\r\n        }\r\n\r\n        .pdf-ocr-widget .file-card {\r\n          width: 100%;\r\n        }\r\n\r\n        .pdf-ocr-widget .panel {\r\n          flex: none;\r\n          height: auto;\r\n        }\r\n\r\n        .pdf-ocr-widget #preview-container {\r\n          max-height: none;\r\n          overflow-y: visible;\r\n        }\r\n\r\n        .pdf-ocr-widget .pdf-preview {\r\n          flex-direction: column;\r\n          align-items: center;\r\n        }\r\n\r\n        .pdf-ocr-widget .page-thumbnail {\r\n          width: 80%;\r\n          height: auto;\r\n          aspect-ratio: 3\/4;\r\n        }\r\n      }\r\n    <\/style>\r\n  <\/head>\r\n  <body>\r\n    <div class=\"container\">\r\n      <section class=\"hero-section\">\r\n        <canvas id=\"matrix-canvas\"><\/canvas>\r\n        <div class=\"hero-content\">\r\n          <h1>PDF OCR - Convertir les PDF en texte<\/h1>\r\n          <p>Transformez vos fichiers PDF en texte \u00e9ditable avec s\u00e9lection de pages<\/p>\r\n        <\/div>\r\n      <\/section>\r\n\r\n      <main>\r\n        <div class=\"panel\">\r\n          <div class=\"section-header\">Fichiers PDF<\/div>\r\n          <div class=\"drop-zone\" id=\"drop-zone\">\r\n            <p>Glissez et d\u00e9posez vos fichiers PDF ici<\/p>\r\n            <input type=\"file\" id=\"file-input\" accept=\".pdf\" multiple style=\"display: none;\">\r\n            <button class=\"btn\" onclick=\"document.getElementById('file-input').click()\">S\u00e9lectionner<\/button>\r\n          <\/div>\r\n          <div id=\"file-cards\"><\/div>\r\n          <div id=\"preview-container\"><\/div>\r\n          <div class=\"progress-bar\">\r\n            <div class=\"progress\" id=\"progress\"><\/div>\r\n          <\/div>\r\n          <button id=\"convert-btn\" class=\"btn\" disabled>Convertir les pages s\u00e9lectionn\u00e9es<\/button>\r\n        <\/div>\r\n        <div class=\"panel\">\r\n          <div class=\"section-header\">Texte extrait<\/div>\r\n          <div id=\"editor-container\"><\/div>\r\n          <div class=\"editor-actions\">\r\n            <button id=\"save-txt-btn\" class=\"btn\">Enregistrer en TXT<\/button>\r\n          <\/div>\r\n        <\/div>\r\n      <\/main>\r\n    <\/div>\r\n    \r\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/2.9.359\/pdf.min.js\"><\/script>\r\n    <script src=\"https:\/\/unpkg.com\/tesseract.js@v2.1.0\/dist\/tesseract.min.js\"><\/script>\r\n    <script src=\"https:\/\/cdn.quilljs.com\/1.3.6\/quill.min.js\"><\/script>\r\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/FileSaver.js\/2.0.5\/FileSaver.min.js\"><\/script>\r\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/docx\/7.3.0\/docx.min.js\"><\/script>\r\n\r\n    <script>\r\n      const dropZone = document.getElementById('drop-zone');\r\n      const fileInput = document.getElementById('file-input');\r\n      const fileCards = document.getElementById('file-cards');\r\n      const previewContainer = document.getElementById('preview-container');\r\n      const convertBtn = document.getElementById('convert-btn');\r\n      const progressBar = document.querySelector('.progress-bar');\r\n      const progress = document.getElementById('progress');\r\n      const saveTxtBtn = document.getElementById('save-txt-btn');\r\n\r\n      let selectedFiles = [];\r\n      let selectedPages = new Set();\r\n\r\n      pdfjsLib.GlobalWorkerOptions.workerSrc = 'https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/2.9.359\/pdf.worker.min.js';\r\n\r\n      \/\/ Initialize Quill editor\r\n      const quill = new Quill('#editor-container', {\r\n        theme: 'snow',\r\n        modules: {\r\n          toolbar: [\r\n            [{ 'header': [1, 2, 3, 4, 5, 6, false] }],\r\n            ['bold', 'italic', 'underline', 'strike'],\r\n            [{ 'color': [] }, { 'background': [] }],\r\n            [{ 'list': 'ordered'}, { 'list': 'bullet' }],\r\n            [{ 'align': [] }],\r\n            ['link', 'image'],\r\n            ['clean']\r\n          ]\r\n        }\r\n      });\r\n\r\n      \/\/ Matrix animation\r\n      const canvas = document.getElementById('matrix-canvas');\r\n      const ctx = canvas.getContext('2d');\r\n\r\n      canvas.width = canvas.offsetWidth;\r\n      canvas.height = canvas.offsetHeight;\r\n\r\n      const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9'.split('');\r\n\r\n      const fontSize = 10;\r\n      const columns = canvas.width \/ fontSize;\r\n\r\n      const drops = [];\r\n      for (let i = 0; i < columns; i++) {\r\n        drops[i] = 1;\r\n      }\r\n\r\n      function draw() {\r\n        ctx.fillStyle = 'rgba(0, 0, 0, 0.05)';\r\n        ctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\r\n        ctx.fillStyle = '#0f0';\r\n        ctx.font = fontSize + 'px monospace';\r\n\r\n        for (let i = 0; i < drops.length; i++) {\r\n          const text = chars[Math.floor(Math.random() * chars.length)];\r\n          ctx.fillText(text, i * fontSize, drops[i] * fontSize);\r\n\r\n          if (drops[i] * fontSize > canvas.height && Math.random() > 0.975) {\r\n            drops[i] = 0;\r\n          }\r\n          drops[i]++;\r\n        }\r\n      }\r\n\r\n      function animate() {\r\n        draw();\r\n        requestAnimationFrame(animate);\r\n      }\r\n\r\n      animate();\r\n\r\n      window.addEventListener('resize', () => {\r\n        canvas.width = canvas.offsetWidth;\r\n        canvas.height = canvas.offsetHeight;\r\n      });\r\n\r\n      dropZone.addEventListener('dragover', (e) => {\r\n        e.preventDefault();\r\n        dropZone.classList.add('drag-over');\r\n      });\r\n\r\n      dropZone.addEventListener('dragleave', () => {\r\n        dropZone.classList.remove('drag-over');\r\n      });\r\n\r\n      dropZone.addEventListener('drop', (e) => {\r\n        e.preventDefault();\r\n        dropZone.classList.remove('drag-over');\r\n        const files = Array.from(e.dataTransfer.files).filter(file => file.type === 'application\/pdf');\r\n        if (files.length > 0) {\r\n          handleFiles(files);\r\n        } else {\r\n          alert('Veuillez s\u00e9lectionner des fichiers PDF valides.');\r\n        }\r\n      });\r\n\r\n      fileInput.addEventListener('change', (e) => {\r\n        const files = Array.from(e.target.files).filter(file => file.type === 'application\/pdf');\r\n        if (files.length > 0) {\r\n          handleFiles(files);\r\n        } else {\r\n          alert('Veuillez s\u00e9lectionner des fichiers PDF valides.');\r\n        }\r\n      });\r\n\r\n      function handleFiles(files) {\r\n        selectedFiles = files;\r\n        fileCards.innerHTML = '';\r\n        convertBtn.disabled = true;\r\n        selectedPages.clear();\r\n        previewContainer.innerHTML = '';\r\n\r\n        files.forEach((file, index) => {\r\n          const card = document.createElement('div');\r\n          card.className = 'file-card';\r\n          card.innerHTML = `\r\n            <div class=\"file-icon\"><i class=\"fas fa-file-pdf\"><\/i><\/div>\r\n            <div class=\"file-name\">${file.name}<\/div>\r\n            <div class=\"file-size\">${formatFileSize(file.size)}<\/div>\r\n          `;\r\n          fileCards.appendChild(card);\r\n\r\n          card.addEventListener('click', () => {\r\n            showPdfPreview(file, index);\r\n          });\r\n        });\r\n      }\r\n\r\n      async function showPdfPreview(file, fileIndex) {\r\n        previewContainer.innerHTML = '';\r\n        const pdfPreview = document.createElement('div');\r\n        pdfPreview.className = 'pdf-preview';\r\n        pdfPreview.innerHTML = `<h3>${file.name}<\/h3>`;\r\n        previewContainer.appendChild(pdfPreview);\r\n\r\n        const arrayBuffer = await file.arrayBuffer();\r\n        const pdfDoc = await pdfjsLib.getDocument(arrayBuffer).promise;\r\n        const numPages = pdfDoc.numPages;\r\n\r\n        for (let i = 1; i <= numPages; i++) {\r\n          const page = await pdfDoc.getPage(i);\r\n          const viewport = page.getViewport({ scale: 0.2 });\r\n          const canvas = document.createElement('canvas');\r\n          const context = canvas.getContext('2d');\r\n          canvas.height = viewport.height;\r\n          canvas.width = viewport.width;\r\n\r\n          await page.render({ canvasContext: context, viewport: viewport }).promise;\r\n\r\n          const thumbnail = document.createElement('div');\r\n          thumbnail.className = 'page-thumbnail';\r\n          thumbnail.innerHTML = `\r\n            <img decoding=\"async\" src=\"${canvas.toDataURL()}\" alt=\"Page ${i}\">\r\n            <div class=\"page-number\">Page ${i}<\/div>\r\n          `;\r\n          thumbnail.addEventListener('click', () => {\r\n            thumbnail.classList.toggle('selected');\r\n            const pageId = `${fileIndex}-${i}`;\r\n            if (selectedPages.has(pageId)) {\r\n              selectedPages.delete(pageId);\r\n            } else {\r\n              selectedPages.add(pageId);\r\n            }\r\n            convertBtn.disabled = selectedPages.size === 0;\r\n          });\r\n          pdfPreview.appendChild(thumbnail);\r\n        }\r\n\r\n        \/\/ Adjust preview container height for mobile devices\r\n        if (window.innerWidth <= 768) {\r\n          const totalHeight = numPages * (200 + 16); \/\/ 200px for thumbnail height + 16px for gap\r\n          previewContainer.style.height = `${totalHeight}px`;\r\n          previewContainer.style.maxHeight = 'none';\r\n          previewContainer.style.overflowY = 'visible';\r\n        }\r\n      }\r\n\r\n      convertBtn.addEventListener('click', async () => {\r\n        if (selectedPages.size === 0) return;\r\n\r\n        convertBtn.disabled = true;\r\n        progressBar.style.display = 'block';\r\n        quill.setText('Conversion en cours...');\r\n\r\n        try {\r\n          let extractedText = '';\r\n          let totalPages = selectedPages.size;\r\n          let processedPages = 0;\r\n\r\n          for (let i = 0; i < selectedFiles.length; i++) {\r\n            const file = selectedFiles[i];\r\n            const arrayBuffer = await file.arrayBuffer();\r\n            const pdfDoc = await pdfjsLib.getDocument(arrayBuffer).promise;\r\n\r\n            for (let j = 1; j <= pdfDoc.numPages; j++) {\r\n              const pageId = `${i}-${j}`;\r\n              if (selectedPages.has(pageId)) {\r\n                const page = await pdfDoc.getPage(j);\r\n                const textContent = await page.getTextContent();\r\n                const pageText = textContent.items.map(item => item.str).join(' ');\r\n\r\n                if (pageText.trim() === '') {\r\n                  \/\/ If no text was extracted, perform OCR\r\n                  const viewport = page.getViewport({ scale: 1.5 });\r\n                  const canvas = document.createElement('canvas');\r\n                  const context = canvas.getContext('2d');\r\n                  canvas.height = viewport.height;\r\n                  canvas.width = viewport.width;\r\n\r\n                  await page.render({ canvasContext: context, viewport: viewport }).promise;\r\n\r\n                  const result = await Tesseract.recognize(canvas);\r\n                  extractedText += `<h3>Fichier: ${file.name}, Page: ${j}<\/h3>${result.data.text}<br><br>`;\r\n                } else {\r\n                  extractedText += `<h3>Fichier: ${file.name}, Page: ${j}<\/h3>${pageText}<br><br>`;\r\n                }\r\n\r\n                processedPages++;\r\n                progress.style.width = `${(processedPages \/ totalPages) * 100}%`;\r\n              }\r\n            }\r\n          }\r\n\r\n          quill.root.innerHTML = extractedText;\r\n        } catch (error) {\r\n          console.error('Error converting PDF:', error);\r\n          quill.setText('Une erreur est survenue lors de la conversion du PDF. Veuillez r\u00e9essayer.');\r\n        } finally {\r\n          convertBtn.disabled = false;\r\n          progressBar.style.display = 'none';\r\n          progress.style.width = '0%';\r\n        }\r\n      });\r\n\r\n      saveTxtBtn.addEventListener('click', () => {\r\n        const text = quill.getText();\r\n        const blob = new Blob([text], { type: 'text\/plain;charset=utf-8' });\r\n        saveAs(blob, 'texte_extrait.txt');\r\n      });\r\n\r\n      function formatFileSize(bytes) {\r\n        if (bytes === 0) return '0 Bytes';\r\n        const k = 1024;\r\n        const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\r\n        const i = Math.floor(Math.log(bytes) \/ Math.log(k));\r\n        return parseFloat((bytes \/ Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\r\n      }\r\n\r\n      \/\/ Adjust preview container height on window resize\r\n      window.addEventListener('resize', () => {\r\n        if (window.innerWidth <= 768 && previewContainer.children.length > 0) {\r\n          const pdfPreview = previewContainer.querySelector('.pdf-preview');\r\n          const numPages = pdfPreview.children.length - 1; \/\/ Subtract 1 for the h3 element\r\n          const totalHeight = numPages * (200 + 16); \/\/ 200px for thumbnail height + 16px for gap\r\n          previewContainer.style.height = `${totalHeight}px`;\r\n          previewContainer.style.maxHeight = 'none';\r\n          previewContainer.style.overflowY = 'visible';\r\n        } else {\r\n          previewContainer.style.height = '';\r\n          previewContainer.style.maxHeight = '';\r\n          previewContainer.style.overflowY = 'auto';\r\n        }\r\n      });\r\n    <\/script>\r\n  <\/body>\r\n  <\/html>\r\n<\/div>\r\n\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>PDF OCR &#8211; Convertir les PDF en texte (Version mobile am\u00e9lior\u00e9e) PDF OCR &#8211; Convertir les PDF en texte Transformez vos fichiers PDF en texte \u00e9ditable avec s\u00e9lection de pages Fichiers PDF Glissez et d\u00e9posez vos fichiers PDF ici S\u00e9lectionner Convertir les pages s\u00e9lectionn\u00e9es Texte extrait Enregistrer en TXT<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-28","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>OCR PDF - Convertir vos PDF en texte \u00e9ditable - Pacific PDF Webtools<\/title>\n<meta name=\"description\" content=\"Convertissez facilement vos fichiers PDF en texte \u00e9ditable gr\u00e2ce \u00e0 Pacific PDF Webtools. S\u00e9lectionnez les pages \u00e0 extraire\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/pacific-webtools.com\/pdf\/ocr-pdf-convertir-vos-pdf-en-texte-editable\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"OCR PDF - Convertir vos PDF en texte \u00e9ditable - Pacific PDF Webtools\" \/>\n<meta property=\"og:description\" content=\"Convertissez facilement vos fichiers PDF en texte \u00e9ditable gr\u00e2ce \u00e0 Pacific PDF Webtools. S\u00e9lectionnez les pages \u00e0 extraire\" \/>\n<meta property=\"og:url\" content=\"https:\/\/pacific-webtools.com\/pdf\/ocr-pdf-convertir-vos-pdf-en-texte-editable\/\" \/>\n<meta property=\"og:site_name\" content=\"Pacific PDF Webtools\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-07T15:49:13+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/pacific-webtools.com\/pdf\/ocr-pdf-convertir-vos-pdf-en-texte-editable\/\",\"url\":\"https:\/\/pacific-webtools.com\/pdf\/ocr-pdf-convertir-vos-pdf-en-texte-editable\/\",\"name\":\"OCR PDF - Convertir vos PDF en texte \u00e9ditable - Pacific PDF Webtools\",\"isPartOf\":{\"@id\":\"https:\/\/pacific-webtools.com\/pdf\/#website\"},\"datePublished\":\"2024-09-07T15:17:36+00:00\",\"dateModified\":\"2024-09-07T15:49:13+00:00\",\"description\":\"Convertissez facilement vos fichiers PDF en texte \u00e9ditable gr\u00e2ce \u00e0 Pacific PDF Webtools. S\u00e9lectionnez les pages \u00e0 extraire\",\"breadcrumb\":{\"@id\":\"https:\/\/pacific-webtools.com\/pdf\/ocr-pdf-convertir-vos-pdf-en-texte-editable\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/pacific-webtools.com\/pdf\/ocr-pdf-convertir-vos-pdf-en-texte-editable\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/pacific-webtools.com\/pdf\/ocr-pdf-convertir-vos-pdf-en-texte-editable\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/pacific-webtools.com\/pdf\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"OCR PDF &#8211; Convertir vos PDF en texte \u00e9ditable\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/pacific-webtools.com\/pdf\/#website\",\"url\":\"https:\/\/pacific-webtools.com\/pdf\/\",\"name\":\"Pacific PDF Webtools\",\"description\":\"Tous les outils PDF : Fusionner, Diviser, Convertir, Modifier et Compresser vos PDF en ligne facilement\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/pacific-webtools.com\/pdf\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"OCR PDF - Convertir vos PDF en texte \u00e9ditable - Pacific PDF Webtools","description":"Convertissez facilement vos fichiers PDF en texte \u00e9ditable gr\u00e2ce \u00e0 Pacific PDF Webtools. S\u00e9lectionnez les pages \u00e0 extraire","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/pacific-webtools.com\/pdf\/ocr-pdf-convertir-vos-pdf-en-texte-editable\/","og_locale":"fr_FR","og_type":"article","og_title":"OCR PDF - Convertir vos PDF en texte \u00e9ditable - Pacific PDF Webtools","og_description":"Convertissez facilement vos fichiers PDF en texte \u00e9ditable gr\u00e2ce \u00e0 Pacific PDF Webtools. S\u00e9lectionnez les pages \u00e0 extraire","og_url":"https:\/\/pacific-webtools.com\/pdf\/ocr-pdf-convertir-vos-pdf-en-texte-editable\/","og_site_name":"Pacific PDF Webtools","article_modified_time":"2024-09-07T15:49:13+00:00","twitter_card":"summary_large_image","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/pacific-webtools.com\/pdf\/ocr-pdf-convertir-vos-pdf-en-texte-editable\/","url":"https:\/\/pacific-webtools.com\/pdf\/ocr-pdf-convertir-vos-pdf-en-texte-editable\/","name":"OCR PDF - Convertir vos PDF en texte \u00e9ditable - Pacific PDF Webtools","isPartOf":{"@id":"https:\/\/pacific-webtools.com\/pdf\/#website"},"datePublished":"2024-09-07T15:17:36+00:00","dateModified":"2024-09-07T15:49:13+00:00","description":"Convertissez facilement vos fichiers PDF en texte \u00e9ditable gr\u00e2ce \u00e0 Pacific PDF Webtools. S\u00e9lectionnez les pages \u00e0 extraire","breadcrumb":{"@id":"https:\/\/pacific-webtools.com\/pdf\/ocr-pdf-convertir-vos-pdf-en-texte-editable\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/pacific-webtools.com\/pdf\/ocr-pdf-convertir-vos-pdf-en-texte-editable\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/pacific-webtools.com\/pdf\/ocr-pdf-convertir-vos-pdf-en-texte-editable\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/pacific-webtools.com\/pdf\/"},{"@type":"ListItem","position":2,"name":"OCR PDF &#8211; Convertir vos PDF en texte \u00e9ditable"}]},{"@type":"WebSite","@id":"https:\/\/pacific-webtools.com\/pdf\/#website","url":"https:\/\/pacific-webtools.com\/pdf\/","name":"Pacific PDF Webtools","description":"Tous les outils PDF : Fusionner, Diviser, Convertir, Modifier et Compresser vos PDF en ligne facilement","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pacific-webtools.com\/pdf\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"}]}},"_links":{"self":[{"href":"https:\/\/pacific-webtools.com\/pdf\/wp-json\/wp\/v2\/pages\/28"}],"collection":[{"href":"https:\/\/pacific-webtools.com\/pdf\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/pacific-webtools.com\/pdf\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/pacific-webtools.com\/pdf\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pacific-webtools.com\/pdf\/wp-json\/wp\/v2\/comments?post=28"}],"version-history":[{"count":13,"href":"https:\/\/pacific-webtools.com\/pdf\/wp-json\/wp\/v2\/pages\/28\/revisions"}],"predecessor-version":[{"id":53,"href":"https:\/\/pacific-webtools.com\/pdf\/wp-json\/wp\/v2\/pages\/28\/revisions\/53"}],"wp:attachment":[{"href":"https:\/\/pacific-webtools.com\/pdf\/wp-json\/wp\/v2\/media?parent=28"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}