

{"id":73,"date":"2024-09-07T18:31:51","date_gmt":"2024-09-07T16:31:51","guid":{"rendered":"https:\/\/pacific-webtools.com\/pdf\/?page_id=73"},"modified":"2024-09-07T18:35:15","modified_gmt":"2024-09-07T16:35:15","slug":"pdf-compression-optimisee","status":"publish","type":"page","link":"https:\/\/pacific-webtools.com\/pdf\/pdf-compression-optimisee\/","title":{"rendered":"PDF Compression Optimis\u00e9e"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"73\" class=\"elementor elementor-73\">\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<html>\r\n<head>\r\n  <base href=\"https:\/\/websim-creation-engine.com\/%20%20Je%20souhaite%20que%20les%20fonctions%20des%20boutons%20suivants%20fonctionnent%20:%20Optimiser%20les%20images%20\/%20Supprimer%20les%20m%C3%A9tadonn%C3%A9es%20\/%20Compresser%20le%20texte%20\/%20D%C3%A9dupliquer%20les%20ressources\">\r\n  <meta charset=\"UTF-8\">\r\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n  <title>PDF Fusion - Compression Optimis\u00e9e avec Options Fonctionnelles<\/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  <style>\r\n      :root {\r\n      --background-color: #1e1e1e; \/* Mode sombre *\/\r\n      --text-color: #ffffff; \/* Texte blanc *\/\r\n      --border-color: #444444; \/* Bordures plus sombres *\/\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    }\r\n\r\n    body, 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    .container {\r\n      display: flex;\r\n      flex-direction: column;\r\n      height: 100vh;\r\n    }\r\n\r\n    .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    .hero-content {\r\n      position: relative;\r\n      z-index: 2;\r\n    }\r\n\r\n    .hero-section h1 {\r\n      font-size: 1.5rem;\r\n      margin-bottom: 0.25rem;\r\n    }\r\n\r\n    .hero-section p {\r\n      font-size: 0.9rem;\r\n      margin: 0;\r\n    }\r\n\r\n    #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    main {\r\n      display: flex;\r\n      flex: 1;\r\n      overflow: hidden;\r\n    }\r\n\r\n    .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    .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    .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    .drop-zone:hover, .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    .drop-zone p {\r\n      font-size: 0.9rem;\r\n      margin-bottom: 0.5rem;\r\n    }\r\n\r\n    #file-list {\r\n      list-style-type: none;\r\n      padding: 0;\r\n      margin: 0.5rem;\r\n      overflow-y: auto;\r\n      flex: 1;\r\n    }\r\n\r\n    #file-list li {\r\n      background-color: var(--background-color);\r\n      border: 1px solid var(--border-color);\r\n      border-radius: var(--border-radius);\r\n      padding: 0.5rem;\r\n      margin-bottom: 0.25rem;\r\n      display: flex;\r\n      justify-content: space-between;\r\n      align-items: center;\r\n    }\r\n\r\n    .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    .btn:hover {\r\n      background-color: var(--button-hover-color);\r\n    }\r\n\r\n    .btn:disabled {\r\n      background-color: var(--border-color);\r\n      cursor: not-allowed;\r\n    }\r\n\r\n    .preview-container {\r\n      flex: 1;\r\n      display: flex;\r\n      flex-direction: column;\r\n      overflow: hidden;\r\n    }\r\n\r\n    .preview-main {\r\n      flex: 1;\r\n      display: flex;\r\n      flex-wrap: wrap;\r\n      justify-content: flex-start;\r\n      align-items: flex-start;\r\n      overflow: auto;\r\n      background-color: #fff;\r\n      padding: 1rem;\r\n      gap: 1rem;\r\n    }\r\n\r\n    .preview-item {\r\n      width: calc(33.33% - 1rem);\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      display: flex;\r\n      flex-direction: column;\r\n    }\r\n\r\n    .preview-item canvas {\r\n      width: 100%;\r\n      height: calc(100% - 30px);\r\n      object-fit: contain;\r\n    }\r\n\r\n    .preview-item-footer {\r\n      height: 30px;\r\n      background-color: var(--secondary-color);\r\n      color: white;\r\n      display: flex;\r\n      justify-content: center;\r\n      align-items: center;\r\n      font-size: 0.8rem;\r\n      padding: 0 0.5rem;\r\n    }\r\n\r\n    .compression-controls {\r\n      padding: 1rem;\r\n      background-color: var(--secondary-color);\r\n      color: white;\r\n    }\r\n\r\n    .slider-container {\r\n      display: flex;\r\n      align-items: center;\r\n      margin-bottom: 1rem;\r\n    }\r\n\r\n    .slider-label {\r\n      flex: 0 0 150px;\r\n      margin-right: 1rem;\r\n    }\r\n\r\n    .slider {\r\n      flex: 1;\r\n      -webkit-appearance: none;\r\n      width: 100%;\r\n      height: 8px;\r\n      border-radius: 5px;\r\n      background: var(--slider-track-color);\r\n      outline: none;\r\n      opacity: 0.7;\r\n      transition: opacity .2s;\r\n    }\r\n\r\n    .slider:hover {\r\n      opacity: 1;\r\n    }\r\n\r\n    .slider::-webkit-slider-thumb {\r\n      -webkit-appearance: none;\r\n      appearance: none;\r\n      width: 20px;\r\n      height: 20px;\r\n      border-radius: 50%;\r\n      background: var(--slider-thumb-color);\r\n      cursor: pointer;\r\n    }\r\n\r\n    .slider::-moz-range-thumb {\r\n      width: 20px;\r\n      height: 20px;\r\n      border-radius: 50%;\r\n      background: var(--slider-thumb-color);\r\n      cursor: pointer;\r\n    }\r\n\r\n    .compression-options {\r\n      display: flex;\r\n      flex-wrap: wrap;\r\n      gap: 0.5rem;\r\n      margin-top: 1rem;\r\n    }\r\n\r\n    .compression-option {\r\n      flex: 1 0 calc(50% - 0.25rem);\r\n      text-align: center;\r\n      padding: 0.5rem;\r\n      border: 1px solid var(--border-color);\r\n      border-radius: var(--border-radius);\r\n      cursor: pointer;\r\n      transition: all 0.3s ease;\r\n    }\r\n\r\n    .compression-option.active {\r\n      background-color: var(--button-color);\r\n      color: white;\r\n    }\r\n\r\n    .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    .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    .savings-info {\r\n      background-color: var(--success-color);\r\n      color: white;\r\n      padding: 1rem;\r\n      border-radius: var(--border-radius);\r\n      margin-top: 1rem;\r\n      text-align: center;\r\n      font-weight: bold;\r\n      display: none;\r\n    }\r\n\r\n    @media (max-width: 768px) {\r\n      main {\r\n        flex-direction: column;\r\n      }\r\n\r\n      .preview-item {\r\n        width: calc(50% - 1rem);\r\n      }\r\n    }\r\n\r\n    @media (max-width: 480px) {\r\n      .preview-item {\r\n        width: 100%;\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 Fusion - Compression Optimis\u00e9e<\/h1>\r\n        <p>Compressez vos fichiers PDF tout en pr\u00e9servant leur lisibilit\u00e9<\/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        <ul id=\"file-list\"><\/ul>\r\n        <div class=\"compression-controls\">\r\n          <div class=\"slider-container\">\r\n            <span class=\"slider-label\">Niveau de compression :<\/span>\r\n            <input type=\"range\" min=\"1\" max=\"100\" value=\"50\" class=\"slider\" id=\"compression-slider\">\r\n          <\/div>\r\n          <div class=\"compression-options\">\r\n            <div class=\"compression-option\" data-option=\"removeMetadata\">Supprimer les m\u00e9tadonn\u00e9es<\/div>\r\n            <div class=\"compression-option\" data-option=\"deduplicateResources\">D\u00e9dupliquer les ressources<\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"progress-bar\">\r\n          <div class=\"progress\" id=\"progress\"><\/div>\r\n        <\/div>\r\n        <button id=\"compress-btn\" class=\"btn\" disabled>Compresser les PDF<\/button>\r\n        <div class=\"savings-info\" id=\"savings-info\"><\/div>\r\n      <\/div>\r\n      <div class=\"panel\">\r\n        <div class=\"section-header\">Pr\u00e9visualisation<\/div>\r\n        <div class=\"preview-container\">\r\n          <div class=\"preview-main\" id=\"preview-main\"><\/div>\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:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf-lib\/1.17.1\/pdf-lib.min.js\"><\/script>\r\n  <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/browser-image-compression@2.0.0\/dist\/browser-image-compression.js\"><\/script>\r\n  <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/downloadjs\/1.4.8\/download.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 fileList = document.getElementById('file-list');\r\n    const compressBtn = document.getElementById('compress-btn');\r\n    const progressBar = document.querySelector('.progress-bar');\r\n    const progress = document.getElementById('progress');\r\n    const previewMain = document.getElementById('preview-main');\r\n    const compressionSlider = document.getElementById('compression-slider');\r\n    const compressionOptions = document.querySelectorAll('.compression-option');\r\n    const savingsInfo = document.getElementById('savings-info');\r\n\r\n    let files = [];\r\n    let compressionSettings = {\r\n      removeMetadata: false,\r\n      deduplicateResources: false\r\n    };\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    \/\/ Matrix animation\r\n    const canvas = document.getElementById('matrix-canvas');\r\n    const ctx = canvas.getContext('2d');\r\n\r\n    \/\/ Set canvas size\r\n    canvas.width = canvas.offsetWidth;\r\n    canvas.height = canvas.offsetHeight;\r\n\r\n    \/\/ Characters used in the animation\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    \/\/ Array to store the current y-coordinate of each column\r\n    const drops = [];\r\n    for (let i = 0; i < columns; i++) {\r\n      drops[i] = 1;\r\n    }\r\n\r\n    \/\/ Drawing function\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    \/\/ Animation loop\r\n    function animate() {\r\n      draw();\r\n      requestAnimationFrame(animate);\r\n    }\r\n\r\n    animate();\r\n\r\n    \/\/ Resize canvas when window is resized\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 droppedFiles = Array.from(e.dataTransfer.files).filter(file => file.type === 'application\/pdf');\r\n      handleFiles(droppedFiles);\r\n    });\r\n\r\n    fileInput.addEventListener('change', (e) => {\r\n      const selectedFiles = Array.from(e.target.files).filter(file => file.type === 'application\/pdf');\r\n      handleFiles(selectedFiles);\r\n    });\r\n\r\n    async function handleFiles(newFiles) {\r\n      files = [...files, ...newFiles];\r\n      updateFileList();\r\n      updateCompressButton();\r\n      await updatePreview();\r\n    }\r\n\r\n    function updateFileList() {\r\n      fileList.innerHTML = '';\r\n      files.forEach((file, index) => {\r\n        const li = document.createElement('li');\r\n        li.innerHTML = `\r\n          ${file.name} (${formatFileSize(file.size)})\r\n          <button class=\"btn\" onclick=\"removeFile(${index})\">Supprimer<\/button>\r\n        `;\r\n        fileList.appendChild(li);\r\n      });\r\n    }\r\n\r\n    async function removeFile(index) {\r\n      files.splice(index, 1);\r\n      updateFileList();\r\n      updateCompressButton();\r\n      await updatePreview();\r\n    }\r\n\r\n    function updateCompressButton() {\r\n      compressBtn.disabled = files.length === 0;\r\n    }\r\n\r\n    async function updatePreview() {\r\n      previewMain.innerHTML = '';\r\n\r\n      for (let i = 0; i < files.length; i++) {\r\n        const file = files[i];\r\n        const arrayBuffer = await file.arrayBuffer();\r\n        const pdfDoc = await pdfjsLib.getDocument(arrayBuffer).promise;\r\n        const page = await pdfDoc.getPage(1);\r\n\r\n        const scale = 1.5;\r\n        const viewport = page.getViewport({ scale });\r\n\r\n        const previewItem = document.createElement('div');\r\n        previewItem.className = 'preview-item';\r\n\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        const renderContext = {\r\n          canvasContext: context,\r\n          viewport: viewport\r\n        };\r\n\r\n        await page.render(renderContext).promise;\r\n\r\n        const footer = document.createElement('div');\r\n        footer.className = 'preview-item-footer';\r\n        footer.textContent = `${file.name} (${formatFileSize(file.size)})`;\r\n\r\n        previewItem.appendChild(canvas);\r\n        previewItem.appendChild(footer);\r\n        previewMain.appendChild(previewItem);\r\n      }\r\n    }\r\n\r\n    compressionSlider.addEventListener('input', () => {\r\n      \/\/ Update compression level based on slider value\r\n    });\r\n\r\n    compressionOptions.forEach(option => {\r\n      option.addEventListener('click', () => {\r\n        option.classList.toggle('active');\r\n        compressionSettings[option.dataset.option] = option.classList.contains('active');\r\n      });\r\n    });\r\n\r\n    compressBtn.addEventListener('click', async () => {\r\n      if (files.length === 0) return;\r\n\r\n      compressBtn.disabled = true;\r\n      progressBar.style.display = 'block';\r\n\r\n      try {\r\n        const compressionLevel = compressionSlider.value \/ 100;\r\n        const compressedPdfs = [];\r\n        let totalOriginalSize = 0;\r\n        let totalCompressedSize = 0;\r\n\r\n        for (let i = 0; i < files.length; i++) {\r\n          const file = files[i];\r\n          const arrayBuffer = await file.arrayBuffer();\r\n          totalOriginalSize += arrayBuffer.byteLength;\r\n\r\n          const pdfDoc = await PDFLib.PDFDocument.load(arrayBuffer);\r\n\r\n          \/\/ Apply compression settings\r\n          if (compressionSettings.removeMetadata) {\r\n            pdfDoc.setTitle('');\r\n            pdfDoc.setAuthor('');\r\n            pdfDoc.setSubject('');\r\n            pdfDoc.setKeywords([]);\r\n            pdfDoc.setProducer('');\r\n            pdfDoc.setCreator('');\r\n          }\r\n\r\n          if (compressionSettings.deduplicateResources) {\r\n            const pages = pdfDoc.getPages();\r\n            const seenResources = new Map();\r\n            for (const page of pages) {\r\n              const resources = await page.node.Resources();\r\n              for (const [name, dict] of Object.entries(resources.dict)) {\r\n                if (dict instanceof PDFLib.PDFDict) {\r\n                  for (const [key, value] of dict.entries()) {\r\n                    const resourceKey = `${name}:${key}:${value.toString()}`;\r\n                    if (seenResources.has(resourceKey)) {\r\n                      dict.set(PDFLib.PDFName.of(key), seenResources.get(resourceKey));\r\n                    } else {\r\n                      seenResources.set(resourceKey, value);\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n\r\n          \/\/ Save compressed PDF\r\n          const compressedPdfBytes = await pdfDoc.save({\r\n            useObjectStreams: true,\r\n            addDefaultPage: false,\r\n            objectsPerTick: 50,\r\n            updateFieldAppearances: false,\r\n            compress: true,\r\n          });\r\n\r\n          compressedPdfs.push(new Blob([compressedPdfBytes], { type: 'application\/pdf' }));\r\n          totalCompressedSize += compressedPdfBytes.length;\r\n          \r\n          progress.style.width = `${((i + 1) \/ files.length) * 100}%`;\r\n        }\r\n\r\n        const savedSpace = totalOriginalSize - totalCompressedSize;\r\n        const savingsPercentage = (savedSpace \/ totalOriginalSize) * 100;\r\n\r\n        savingsInfo.innerHTML = `\r\n          <p>\u00c9conomie de m\u00e9moire r\u00e9alis\u00e9e : ${formatFileSize(savedSpace)} (${savingsPercentage.toFixed(2)}%)<\/p>\r\n          <p>Taille originale : ${formatFileSize(totalOriginalSize)}<\/p>\r\n          <p>Taille apr\u00e8s compression : ${formatFileSize(totalCompressedSize)}<\/p>\r\n        `;\r\n        savingsInfo.style.display = 'block';\r\n\r\n        \/\/ Download compressed PDFs\r\n        for (let i = 0; i < compressedPdfs.length; i++) {\r\n          const originalName = files[i].name;\r\n          const compressedName = `compressed_${originalName}`;\r\n          download(compressedPdfs[i], compressedName, \"application\/pdf\");\r\n        }\r\n      } catch (error) {\r\n        console.error('Error compressing PDFs:', error);\r\n        alert('Une erreur est survenue lors de la compression des PDFs. Veuillez r\u00e9essayer.');\r\n      } finally {\r\n        compressBtn.disabled = false;\r\n        progressBar.style.display = 'none';\r\n        progress.style.width = '0%';\r\n      }\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  <\/script>\r\n<\/body>\r\n<\/html>\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 Fusion &#8211; Compression Optimis\u00e9e avec Options Fonctionnelles PDF Fusion &#8211; Compression Optimis\u00e9e Compressez vos fichiers PDF tout en pr\u00e9servant leur lisibilit\u00e9 Fichiers PDF Glissez et d\u00e9posez vos fichiers PDF ici S\u00e9lectionner Niveau de compression : Supprimer les m\u00e9tadonn\u00e9es D\u00e9dupliquer les ressources Compresser les PDF Pr\u00e9visualisation<\/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-73","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>PDF Compression Optimis\u00e9e - Pacific PDF Webtools<\/title>\n<meta name=\"description\" content=\"Compressez vos fichiers PDF tout en pr\u00e9servant leur qualit\u00e9. Utilisez des options : suppression des m\u00e9tadonn\u00e9es \/ d\u00e9duplication des ressources\" \/>\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\/pdf-compression-optimisee\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PDF Compression Optimis\u00e9e - Pacific PDF Webtools\" \/>\n<meta property=\"og:description\" content=\"Compressez vos fichiers PDF tout en pr\u00e9servant leur qualit\u00e9. Utilisez des options : suppression des m\u00e9tadonn\u00e9es \/ d\u00e9duplication des ressources\" \/>\n<meta property=\"og:url\" content=\"https:\/\/pacific-webtools.com\/pdf\/pdf-compression-optimisee\/\" \/>\n<meta property=\"og:site_name\" content=\"Pacific PDF Webtools\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-07T16:35:15+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\/pdf-compression-optimisee\/\",\"url\":\"https:\/\/pacific-webtools.com\/pdf\/pdf-compression-optimisee\/\",\"name\":\"PDF Compression Optimis\u00e9e - Pacific PDF Webtools\",\"isPartOf\":{\"@id\":\"https:\/\/pacific-webtools.com\/pdf\/#website\"},\"datePublished\":\"2024-09-07T16:31:51+00:00\",\"dateModified\":\"2024-09-07T16:35:15+00:00\",\"description\":\"Compressez vos fichiers PDF tout en pr\u00e9servant leur qualit\u00e9. Utilisez des options : suppression des m\u00e9tadonn\u00e9es \/ d\u00e9duplication des ressources\",\"breadcrumb\":{\"@id\":\"https:\/\/pacific-webtools.com\/pdf\/pdf-compression-optimisee\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/pacific-webtools.com\/pdf\/pdf-compression-optimisee\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/pacific-webtools.com\/pdf\/pdf-compression-optimisee\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/pacific-webtools.com\/pdf\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PDF Compression Optimis\u00e9e\"}]},{\"@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":"PDF Compression Optimis\u00e9e - Pacific PDF Webtools","description":"Compressez vos fichiers PDF tout en pr\u00e9servant leur qualit\u00e9. Utilisez des options : suppression des m\u00e9tadonn\u00e9es \/ d\u00e9duplication des ressources","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\/pdf-compression-optimisee\/","og_locale":"fr_FR","og_type":"article","og_title":"PDF Compression Optimis\u00e9e - Pacific PDF Webtools","og_description":"Compressez vos fichiers PDF tout en pr\u00e9servant leur qualit\u00e9. Utilisez des options : suppression des m\u00e9tadonn\u00e9es \/ d\u00e9duplication des ressources","og_url":"https:\/\/pacific-webtools.com\/pdf\/pdf-compression-optimisee\/","og_site_name":"Pacific PDF Webtools","article_modified_time":"2024-09-07T16:35:15+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\/pdf-compression-optimisee\/","url":"https:\/\/pacific-webtools.com\/pdf\/pdf-compression-optimisee\/","name":"PDF Compression Optimis\u00e9e - Pacific PDF Webtools","isPartOf":{"@id":"https:\/\/pacific-webtools.com\/pdf\/#website"},"datePublished":"2024-09-07T16:31:51+00:00","dateModified":"2024-09-07T16:35:15+00:00","description":"Compressez vos fichiers PDF tout en pr\u00e9servant leur qualit\u00e9. Utilisez des options : suppression des m\u00e9tadonn\u00e9es \/ d\u00e9duplication des ressources","breadcrumb":{"@id":"https:\/\/pacific-webtools.com\/pdf\/pdf-compression-optimisee\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/pacific-webtools.com\/pdf\/pdf-compression-optimisee\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/pacific-webtools.com\/pdf\/pdf-compression-optimisee\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/pacific-webtools.com\/pdf\/"},{"@type":"ListItem","position":2,"name":"PDF Compression Optimis\u00e9e"}]},{"@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\/73"}],"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=73"}],"version-history":[{"count":7,"href":"https:\/\/pacific-webtools.com\/pdf\/wp-json\/wp\/v2\/pages\/73\/revisions"}],"predecessor-version":[{"id":80,"href":"https:\/\/pacific-webtools.com\/pdf\/wp-json\/wp\/v2\/pages\/73\/revisions\/80"}],"wp:attachment":[{"href":"https:\/\/pacific-webtools.com\/pdf\/wp-json\/wp\/v2\/media?parent=73"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}