{"id":647,"date":"2026-01-27T10:47:36","date_gmt":"2026-01-27T06:47:36","guid":{"rendered":"https:\/\/www.arparun.re\/?page_id=647"},"modified":"2026-01-27T11:16:31","modified_gmt":"2026-01-27T07:16:31","slug":"img2pdf","status":"publish","type":"page","link":"https:\/\/www.arparun.re\/index.php\/img2pdf\/","title":{"rendered":"img2pdf"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"fr\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Convertisseur d&rsquo;Images en PDF<\/title>\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js\"><\/script>\n<\/head>\n<body>\n    <div class=\"container\">\n        <h1>\ud83d\udcc4 Convertisseur d&rsquo;Images en PDF<\/h1>\n        \n        <div class=\"info-box\">\n            <p>\ud83d\udca1 <strong>Instructions :<\/strong> Glissez-d\u00e9posez vos images ou cliquez pour les s\u00e9lectionner. R\u00e9organisez-les en les faisant glisser, puis cliquez sur \u00ab\u00a0G\u00e9n\u00e9rer PDF\u00a0\u00bb.<\/p>\n        <\/div>\n\n        <div class=\"sort-controls\" id=\"sortControls\" style=\"display: none;\">\n            <span class=\"sort-label\">\ud83d\udcca Trier par :<\/span>\n            <button class=\"sort-btn\" data-sort=\"manual\" onclick=\"setSortMethod('manual')\">\u270b Manuel<\/button>\n            <button class=\"sort-btn active\" data-sort=\"upload\" onclick=\"setSortMethod('upload')\">\u2b06\ufe0f Ordre d&rsquo;ajout<\/button>\n            <button class=\"sort-btn\" data-sort=\"name\" onclick=\"setSortMethod('name')\">\ud83d\udd24 Nom<\/button>\n            <button class=\"sort-btn\" data-sort=\"date\" onclick=\"setSortMethod('date')\">\ud83d\udcc5 Date de cr\u00e9ation<\/button>\n            <button class=\"sort-btn\" data-sort=\"size\" onclick=\"setSortMethod('size')\">\ud83d\udccf Taille<\/button>\n            <button class=\"sort-order-btn\" id=\"sortOrderBtn\" onclick=\"toggleSortOrder()\" title=\"Inverser l'ordre\">\u21c5<\/button>\n        <\/div>\n\n        <div class=\"upload-zone\" id=\"uploadZone\">\n            <div class=\"upload-icon\">\ud83d\udcc1<\/div>\n            <div class=\"upload-text\">Glissez-d\u00e9posez vos images ici<\/div>\n            <div class=\"upload-text\">ou<\/div>\n            <button class=\"btn\" onclick=\"document.getElementById('fileInput').click()\">S\u00e9lectionner des fichiers<\/button>\n            <input type=\"file\" id=\"fileInput\" class=\"file-input\" multiple accept=\"image\/*\">\n        <\/div>\n\n        <div id=\"imagesContainer\"><\/div>\n\n        <div class=\"controls\">\n            <button class=\"btn\" id=\"clearBtn\" onclick=\"clearAllImages()\">\ud83d\uddd1\ufe0f Tout effacer<\/button>\n            <button class=\"btn\" id=\"generateBtn\" onclick=\"generatePDF()\">\ud83d\udce5 G\u00e9n\u00e9rer PDF<\/button>\n        <\/div>\n    <\/div>\n\n    <script>\n        let images = [];\n        let draggedElement = null;\n        let currentSortMethod = 'upload';\n        let sortAscending = true;\n\n        const uploadZone = document.getElementById('uploadZone');\n        const fileInput = document.getElementById('fileInput');\n        const imagesContainer = document.getElementById('imagesContainer');\n        const generateBtn = document.getElementById('generateBtn');\n        const clearBtn = document.getElementById('clearBtn');\n        const sortControls = document.getElementById('sortControls');\n\n        \/\/ Gestion du glisser-d\u00e9poser pour l'upload\n        uploadZone.addEventListener('dragover', (e) => {\n            e.preventDefault();\n            uploadZone.classList.add('dragover');\n        });\n\n        uploadZone.addEventListener('dragleave', () => {\n            uploadZone.classList.remove('dragover');\n        });\n\n        uploadZone.addEventListener('drop', (e) => {\n            e.preventDefault();\n            uploadZone.classList.remove('dragover');\n            handleFiles(e.dataTransfer.files);\n        });\n\n        uploadZone.addEventListener('click', (e) => {\n            if (e.target === uploadZone || e.target.closest('.upload-zone')) {\n                fileInput.click();\n            }\n        });\n\n        fileInput.addEventListener('change', (e) => {\n            handleFiles(e.target.files);\n        });\n\n        function handleFiles(files) {\n            const fileArray = Array.from(files);\n            \n            const promises = fileArray.map(file => {\n                return new Promise((resolve) => {\n                    if (file.type.startsWith('image\/')) {\n                        const reader = new FileReader();\n                        reader.onload = (e) => {\n                            const img = new Image();\n                            img.onload = () => {\n                                images.push({\n                                    data: e.target.result,\n                                    name: file.name,\n                                    id: Date.now() + Math.random(),\n                                    uploadOrder: images.length,\n                                    lastModified: file.lastModified,\n                                    size: file.size,\n                                    width: img.width,\n                                    height: img.height\n                                });\n                                resolve();\n                            };\n                            img.src = e.target.result;\n                        };\n                        reader.readAsDataURL(file);\n                    } else {\n                        resolve();\n                    }\n                });\n            });\n\n            Promise.all(promises).then(() => {\n                sortImages();\n                renderImages();\n            });\n        }\n\n        function setSortMethod(method) {\n            currentSortMethod = method;\n            \n            \/\/ Mettre \u00e0 jour les boutons actifs\n            document.querySelectorAll('.sort-btn').forEach(btn => {\n                btn.classList.remove('active');\n            });\n            document.querySelector(`[data-sort=\"${method}\"]`).classList.add('active');\n            \n            \/\/ Si on passe en mode manuel, d\u00e9sactiver le drag\n            if (method === 'manual') {\n                \/\/ Le tri manuel est g\u00e9r\u00e9 par le drag and drop\n                renderImages();\n            } else {\n                sortImages();\n                renderImages();\n            }\n        }\n\n        function toggleSortOrder() {\n            sortAscending = !sortAscending;\n            const btn = document.getElementById('sortOrderBtn');\n            btn.style.transform = sortAscending ? 'rotate(0deg)' : 'rotate(180deg)';\n            \n            if (currentSortMethod !== 'manual') {\n                sortImages();\n                renderImages();\n            }\n        }\n\n        function sortImages() {\n            if (currentSortMethod === 'manual') {\n                return; \/\/ Ne pas trier en mode manuel\n            }\n\n            images.sort((a, b) => {\n                let comparison = 0;\n                \n                switch(currentSortMethod) {\n                    case 'upload':\n                        comparison = a.uploadOrder - b.uploadOrder;\n                        break;\n                    case 'name':\n                        comparison = a.name.localeCompare(b.name);\n                        break;\n                    case 'date':\n                        comparison = a.lastModified - b.lastModified;\n                        break;\n                    case 'size':\n                        comparison = a.size - b.size;\n                        break;\n                }\n                \n                return sortAscending ? comparison : -comparison;\n            });\n        }\n\n        function formatFileSize(bytes) {\n            if (bytes < 1024) return bytes + ' B';\n            if (bytes < 1024 * 1024) return (bytes \/ 1024).toFixed(1) + ' KB';\n            return (bytes \/ (1024 * 1024)).toFixed(1) + ' MB';\n        }\n\n        function formatDate(timestamp) {\n            const date = new Date(timestamp);\n            return date.toLocaleDateString('fr-FR') + ' ' + date.toLocaleTimeString('fr-FR', {hour: '2-digit', minute: '2-digit'});\n        }\n\n        function renderImages() {\n            if (images.length === 0) {\n                imagesContainer.innerHTML = `\n                    <div class=\"empty-state\">\n                        <div class=\"empty-state-icon\">\ud83d\udced<\/div>\n                        <p>Aucune image charg\u00e9e<\/p>\n                    <\/div>\n                `;\n                generateBtn.disabled = true;\n                clearBtn.disabled = true;\n                sortControls.style.display = 'none';\n                return;\n            }\n\n            generateBtn.disabled = false;\n            clearBtn.disabled = false;\n            sortControls.style.display = 'flex';\n\n            imagesContainer.innerHTML = '<div class=\"images-grid\" id=\"imagesGrid\"><\/div>';\n            const grid = document.getElementById('imagesGrid');\n\n            images.forEach((image, index) => {\n                const card = document.createElement('div');\n                card.className = 'image-card';\n                card.draggable = currentSortMethod === 'manual';\n                card.dataset.index = index;\n                card.style.cursor = currentSortMethod === 'manual' ? 'move' : 'default';\n\n                card.innerHTML = `\n                    <button class=\"delete-btn\" onclick=\"deleteImage(${index})\" title=\"Supprimer\">\u00d7<\/button>\n                    <img decoding=\"async\" src=\"${image.data}\" alt=\"${image.name}\">\n                    <div class=\"image-info\">\n                        <div class=\"image-name\" title=\"${image.name}\">${image.name}<\/div>\n                        <div class=\"image-metadata\">\n                            \ud83d\udcc5 ${formatDate(image.lastModified)} | \ud83d\udccf ${formatFileSize(image.size)}\n                        <\/div>\n                        <div class=\"image-metadata\">\n                            \ud83d\uddbc\ufe0f ${image.width} \u00d7 ${image.height} px\n                        <\/div>\n                        <span class=\"image-order\">Position ${index + 1}<\/span>\n                    <\/div>\n                `;\n\n                \/\/ Gestion du drag and drop pour r\u00e9organiser (uniquement en mode manuel)\n                if (currentSortMethod === 'manual') {\n                    card.addEventListener('dragstart', handleDragStart);\n                    card.addEventListener('dragover', handleDragOver);\n                    card.addEventListener('drop', handleDrop);\n                    card.addEventListener('dragend', handleDragEnd);\n                }\n\n                grid.appendChild(card);\n            });\n        }\n\n        function handleDragStart(e) {\n            draggedElement = this;\n            this.classList.add('dragging');\n            e.dataTransfer.effectAllowed = 'move';\n            e.dataTransfer.setData('text\/html', this.innerHTML);\n        }\n\n        function handleDragOver(e) {\n            if (e.preventDefault) {\n                e.preventDefault();\n            }\n            e.dataTransfer.dropEffect = 'move';\n            return false;\n        }\n\n        function handleDrop(e) {\n            if (e.stopPropagation) {\n                e.stopPropagation();\n            }\n\n            if (draggedElement !== this) {\n                const draggedIndex = parseInt(draggedElement.dataset.index);\n                const targetIndex = parseInt(this.dataset.index);\n\n                \/\/ R\u00e9organiser le tableau\n                const draggedItem = images[draggedIndex];\n                images.splice(draggedIndex, 1);\n                images.splice(targetIndex, 0, draggedItem);\n\n                renderImages();\n            }\n\n            return false;\n        }\n\n        function handleDragEnd(e) {\n            this.classList.remove('dragging');\n        }\n\n        function deleteImage(index) {\n            images.splice(index, 1);\n            renderImages();\n        }\n\n        function clearAllImages() {\n            if (confirm('\u00cates-vous s\u00fbr de vouloir supprimer toutes les images ?')) {\n                images = [];\n                renderImages();\n                fileInput.value = '';\n            }\n        }\n\n        async function generatePDF() {\n            if (images.length === 0) {\n                alert('Veuillez ajouter au moins une image.');\n                return;\n            }\n\n            generateBtn.disabled = true;\n            generateBtn.textContent = '\u23f3 G\u00e9n\u00e9ration en cours...';\n\n            try {\n                const { jsPDF } = window.jspdf;\n                const pdf = new jsPDF('p', 'mm', 'a4');\n                const pageWidth = pdf.internal.pageSize.getWidth();\n                const pageHeight = pdf.internal.pageSize.getHeight();\n                const margin = 10;\n\n                for (let i = 0; i < images.length; i++) {\n                    if (i > 0) {\n                        pdf.addPage();\n                    }\n\n                    const img = new Image();\n                    img.src = images[i].data;\n\n                    await new Promise((resolve) => {\n                        img.onload = () => {\n                            const imgWidth = img.width;\n                            const imgHeight = img.height;\n                            const ratio = imgWidth \/ imgHeight;\n\n                            let finalWidth = pageWidth - (margin * 2);\n                            let finalHeight = finalWidth \/ ratio;\n\n                            \/\/ Si l'image est trop haute, on ajuste\n                            if (finalHeight > pageHeight - (margin * 2)) {\n                                finalHeight = pageHeight - (margin * 2);\n                                finalWidth = finalHeight * ratio;\n                            }\n\n                            \/\/ Centrer l'image\n                            const x = (pageWidth - finalWidth) \/ 2;\n                            const y = (pageHeight - finalHeight) \/ 2;\n\n                            pdf.addImage(images[i].data, 'JPEG', x, y, finalWidth, finalHeight);\n                            resolve();\n                        };\n                    });\n                }\n\n                pdf.save('images-converties.pdf');\n                alert('\u2705 PDF g\u00e9n\u00e9r\u00e9 avec succ\u00e8s !');\n            } catch (error) {\n                console.error('Erreur lors de la g\u00e9n\u00e9ration du PDF:', error);\n                alert('\u274c Erreur lors de la g\u00e9n\u00e9ration du PDF. Veuillez r\u00e9essayer.');\n            } finally {\n                generateBtn.disabled = false;\n                generateBtn.textContent = '\ud83d\udce5 G\u00e9n\u00e9rer PDF';\n            }\n        }\n\n        \/\/ Initialisation\n        renderImages();\n    <\/script>\n<\/body>\n<\/html>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Si l&rsquo;application vous \u00e0 \u00e9t\u00e9 utile, Offrer moi une bierre !! C&rsquo;est sympa et \u00e7a m&rsquo;aide \u00e0 maintenir les serveurs ! \ud83d\ude00<\/p>\n\n\n\n<div style=\"display: flex; justify-content: center; align-items: center;\">\n\n\n<script async\n  src=\"https:\/\/js.stripe.com\/v3\/buy-button.js\">\n<\/script>\n\n<stripe-buy-button\n  buy-button-id=\"buy_btn_1RXGoOAOEp7xPNKdvvgCbt2V\"\n  publishable-key=\"pk_live_51QQXMmAOEp7xPNKdUhcTaBFsUvieXz97t7VbgmEfSC8LzRxoqqoJOM4rrwpFnVsRETCnWpXBED5oqyqCCti50YC600OrlOgLNg\"\n>\n<\/stripe-buy-button>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Convertisseur d&rsquo;Images en PDF \ud83d\udcc4 Convertisseur d&rsquo;Images en PDF \ud83d\udca1 Instructions : Glissez-d\u00e9posez vos images ou cliquez pour les s\u00e9lectionner. R\u00e9organisez-les en les faisant glisser, puis cliquez sur \u00ab\u00a0G\u00e9n\u00e9rer PDF\u00a0\u00bb. \ud83d\udcca Trier par : \u270b Manuel \u2b06\ufe0f Ordre d&rsquo;ajout \ud83d\udd24 Nom \ud83d\udcc5 Date de cr\u00e9ation \ud83d\udccf Taille \u21c5 \ud83d\udcc1 Glissez-d\u00e9posez<a href=\"https:\/\/www.arparun.re\/index.php\/img2pdf\/\" class=\"read-more\">Read More &#8230;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-647","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>img2pdf - arparun - Informatique Reunion<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.arparun.re\/index.php\/img2pdf\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"img2pdf - arparun - Informatique Reunion\" \/>\n<meta property=\"og:description\" content=\"Convertisseur d&rsquo;Images en PDF \ud83d\udcc4 Convertisseur d&rsquo;Images en PDF \ud83d\udca1 Instructions : Glissez-d\u00e9posez vos images ou cliquez pour les s\u00e9lectionner. R\u00e9organisez-les en les faisant glisser, puis cliquez sur \u00ab\u00a0G\u00e9n\u00e9rer PDF\u00a0\u00bb. \ud83d\udcca Trier par : \u270b Manuel \u2b06\ufe0f Ordre d&rsquo;ajout \ud83d\udd24 Nom \ud83d\udcc5 Date de cr\u00e9ation \ud83d\udccf Taille \u21c5 \ud83d\udcc1 Glissez-d\u00e9posezRead More ...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.arparun.re\/index.php\/img2pdf\/\" \/>\n<meta property=\"og:site_name\" content=\"arparun - Informatique Reunion\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-27T07:16:31+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:\/\/www.arparun.re\/index.php\/img2pdf\/\",\"url\":\"https:\/\/www.arparun.re\/index.php\/img2pdf\/\",\"name\":\"img2pdf - arparun - Informatique Reunion\",\"isPartOf\":{\"@id\":\"https:\/\/www.arparun.re\/#website\"},\"datePublished\":\"2026-01-27T06:47:36+00:00\",\"dateModified\":\"2026-01-27T07:16:31+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.arparun.re\/index.php\/img2pdf\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.arparun.re\/index.php\/img2pdf\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.arparun.re\/index.php\/img2pdf\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.arparun.re\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"img2pdf\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.arparun.re\/#website\",\"url\":\"https:\/\/www.arparun.re\/\",\"name\":\"arparun - Informatique Reunion\",\"description\":\"Syst\u00e8mes, R\u00e9seaux et S\u00e9curit\u00e9\",\"publisher\":{\"@id\":\"https:\/\/www.arparun.re\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.arparun.re\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.arparun.re\/#organization\",\"name\":\"Arparun\",\"url\":\"https:\/\/www.arparun.re\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/www.arparun.re\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.arparun.re\/wp-content\/uploads\/2021\/02\/cropped-site.png\",\"contentUrl\":\"https:\/\/www.arparun.re\/wp-content\/uploads\/2021\/02\/cropped-site.png\",\"width\":512,\"height\":512,\"caption\":\"Arparun\"},\"image\":{\"@id\":\"https:\/\/www.arparun.re\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"img2pdf - arparun - Informatique Reunion","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:\/\/www.arparun.re\/index.php\/img2pdf\/","og_locale":"fr_FR","og_type":"article","og_title":"img2pdf - arparun - Informatique Reunion","og_description":"Convertisseur d&rsquo;Images en PDF \ud83d\udcc4 Convertisseur d&rsquo;Images en PDF \ud83d\udca1 Instructions : Glissez-d\u00e9posez vos images ou cliquez pour les s\u00e9lectionner. R\u00e9organisez-les en les faisant glisser, puis cliquez sur \u00ab\u00a0G\u00e9n\u00e9rer PDF\u00a0\u00bb. \ud83d\udcca Trier par : \u270b Manuel \u2b06\ufe0f Ordre d&rsquo;ajout \ud83d\udd24 Nom \ud83d\udcc5 Date de cr\u00e9ation \ud83d\udccf Taille \u21c5 \ud83d\udcc1 Glissez-d\u00e9posezRead More ...","og_url":"https:\/\/www.arparun.re\/index.php\/img2pdf\/","og_site_name":"arparun - Informatique Reunion","article_modified_time":"2026-01-27T07:16:31+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:\/\/www.arparun.re\/index.php\/img2pdf\/","url":"https:\/\/www.arparun.re\/index.php\/img2pdf\/","name":"img2pdf - arparun - Informatique Reunion","isPartOf":{"@id":"https:\/\/www.arparun.re\/#website"},"datePublished":"2026-01-27T06:47:36+00:00","dateModified":"2026-01-27T07:16:31+00:00","breadcrumb":{"@id":"https:\/\/www.arparun.re\/index.php\/img2pdf\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.arparun.re\/index.php\/img2pdf\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.arparun.re\/index.php\/img2pdf\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.arparun.re\/"},{"@type":"ListItem","position":2,"name":"img2pdf"}]},{"@type":"WebSite","@id":"https:\/\/www.arparun.re\/#website","url":"https:\/\/www.arparun.re\/","name":"arparun - Informatique Reunion","description":"Syst\u00e8mes, R\u00e9seaux et S\u00e9curit\u00e9","publisher":{"@id":"https:\/\/www.arparun.re\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.arparun.re\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/www.arparun.re\/#organization","name":"Arparun","url":"https:\/\/www.arparun.re\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.arparun.re\/#\/schema\/logo\/image\/","url":"https:\/\/www.arparun.re\/wp-content\/uploads\/2021\/02\/cropped-site.png","contentUrl":"https:\/\/www.arparun.re\/wp-content\/uploads\/2021\/02\/cropped-site.png","width":512,"height":512,"caption":"Arparun"},"image":{"@id":"https:\/\/www.arparun.re\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.arparun.re\/index.php\/wp-json\/wp\/v2\/pages\/647","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.arparun.re\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.arparun.re\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.arparun.re\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.arparun.re\/index.php\/wp-json\/wp\/v2\/comments?post=647"}],"version-history":[{"count":4,"href":"https:\/\/www.arparun.re\/index.php\/wp-json\/wp\/v2\/pages\/647\/revisions"}],"predecessor-version":[{"id":663,"href":"https:\/\/www.arparun.re\/index.php\/wp-json\/wp\/v2\/pages\/647\/revisions\/663"}],"wp:attachment":[{"href":"https:\/\/www.arparun.re\/index.php\/wp-json\/wp\/v2\/media?parent=647"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}