{"id":1341,"date":"2025-07-06T07:33:37","date_gmt":"2025-07-06T07:33:37","guid":{"rendered":"https:\/\/polisecuador.org\/?page_id=1341"},"modified":"2025-08-06T10:27:58","modified_gmt":"2025-08-06T10:27:58","slug":"generador-de-documentos","status":"publish","type":"page","link":"https:\/\/polisecuador.org\/en\/plog\/generador-de-documentos\/","title":{"rendered":"Generador de Documentos"},"content":{"rendered":"<p>[et_pb_section fb_built=\u00bb1&#8243; _builder_version=\u00bb4.16&#8243; custom_padding=\u00bb50px|||||\u00bb da_disable_devices=\u00bboff|off|off\u00bb global_colors_info=\u00bb{}\u00bb da_is_popup=\u00bboff\u00bb da_exit_intent=\u00bboff\u00bb da_has_close=\u00bbon\u00bb da_alt_close=\u00bboff\u00bb da_dark_close=\u00bboff\u00bb da_not_modal=\u00bbon\u00bb da_is_singular=\u00bboff\u00bb da_with_loader=\u00bboff\u00bb da_has_shadow=\u00bbon\u00bb][et_pb_row _builder_version=\u00bb4.27.4&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_column type=\u00bb4_4&#8243; _builder_version=\u00bb4.27.4&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_code _builder_version=\u00bb4.27.4&#8243; _module_preset=\u00bbdefault\u00bb hover_enabled=\u00bb0&#8243; global_colors_info=\u00bb{}\u00bb sticky_enabled=\u00bb0&#8243;]<!-- Contenedor principal para aislar el generador de cartas --><!-- [et_pb_line_break_holder] --><\/p>\n<div id=\"carta-generator-container\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <!-- 1. LIBRER\u00cdAS EXTERNAS (Solo para generar el PDF) --><!-- [et_pb_line_break_holder] -->    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js\"><\/script><!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    <!-- 2. ESTILOS CSS --><!-- [et_pb_line_break_holder] -->    <\/p>\n<style><!-- [et_pb_line_break_holder] -->        \/* Importar la fuente Montserrat de Google Fonts *\/<!-- [et_pb_line_break_holder] -->        @import url('https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@400;700&display=swap');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* Estilos base para el contenedor del generador *\/<!-- [et_pb_line_break_holder] -->        #carta-generator-container {<!-- [et_pb_line_break_holder] -->            font-family: 'Montserrat', sans-serif;<!-- [et_pb_line_break_holder] -->            color: #333;<!-- [et_pb_line_break_holder] -->            background-color: #ffffff;<!-- [et_pb_line_break_holder] -->            padding: 1.5rem;<!-- [et_pb_line_break_holder] -->            border: 1px solid #e2e8f0;<!-- [et_pb_line_break_holder] -->            border-radius: 8px;<!-- [et_pb_line_break_holder] -->            position: relative; \/* Necesario para el overlay *\/<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        #carta-generator-container .control-group {<!-- [et_pb_line_break_holder] -->            margin-bottom: 1.5rem;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        #carta-generator-container h1, #carta-generator-container h2 {<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->            color: #2d3748;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        #carta-generator-container h1 { font-size: 1.5rem; margin-bottom: 1.5rem; }<!-- [et_pb_line_break_holder] -->        #carta-generator-container h2 { font-size: 1.125rem; margin-bottom: 0.75rem; }<!-- [et_pb_line_break_holder] -->        <!-- [et_pb_line_break_holder] -->        #carta-generator-container label {<!-- [et_pb_line_break_holder] -->            display: block;<!-- [et_pb_line_break_holder] -->            font-weight: 600;<!-- [et_pb_line_break_holder] -->            margin-bottom: 0.5rem;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        #carta-generator-container select,<!-- [et_pb_line_break_holder] -->        #carta-generator-container input[type=\"text\"] {<!-- [et_pb_line_break_holder] -->             width: 100%;<!-- [et_pb_line_break_holder] -->             padding: 0.75rem;<!-- [et_pb_line_break_holder] -->             border: 1px solid #cbd5e0;<!-- [et_pb_line_break_holder] -->             border-radius: 0.375rem;<!-- [et_pb_line_break_holder] -->             box-sizing: border-box;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        <!-- [et_pb_line_break_holder] -->        \/* --- ESTILOS PARA EL EDITOR DE TEXTO --- *\/<!-- [et_pb_line_break_holder] -->        #carta-generator-container .editor-toolbar {<!-- [et_pb_line_break_holder] -->            border: 1px solid #cbd5e0;<!-- [et_pb_line_break_holder] -->            border-bottom: none;<!-- [et_pb_line_break_holder] -->            border-radius: 6px 6px 0 0;<!-- [et_pb_line_break_holder] -->            padding: 8px;<!-- [et_pb_line_break_holder] -->            background-color: #f8fafc;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        #carta-generator-container .editor-toolbar button {<!-- [et_pb_line_break_holder] -->            font-family: sans-serif;<!-- [et_pb_line_break_holder] -->            font-weight: bold;<!-- [et_pb_line_break_holder] -->            width: 35px;<!-- [et_pb_line_break_holder] -->            height: 30px;<!-- [et_pb_line_break_holder] -->            border: 1px solid transparent;<!-- [et_pb_line_break_holder] -->            background-color: transparent;<!-- [et_pb_line_break_holder] -->            cursor: pointer;<!-- [et_pb_line_break_holder] -->            border-radius: 4px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        #carta-generator-container .editor-toolbar button:hover {<!-- [et_pb_line_break_holder] -->            background-color: #e2e8f0;<!-- [et_pb_line_break_holder] -->            border-color: #cbd5e0;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        #carta-generator-container #letter-editor {<!-- [et_pb_line_break_holder] -->            border: 1px solid #cbd5e0;<!-- [et_pb_line_break_holder] -->            border-radius: 0 0 6px 6px;<!-- [et_pb_line_break_holder] -->            padding: 1rem;<!-- [et_pb_line_break_holder] -->            min-height: 250px;<!-- [et_pb_line_break_holder] -->            outline: none;<!-- [et_pb_line_break_holder] -->            line-height: 1.6;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        #carta-generator-container #letter-editor:focus {<!-- [et_pb_line_break_holder] -->            border-color: #a51e1e;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        \/* --- FIN ESTILOS EDITOR --- *\/<!-- [et_pb_line_break_holder] -->        <!-- [et_pb_line_break_holder] -->        \/* --- ESTILOS PARA EL CONTADOR DE CARACTERES --- *\/<!-- [et_pb_line_break_holder] -->        #carta-generator-container #char-counter {<!-- [et_pb_line_break_holder] -->            text-align: right;<!-- [et_pb_line_break_holder] -->            font-size: 0.875rem;<!-- [et_pb_line_break_holder] -->            color: #64748b;<!-- [et_pb_line_break_holder] -->            margin-top: 0.5rem;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        #carta-generator-container #char-counter.limit-exceeded {<!-- [et_pb_line_break_holder] -->            color: #dc2626;<!-- [et_pb_line_break_holder] -->            font-weight: bold;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        #carta-generator-container button#download-btn {<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->            background-color: #c52424;<!-- [et_pb_line_break_holder] -->            color: white;<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->            font-size: 1rem;<!-- [et_pb_line_break_holder] -->            padding: 0.8rem 1rem;<!-- [et_pb_line_break_holder] -->            border-radius: 0.5rem;<!-- [et_pb_line_break_holder] -->            border: none;<!-- [et_pb_line_break_holder] -->            cursor: pointer;<!-- [et_pb_line_break_holder] -->            transition: background-color 0.3s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        #carta-generator-container button#download-btn:hover { background-color: #a51e1e; }<!-- [et_pb_line_break_holder] -->        #carta-generator-container button#download-btn:disabled { background-color: #9ca3af; cursor: not-allowed; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* --- ESTILOS PARA EL OVERLAY DE CARGA --- *\/<!-- [et_pb_line_break_holder] -->        .loading-overlay {<!-- [et_pb_line_break_holder] -->            position: absolute;<!-- [et_pb_line_break_holder] -->            top: 0;<!-- [et_pb_line_break_holder] -->            left: 0;<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->            height: 100%;<!-- [et_pb_line_break_holder] -->            background-color: rgba(255, 255, 255, 0.8);<!-- [et_pb_line_break_holder] -->            color: #2d3748;<!-- [et_pb_line_break_holder] -->            display: none; \/* Oculto por defecto *\/<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            font-size: 1.2rem;<!-- [et_pb_line_break_holder] -->            font-weight: bold;<!-- [et_pb_line_break_holder] -->            z-index: 9999;<!-- [et_pb_line_break_holder] -->            border-radius: 8px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    <\/style>\n<p><!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    <!-- 3. ESTRUCTURA HTML DEL FORMULARIO --><!-- [et_pb_line_break_holder] -->    <\/p>\n<h1>Generador de Cartas<\/h1>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"control-group\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<h2>1. Datos del Destinatario<\/h2>\n<p><!-- [et_pb_line_break_holder] -->        <label for=\"title-select\">T\u00edtulo:<\/label><!-- [et_pb_line_break_holder] -->        <select id=\"title-select\"><!-- [et_pb_line_break_holder] --><option>Se\u00f1or<\/option><!-- [et_pb_line_break_holder] --><option>Se\u00f1ora<\/option><!-- [et_pb_line_break_holder] --><option>Se\u00f1orita<\/option><!-- [et_pb_line_break_holder] --><option>Doctor<\/option><!-- [et_pb_line_break_holder] --><option>Doctora<\/option><!-- [et_pb_line_break_holder] --><option>Ingeniero<\/option><!-- [et_pb_line_break_holder] --><option>Ingeniera<\/option><!-- [et_pb_line_break_holder] --><option>Abogado<\/option><!-- [et_pb_line_break_holder] --><option>Abogada<\/option><!-- [et_pb_line_break_holder] --><option>M\u00e1ster<\/option><!-- [et_pb_line_break_holder] --><option>Mag\u00edster<\/option><!-- [et_pb_line_break_holder] --><option>Psic\u00f3logo<\/option><!-- [et_pb_line_break_holder] --><option>Psic\u00f3loga<\/option><!-- [et_pb_line_break_holder] --><option>Licenciado<\/option><!-- [et_pb_line_break_holder] --><option>Licenciada<\/option><!-- [et_pb_line_break_holder] --><option>Arquitecto<\/option><!-- [et_pb_line_break_holder] --><option>Arquitecta<\/option><!-- [et_pb_line_break_holder] --><option>Economista<\/option><!-- [et_pb_line_break_holder] --><option>PhD.<\/option><!-- [et_pb_line_break_holder] -->        <\/select><!-- [et_pb_line_break_holder] -->        <!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->        <label for=\"name-input\">Nombre Completo:<\/label><!-- [et_pb_line_break_holder] -->        <input type=\"text\" id=\"name-input\" placeholder=\"Ej: Ana Cueva\"><!-- [et_pb_line_break_holder] -->        <!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->        <label for=\"institution-input\">Instituci\u00f3n (Opcional):<\/label><!-- [et_pb_line_break_holder] -->        <input type=\"text\" id=\"institution-input\" placeholder=\"Ej: Asociaci\u00f3n de Periodistas Independientes\"><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"control-group\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<h2>2. Cuerpo de la Carta<\/h2>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"editor-toolbar\"><!-- [et_pb_line_break_holder] -->            <button type=\"button\" data-command=\"bold\"><b>B<\/b><\/button><!-- [et_pb_line_break_holder] -->            <button type=\"button\" data-command=\"italic\"><i>I<\/i><\/button><!-- [et_pb_line_break_holder] -->            <button type=\"button\" data-command=\"insertUnorderedList\">\u25cf<\/button><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div id=\"letter-editor\" contenteditable=\"true\"><!-- [et_pb_line_break_holder] -->            <pee>De mi consideraci\u00f3n:<\/pee><pee><!\u2013- [et_pb_br_holder] -\u2013><\/pee><pee>Escriba aqu\u00ed el contenido de la carta&#8230;<\/pee><pee><!\u2013- [et_pb_br_holder] -\u2013><\/pee><pee>Con sentimientos de distinguida consideraci\u00f3n.<\/pee><pee><!\u2013- [et_pb_br_holder] -\u2013><\/pee><pee>Atentamente,<\/pee><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div id=\"char-counter\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"control-group\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<h2>3. Firma<\/h2>\n<p><!-- [et_pb_line_break_holder] -->        <label for=\"signature-select\">Seleccionar firmante:<\/label><!-- [et_pb_line_break_holder] -->        <select id=\"signature-select\"><!-- [et_pb_line_break_holder] --><option value=\"\">&#8212; Sin firma &#8212;<\/option><!-- [et_pb_line_break_holder] --><option value=\"Jerem\u00edas Tama Espinoza||Director General||Polis \u2013 Academia de Formaci\u00f3n Pol\u00edtica||jtama@polisecuador.org\">Jerem\u00edas Tama Espinoza<\/option><!-- [et_pb_line_break_holder] --><option value=\"Mar\u00eda Caridad S\u00e1nchez||Directora Editorial||PLOG \u2013 Plataforma Independiente de Opini\u00f3n||carisan@polisecuador.org\">Mar\u00eda Caridad S\u00e1nchez<\/option><!-- [et_pb_line_break_holder] --><option value=\"Felipe Palacios||Director Administrativo||PLOG \u2013 Plataforma Independiente de Opini\u00f3n ||fpalacios@polisecuador.org\">Felipe Palacios<\/option><!-- [et_pb_line_break_holder] --><option value=\"Sophia Cherres||Editora||PLOG \u2013 PLOG \u2013 Plataforma Independiente de Opini\u00f3n||scherres@polisecuador.org\">Sophia Cherres<\/option><!-- [et_pb_line_break_holder] --><option value=\"Juan Sebasti\u00e1n L\u00f3pez||Editor||PLOG \u2013 PLOG \u2013 Plataforma Independiente de Opini\u00f3n||jslopez@polisecuador.org\">Juan Sebasti\u00e1n L\u00f3pez<\/option><!-- [et_pb_line_break_holder] --><option value=\"Juan Pablo Moscoso Alvarado||Editor||PLOG \u2013 PLOG \u2013 Plataforma Independiente de Opini\u00f3n||jpmoscoso@polisecuador.org\">Juan Pablo Moscoso Alvarado<\/option><!-- [et_pb_line_break_holder] -->        <\/select><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"control-group\"><!-- [et_pb_line_break_holder] -->         <\/p>\n<h2>4. Acciones<\/h2>\n<p><!-- [et_pb_line_break_holder] -->         <button id=\"download-btn\">Descargar PDF<\/button><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"loading-overlay\"><!-- [et_pb_line_break_holder] -->        <span>Generando PDF, por favor espere&#8230;<\/span><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <!-- 4. SCRIPT DE FUNCIONAMIENTO --><!-- [et_pb_line_break_holder] -->    <script><!-- [et_pb_line_break_holder] -->    (function() {<!-- [et_pb_line_break_holder] -->        const editor = document.getElementById('letter-editor');<!-- [et_pb_line_break_holder] -->        const loadingOverlay = document.querySelector('.loading-overlay');<!-- [et_pb_line_break_holder] -->        const charCounter = document.getElementById('char-counter');<!-- [et_pb_line_break_holder] -->        const MAX_CHARS = 7500; \/\/ L\u00edmite de caracteres (aprox. 3 p\u00e1ginas)<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        function updateCharCount() {<!-- [et_pb_line_break_holder] -->            const currentLength = editor.innerText.length;<!-- [et_pb_line_break_holder] -->            charCounter.textContent = `${currentLength} \/ ${MAX_CHARS}`;<!-- [et_pb_line_break_holder] -->            if (currentLength > MAX_CHARS) {<!-- [et_pb_line_break_holder] -->                charCounter.classList.add('limit-exceeded');<!-- [et_pb_line_break_holder] -->            } else {<!-- [et_pb_line_break_holder] -->                charCounter.classList.remove('limit-exceeded');<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        editor.addEventListener('input', updateCharCount);<!-- [et_pb_line_break_holder] -->        updateCharCount();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        editor.addEventListener('paste', function(e) {<!-- [et_pb_line_break_holder] -->            e.preventDefault();<!-- [et_pb_line_break_holder] -->            const text = (e.originalEvent || e).clipboardData.getData('text\/plain');<!-- [et_pb_line_break_holder] -->            document.execCommand('insertText', false, text);<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const toolbar = document.querySelector('.editor-toolbar');<!-- [et_pb_line_break_holder] -->        toolbar.addEventListener('click', function(e) {<!-- [et_pb_line_break_holder] -->            if (e.target.closest('button')) {<!-- [et_pb_line_break_holder] -->                const command = e.target.closest('button').dataset.command;<!-- [et_pb_line_break_holder] -->                if (command) {<!-- [et_pb_line_break_holder] -->                    document.execCommand(command, false, null);<!-- [et_pb_line_break_holder] -->                    editor.focus();<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const downloadBtn = document.getElementById('download-btn');<!-- [et_pb_line_break_holder] -->        downloadBtn.addEventListener('click', async function() {<!-- [et_pb_line_break_holder] -->            if (editor.innerText.length > MAX_CHARS) {<!-- [et_pb_line_break_holder] -->                alert('El texto excede el l\u00edmite de caracteres permitido.');<!-- [et_pb_line_break_holder] -->                return;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            downloadBtn.disabled = true;<!-- [et_pb_line_break_holder] -->            loadingOverlay.style.display = 'flex';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            setTimeout(async () => {<!-- [et_pb_line_break_holder] -->                try {<!-- [et_pb_line_break_holder] -->                    const { jsPDF } = window.jspdf;<!-- [et_pb_line_break_holder] -->                    const pdf = new jsPDF('p', 'mm', 'a4');<!-- [et_pb_line_break_holder] -->                    <!-- [et_pb_line_break_holder] -->                    const FONT_SIZE = 12;<!-- [et_pb_line_break_holder] -->                    const LINE_HEIGHT = 7;<!-- [et_pb_line_break_holder] -->                    const MARGIN_LEFT = 30;<!-- [et_pb_line_break_holder] -->                    const MARGIN_RIGHT = 25;<!-- [et_pb_line_break_holder] -->                    const MARGIN_TOP = 40;<!-- [et_pb_line_break_holder] -->                    const MARGIN_BOTTOM = 20;<!-- [et_pb_line_break_holder] -->                    const contentWidth = pdf.internal.pageSize.getWidth() - MARGIN_LEFT - MARGIN_RIGHT;<!-- [et_pb_line_break_holder] -->                    const backgroundImgUrl = 'https:\/\/polisecuador.org\/wp-content\/uploads\/2025\/07\/hoja-plog-scaled.png';<!-- [et_pb_line_break_holder] -->                    <!-- [et_pb_line_break_holder] -->                    let y = MARGIN_TOP;<!-- [et_pb_line_break_holder] -->                    let pageNumber = 1;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    const addPageIfNeeded = (spaceNeeded) => {<!-- [et_pb_line_break_holder] -->                        if (y + spaceNeeded > pdf.internal.pageSize.getHeight() - MARGIN_BOTTOM) {<!-- [et_pb_line_break_holder] -->                            pdf.addPage();<!-- [et_pb_line_break_holder] -->                            pageNumber++;<!-- [et_pb_line_break_holder] -->                            pdf.addImage(backgroundImgUrl, 'JPEG', 0, 0, pdf.internal.pageSize.getWidth(), pdf.internal.pageSize.getHeight());<!-- [et_pb_line_break_holder] -->                            y = MARGIN_TOP;<!-- [et_pb_line_break_holder] -->                            return true;<!-- [et_pb_line_break_holder] -->                        }<!-- [et_pb_line_break_holder] -->                        return false;<!-- [et_pb_line_break_holder] -->                    };<!-- [et_pb_line_break_holder] -->                    <!-- [et_pb_line_break_holder] -->                    pdf.addImage(backgroundImgUrl, 'JPEG', 0, 0, pdf.internal.pageSize.getWidth(), pdf.internal.pageSize.getHeight());<!-- [et_pb_line_break_holder] -->                    pdf.setFont('times', 'normal'); <!-- [et_pb_line_break_holder] -->                    pdf.setFontSize(FONT_SIZE);<!-- [et_pb_line_break_holder] -->                    pdf.setTextColor(0, 0, 0);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    const title = document.getElementById('title-select').value;<!-- [et_pb_line_break_holder] -->                    const name = document.getElementById('name-input').value;<!-- [et_pb_line_break_holder] -->                    const institution = document.getElementById('institution-input').value;<!-- [et_pb_line_break_holder] -->                    const date = new Date();<!-- [et_pb_line_break_holder] -->                    const options = { year: 'numeric', month: 'long', day: 'numeric' };<!-- [et_pb_line_break_holder] -->                    const formattedDate = `Cuenca, ${date.toLocaleDateString('es-EC', options)}`;<!-- [et_pb_line_break_holder] -->                    <!-- [et_pb_line_break_holder] -->                    pdf.setFont('times', 'bold');<!-- [et_pb_line_break_holder] -->                    pdf.text(title, MARGIN_LEFT, y);<!-- [et_pb_line_break_holder] -->                    y += LINE_HEIGHT;<!-- [et_pb_line_break_holder] -->                    pdf.text(name, MARGIN_LEFT, y);<!-- [et_pb_line_break_holder] -->                    y += LINE_HEIGHT;<!-- [et_pb_line_break_holder] -->                    if (institution) {<!-- [et_pb_line_break_holder] -->                        pdf.text(institution, MARGIN_LEFT, y);<!-- [et_pb_line_break_holder] -->                        y += LINE_HEIGHT;<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] -->                    pdf.text(\"En su despacho.-\", MARGIN_LEFT, y);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    const dateX = pdf.internal.pageSize.getWidth() - MARGIN_RIGHT;<!-- [et_pb_line_break_holder] -->                    pdf.text(formattedDate, dateX, MARGIN_TOP, { align: 'right' });<!-- [et_pb_line_break_holder] -->                    <!-- [et_pb_line_break_holder] -->                    y += LINE_HEIGHT * 1.5;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    \/\/ --- L\u00d3GICA DE PROCESAMIENTO DE TEXTO CORREGIDA ---<!-- [et_pb_line_break_holder] -->                    const processBlock = (blockNode) => {<!-- [et_pb_line_break_holder] -->                        if (blockNode.innerText.trim() === '') {<!-- [et_pb_line_break_holder] -->                            addPageIfNeeded(LINE_HEIGHT);<!-- [et_pb_line_break_holder] -->                            y += LINE_HEIGHT;<!-- [et_pb_line_break_holder] -->                            return;<!-- [et_pb_line_break_holder] -->                        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                        let segments = [];<!-- [et_pb_line_break_holder] -->                        const buildSegments = (currentNode) => {<!-- [et_pb_line_break_holder] -->                            let style = 'normal';<!-- [et_pb_line_break_holder] -->                            let parent = currentNode.parentNode;<!-- [et_pb_line_break_holder] -->                            while(parent && parent !== blockNode) {<!-- [et_pb_line_break_holder] -->                                if (parent.nodeName === 'B' || parent.nodeName === 'STRONG') style = 'bold';<!-- [et_pb_line_break_holder] -->                                if (parent.nodeName === 'I' || parent.nodeName === 'EM') style = style === 'bold' ? 'bolditalic' : 'italic';<!-- [et_pb_line_break_holder] -->                                parent = parent.parentNode;<!-- [et_pb_line_break_holder] -->                            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                            if (currentNode.nodeType === 3) {<!-- [et_pb_line_break_holder] -->                                segments.push({ text: currentNode.textContent, style: style });<!-- [et_pb_line_break_holder] -->                            } else if (currentNode.nodeType === 1) {<!-- [et_pb_line_break_holder] -->                                Array.from(currentNode.childNodes).forEach(buildSegments);<!-- [et_pb_line_break_holder] -->                            }<!-- [et_pb_line_break_holder] -->                        };<!-- [et_pb_line_break_holder] -->                        buildSegments(blockNode);<!-- [et_pb_line_break_holder] -->                        <!-- [et_pb_line_break_holder] -->                        let wordsWithStyle = [];<!-- [et_pb_line_break_holder] -->                        segments.forEach(segment => {<!-- [et_pb_line_break_holder] -->                            const words = segment.text.split(\/\\s+\/).filter(Boolean);<!-- [et_pb_line_break_holder] -->                            words.forEach(word => {<!-- [et_pb_line_break_holder] -->                                wordsWithStyle.push({ text: word, style: segment.style });<!-- [et_pb_line_break_holder] -->                            });<!-- [et_pb_line_break_holder] -->                        });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                        let line = [];<!-- [et_pb_line_break_holder] -->                        let lineWidth = 0;<!-- [et_pb_line_break_holder] -->                        const spaceWidth = pdf.getStringUnitWidth(' ') * FONT_SIZE \/ pdf.internal.scaleFactor;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                        wordsWithStyle.forEach((word, index) => {<!-- [et_pb_line_break_holder] -->                            pdf.setFont('times', word.style);<!-- [et_pb_line_break_holder] -->                            const wordWidth = pdf.getStringUnitWidth(word.text) * FONT_SIZE \/ pdf.internal.scaleFactor;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                            if (lineWidth + wordWidth + (line.length > 0 ? spaceWidth : 0) > contentWidth) {<!-- [et_pb_line_break_holder] -->                                addPageIfNeeded(LINE_HEIGHT);<!-- [et_pb_line_break_holder] -->                                <!-- [et_pb_line_break_holder] -->                                let textOnlyWidth = 0;<!-- [et_pb_line_break_holder] -->                                line.forEach(w => {<!-- [et_pb_line_break_holder] -->                                    pdf.setFont('times', w.style);<!-- [et_pb_line_break_holder] -->                                    textOnlyWidth += pdf.getStringUnitWidth(w.text) * FONT_SIZE \/ pdf.internal.scaleFactor;<!-- [et_pb_line_break_holder] -->                                });<!-- [et_pb_line_break_holder] -->                                <!-- [et_pb_line_break_holder] -->                                const spaceCount = line.length - 1;<!-- [et_pb_line_break_holder] -->                                const extraSpace = (contentWidth - textOnlyWidth) \/ (spaceCount > 0 ? spaceCount : 1);<!-- [et_pb_line_break_holder] -->                                <!-- [et_pb_line_break_holder] -->                                let x = MARGIN_LEFT;<!-- [et_pb_line_break_holder] -->                                line.forEach(w => {<!-- [et_pb_line_break_holder] -->                                    pdf.setFont('times', w.style);<!-- [et_pb_line_break_holder] -->                                    pdf.text(w.text, x, y);<!-- [et_pb_line_break_holder] -->                                    x += pdf.getStringUnitWidth(w.text) * FONT_SIZE \/ pdf.internal.scaleFactor + extraSpace;<!-- [et_pb_line_break_holder] -->                                });<!-- [et_pb_line_break_holder] -->                                <!-- [et_pb_line_break_holder] -->                                y += LINE_HEIGHT;<!-- [et_pb_line_break_holder] -->                                line = [word];<!-- [et_pb_line_break_holder] -->                                lineWidth = wordWidth;<!-- [et_pb_line_break_holder] -->                            } else {<!-- [et_pb_line_break_holder] -->                                line.push(word);<!-- [et_pb_line_break_holder] -->                                lineWidth += wordWidth + (line.length > 1 ? spaceWidth : 0);<!-- [et_pb_line_break_holder] -->                            }<!-- [et_pb_line_break_holder] -->                        });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                        if (line.length > 0) {<!-- [et_pb_line_break_holder] -->                            addPageIfNeeded(LINE_HEIGHT);<!-- [et_pb_line_break_holder] -->                            let x = MARGIN_LEFT;<!-- [et_pb_line_break_holder] -->                            line.forEach(w => {<!-- [et_pb_line_break_holder] -->                                pdf.setFont('times', w.style);<!-- [et_pb_line_break_holder] -->                                pdf.text(w.text, x, y);<!-- [et_pb_line_break_holder] -->                                x += pdf.getStringUnitWidth(w.text + ' ') * FONT_SIZE \/ pdf.internal.scaleFactor;<!-- [et_pb_line_break_holder] -->                            });<!-- [et_pb_line_break_holder] -->                            y += LINE_HEIGHT;<!-- [et_pb_line_break_holder] -->                        }<!-- [et_pb_line_break_holder] -->                    };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    Array.from(editor.childNodes).forEach(node => {<!-- [et_pb_line_break_holder] -->                        if (node.nodeName === 'P' || node.nodeName === 'DIV') {<!-- [et_pb_line_break_holder] -->                            processBlock(node);<!-- [et_pb_line_break_holder] -->                        } else if (node.nodeName === 'UL') {<!-- [et_pb_line_break_holder] -->                             Array.from(node.childNodes).forEach(liNode => {<!-- [et_pb_line_break_holder] -->                                if (liNode.nodeName === 'LI') {<!-- [et_pb_line_break_holder] -->                                    const text = `\u2022 ${liNode.innerText}`;<!-- [et_pb_line_break_holder] -->                                    const lines = pdf.splitTextToSize(text, contentWidth - 5);<!-- [et_pb_line_break_holder] -->                                    lines.forEach(line => {<!-- [et_pb_line_break_holder] -->                                        addPageIfNeeded(LINE_HEIGHT);<!-- [et_pb_line_break_holder] -->                                        pdf.text(line, MARGIN_LEFT, y);<!-- [et_pb_line_break_holder] -->                                        y += LINE_HEIGHT;<!-- [et_pb_line_break_holder] -->                                    });<!-- [et_pb_line_break_holder] -->                                }<!-- [et_pb_line_break_holder] -->                             });<!-- [et_pb_line_break_holder] -->                        }<!-- [et_pb_line_break_holder] -->                    });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    \/\/ --- FIRMA ---<!-- [et_pb_line_break_holder] -->                    const signatureValue = document.getElementById('signature-select').value;<!-- [et_pb_line_break_holder] -->                    if (signatureValue) {<!-- [et_pb_line_break_holder] -->                        const [line1, line2, line3, line4] = signatureValue.split('||');<!-- [et_pb_line_break_holder] -->                        const signatureBlockHeight = LINE_HEIGHT * 4 + 20; <!-- [et_pb_line_break_holder] -->                        addPageIfNeeded(signatureBlockHeight);<!-- [et_pb_line_break_holder] -->                        y += 20;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                        pdf.setFont('times', 'bold');<!-- [et_pb_line_break_holder] -->                        pdf.text(line1, pdf.internal.pageSize.getWidth() \/ 2, y, { align: 'center' });<!-- [et_pb_line_break_holder] -->                        y += LINE_HEIGHT;<!-- [et_pb_line_break_holder] -->                        <!-- [et_pb_line_break_holder] -->                        pdf.setFont('times', 'normal');<!-- [et_pb_line_break_holder] -->                        pdf.text(line2, pdf.internal.pageSize.getWidth() \/ 2, y, { align: 'center' });<!-- [et_pb_line_break_holder] -->                        y += LINE_HEIGHT;<!-- [et_pb_line_break_holder] -->                        pdf.text(line3, pdf.internal.pageSize.getWidth() \/ 2, y, { align: 'center' });<!-- [et_pb_line_break_holder] -->                        y += LINE_HEIGHT;<!-- [et_pb_line_break_holder] -->                        pdf.text(line4, pdf.internal.pageSize.getWidth() \/ 2, y, { align: 'center' });<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    pdf.save('carta-generada.pdf');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                } catch (err) {<!-- [et_pb_line_break_holder] -->                    console.error(\"Error al generar el PDF:\", err);<!-- [et_pb_line_break_holder] -->                    alert(\"Hubo un error al generar el PDF. Por favor, intente de nuevo.\");<!-- [et_pb_line_break_holder] -->                } finally {<!-- [et_pb_line_break_holder] -->                    downloadBtn.disabled = false;<!-- [et_pb_line_break_holder] -->                    loadingOverlay.style.display = 'none';<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->            }, 10);<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->    })();<!-- [et_pb_line_break_holder] -->    <\/script><!-- [et_pb_line_break_holder] --><\/div>\n<p>[\/et_pb_code][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=\u00bb4.27.4&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_column type=\u00bb4_4&#8243; _builder_version=\u00bb4.27.4&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_code _builder_version=\u00bb4.27.4&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb]<!DOCTYPE html><!-- [et_pb_line_break_holder] --><html lang=\"es\"><!-- [et_pb_line_break_holder] --><head><!-- [et_pb_line_break_holder] -->    <meta charset=\"UTF-8\"><!-- [et_pb_line_break_holder] -->    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><!-- [et_pb_line_break_holder] -->    <title>Generador de Documentos Avanzado<\/title><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <!-- Carga de Google Fonts --><!-- [et_pb_line_break_holder] -->    <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\"><!-- [et_pb_line_break_holder] -->    <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin><!-- [et_pb_line_break_holder] -->    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@700&#038;family=Roboto:ital@1&#038;display=swap\" rel=\"stylesheet\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <!-- Carga de librer\u00edas desde CDN --><!-- [et_pb_line_break_holder] -->    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js\"><\/script><!-- [et_pb_line_break_holder] -->    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/html2canvas\/1.4.1\/html2canvas.min.js\"><\/script><!-- [et_pb_line_break_holder] -->    <script src=\"https:\/\/cdn.tiny.cloud\/1\/gg313gsbym5vlofr6uxunw0mz3g5ppkbm5ihk3ovck2s69xi\/tinymce\/6\/tinymce.min.js\" referrerpolicy=\"origin\"><\/script><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<style><!-- [et_pb_line_break_holder] -->        \/* Estilos para encapsular el generador y evitar conflictos *\/<!-- [et_pb_line_break_holder] -->        #document-generator {<!-- [et_pb_line_break_holder] -->            font-family: Arial, sans-serif;<!-- [et_pb_line_break_holder] -->            max-width: 900px;<!-- [et_pb_line_break_holder] -->            margin: 20px auto;<!-- [et_pb_line_break_holder] -->            padding: 20px;<!-- [et_pb_line_break_holder] -->            border: 1px solid #ccc;<!-- [et_pb_line_break_holder] -->            border-radius: 8px;<!-- [et_pb_line_break_holder] -->            box-shadow: 0 4px 8px rgba(0,0,0,0.1);<!-- [et_pb_line_break_holder] -->            background-color: #f9f9f9;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        #document-generator h1 {<!-- [et_pb_line_break_holder] -->            font-family: 'Montserrat', sans-serif; \/* Fuente Montserrat *\/<!-- [et_pb_line_break_holder] -->            font-weight: 700; \/* Negrita *\/<!-- [et_pb_line_break_holder] -->            text-align: left; \/* Alineado a la izquierda *\/<!-- [et_pb_line_break_holder] -->            color: #333;<!-- [et_pb_line_break_holder] -->            margin-bottom: 5px; \/* Reducido para acercar la leyenda *\/<!-- [et_pb_line_break_holder] -->            padding-left: 10px; <!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        #document-generator .subtitle {<!-- [et_pb_line_break_holder] -->            font-family: 'Roboto', sans-serif;<!-- [et_pb_line_break_holder] -->            text-align: left; \/* Alineado a la izquierda *\/<!-- [et_pb_line_break_holder] -->            font-size: 14px;<!-- [et_pb_line_break_holder] -->            color: #666;<!-- [et_pb_line_break_holder] -->            margin-top: -10px; \/* Ajuste para acercar al t\u00edtulo *\/<!-- [et_pb_line_break_holder] -->            margin-bottom: 25px;<!-- [et_pb_line_break_holder] -->            padding-left: 10px;<!-- [et_pb_line_break_holder] -->            font-style: italic;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        #document-generator .button-container {<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            margin-top: 20px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        #document-generator #export-pdf-btn {<!-- [et_pb_line_break_holder] -->            background-color: #C11731; \/* Nuevo color de bot\u00f3n *\/<!-- [et_pb_line_break_holder] -->            color: white;<!-- [et_pb_line_break_holder] -->            padding: 12px 25px;<!-- [et_pb_line_break_holder] -->            border: none;<!-- [et_pb_line_break_holder] -->            border-radius: 5px;<!-- [et_pb_line_break_holder] -->            font-size: 16px;<!-- [et_pb_line_break_holder] -->            cursor: pointer;<!-- [et_pb_line_break_holder] -->            transition: background-color 0.3s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        #document-generator #export-pdf-btn:hover {<!-- [et_pb_line_break_holder] -->            opacity: 0.9;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* Estilos para el overlay de carga *\/<!-- [et_pb_line_break_holder] -->        #document-generator #loading-overlay {<!-- [et_pb_line_break_holder] -->            position: fixed;<!-- [et_pb_line_break_holder] -->            top: 0;<!-- [et_pb_line_break_holder] -->            left: 0;<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->            height: 100%;<!-- [et_pb_line_break_holder] -->            background-color: rgba(0, 0, 0, 0.6);<!-- [et_pb_line_break_holder] -->            color: white;<!-- [et_pb_line_break_holder] -->            display: none; \/* Oculto por defecto *\/<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            z-index: 10000;<!-- [et_pb_line_break_holder] -->            font-size: 20px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* Contenedores ocultos para la generaci\u00f3n del PDF *\/<!-- [et_pb_line_break_holder] -->        #source-content {<!-- [et_pb_line_break_holder] -->            display: none;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        #virtual-page-container {<!-- [et_pb_line_break_holder] -->            position: absolute;<!-- [et_pb_line_break_holder] -->            left: -9999px; \/* Posicionado fuera de la pantalla *\/<!-- [et_pb_line_break_holder] -->            top: 0;<!-- [et_pb_line_break_holder] -->            background-color: white;<!-- [et_pb_line_break_holder] -->            box-shadow: 0 0 10px rgba(0,0,0,0.5);<!-- [et_pb_line_break_holder] -->            overflow: hidden;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    <\/style>\n<p><!-- [et_pb_line_break_holder] --><\/head><!-- [et_pb_line_break_holder] --><body><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div id=\"document-generator\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<h1>Editor de Documentos<\/h1>\n<p><!-- [et_pb_line_break_holder] -->        <pee class=\"subtitle\">Edita cualquier tipo de documento y desc\u00e1rgalo con la hoja membretada<\/pee><!-- [et_pb_line_break_holder] -->        <!-- [et_pb_line_break_holder] -->        <!-- El textarea que TinyMCE convertir\u00e1 en un editor enriquecido --><!-- [et_pb_line_break_holder] -->        <textarea id=\"editor\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<h2>Bienvenido al Generador de Documentos<\/h2>\n<p><!-- [et_pb_line_break_holder] -->            <pee>Escriba su contenido aqu\u00ed. Puede usar <strong>negrita<\/strong>, <em>cursiva<\/em>, <u>subrayado<\/u>, diferentes fuentes y tama\u00f1os.<\/pee><!-- [et_pb_line_break_holder] -->            <pee style=\"text-align: justify;\">Este es un p\u00e1rrafo justificado para demostrar c\u00f3mo se conservan los estilos de alineaci\u00f3n en el PDF final. La justificaci\u00f3n es clave para documentos formales y esta herramienta la maneja correctamente a trav\u00e9s de la renderizaci\u00f3n con html2canvas.<\/pee><!-- [et_pb_line_break_holder] -->            <\/p>\n<ul><!-- [et_pb_line_break_holder] -->                <\/p>\n<li>Listas con vi\u00f1etas.<\/li>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<li>F\u00e1cil de usar.<\/li>\n<p><!-- [et_pb_line_break_holder] -->            <\/ul>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<ol><!-- [et_pb_line_break_holder] -->                <\/p>\n<li>Listas numeradas.<\/li>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<li>Para una mejor organizaci\u00f3n.<\/li>\n<p><!-- [et_pb_line_break_holder] -->            <\/ol>\n<p><!-- [et_pb_line_break_holder] -->            <pee>Para forzar un salto de p\u00e1gina, utilice el bot\u00f3n de \u00abSalto de p\u00e1gina\u00bb en la barra de herramientas.<\/pee><!-- [et_pb_line_break_holder] -->        <\/textarea><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"button-container\"><!-- [et_pb_line_break_holder] -->            <button id=\"export-pdf-btn\">Exportar a PDF<\/button><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <!-- Overlay de carga --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div id=\"loading-overlay\"><!-- [et_pb_line_break_holder] -->            <pee>Generando PDF, por favor espere&#8230;<\/pee><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <!-- Contenedor oculto para clonar el contenido del editor --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div id=\"source-content\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->        <!-- [et_pb_line_break_holder] -->        <!-- Contenedor virtual para renderizar cada p\u00e1gina antes de pasarla a PDF --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div id=\"virtual-page-container\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <script><!-- [et_pb_line_break_holder] -->    document.addEventListener('DOMContentLoaded', function() {<!-- [et_pb_line_break_holder] -->        \/\/ Inicializaci\u00f3n de TinyMCE<!-- [et_pb_line_break_holder] -->        tinymce.init({<!-- [et_pb_line_break_holder] -->            selector: '#editor',<!-- [et_pb_line_break_holder] -->            plugins: 'table lists image link pagebreak advlist autolink',<!-- [et_pb_line_break_holder] -->            toolbar: 'undo redo | blocks | bold italic underline | fontfamily fontsize | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image | table | pagebreak',<!-- [et_pb_line_break_holder] -->            height: 500,<!-- [et_pb_line_break_holder] -->            menubar: false,<!-- [et_pb_line_break_holder] -->            content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:14px }'<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Referencias a los elementos del DOM<!-- [et_pb_line_break_holder] -->        const exportBtn = document.getElementById('export-pdf-btn');<!-- [et_pb_line_break_holder] -->        const loadingOverlay = document.getElementById('loading-overlay');<!-- [et_pb_line_break_holder] -->        const sourceContainer = document.getElementById('source-content');<!-- [et_pb_line_break_holder] -->        const virtualPage = document.getElementById('virtual-page-container');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ URL de la imagen de fondo para cada p\u00e1gina<!-- [et_pb_line_break_holder] -->        const backgroundImageUrl = 'https:\/\/polisecuador.org\/wp-content\/uploads\/2025\/07\/hoja-plog-scaled.png';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Constantes para el formato del PDF (A4 en mm)<!-- [et_pb_line_break_holder] -->        const A4_WIDTH_MM = 210;<!-- [et_pb_line_break_holder] -->        const A4_HEIGHT_MM = 297;<!-- [et_pb_line_break_holder] -->        const MARGIN_TOP_MM = 30;    \/\/ 3cm<!-- [et_pb_line_break_holder] -->        const MARGIN_BOTTOM_MM = 20; \/\/ 2cm<!-- [et_pb_line_break_holder] -->        const MARGIN_LEFT_MM = 30;   \/\/ 3cm<!-- [et_pb_line_break_holder] -->        const MARGIN_RIGHT_MM = 25;  \/\/ 2.5cm<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Ancho y alto del \u00e1rea de contenido en mm<!-- [et_pb_line_break_holder] -->        const CONTENT_WIDTH_MM = A4_WIDTH_MM - MARGIN_LEFT_MM - MARGIN_RIGHT_MM;<!-- [et_pb_line_break_holder] -->        const CONTENT_HEIGHT_MM = A4_HEIGHT_MM - MARGIN_TOP_MM - MARGIN_BOTTOM_MM;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Conversi\u00f3n de mm a px para la renderizaci\u00f3n en el DOM (usando 96 DPI como est\u00e1ndar web)<!-- [et_pb_line_break_holder] -->        const MM_TO_PX = 3.7795275591; <!-- [et_pb_line_break_holder] -->        const VIRTUAL_PAGE_WIDTH_PX = A4_WIDTH_MM * MM_TO_PX;<!-- [et_pb_line_break_holder] -->        const VIRTUAL_PAGE_HEIGHT_PX = A4_HEIGHT_MM * MM_TO_PX;<!-- [et_pb_line_break_holder] -->        <!-- [et_pb_line_break_holder] -->        const CONTENT_AREA_PADDING = {<!-- [et_pb_line_break_holder] -->            top: MARGIN_TOP_MM * MM_TO_PX,<!-- [et_pb_line_break_holder] -->            bottom: MARGIN_BOTTOM_MM * MM_TO_PX,<!-- [et_pb_line_break_holder] -->            left: MARGIN_LEFT_MM * MM_TO_PX,<!-- [et_pb_line_break_holder] -->            right: MARGIN_RIGHT_MM * MM_TO_PX,<!-- [et_pb_line_break_holder] -->        };<!-- [et_pb_line_break_holder] -->        const CONTENT_AREA_HEIGHT_PX = VIRTUAL_PAGE_HEIGHT_PX - CONTENT_AREA_PADDING.top - CONTENT_AREA_PADDING.bottom;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ --- FUNCI\u00d3N PRINCIPAL DE EXPORTACI\u00d3N ---<!-- [et_pb_line_break_holder] -->        const exportToPdf = async () => {<!-- [et_pb_line_break_holder] -->            loadingOverlay.style.display = 'flex';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            try {<!-- [et_pb_line_break_holder] -->                \/\/ 1. Obtener y preparar el contenido del editor<!-- [et_pb_line_break_holder] -->                const contentHTML = tinymce.get('editor').getContent();<!-- [et_pb_line_break_holder] -->                sourceContainer.innerHTML = contentHTML;<!-- [et_pb_line_break_holder] -->                <!-- [et_pb_line_break_holder] -->                \/\/ Usar .children en lugar de .childNodes para evitar nodos de texto (espacios en blanco)<!-- [et_pb_line_break_holder] -->                let nodes = Array.from(sourceContainer.children);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                \/\/ 2. Inicializar el documento PDF<!-- [et_pb_line_break_holder] -->                const { jsPDF } = window.jspdf;<!-- [et_pb_line_break_holder] -->                const pdf = new jsPDF({<!-- [et_pb_line_break_holder] -->                    orientation: 'p',<!-- [et_pb_line_break_holder] -->                    unit: 'mm',<!-- [et_pb_line_break_holder] -->                    format: 'a4'<!-- [et_pb_line_break_holder] -->                });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                let pageCount = 0;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                \/\/ 3. Bucle de paginaci\u00f3n: procesar mientras queden nodos<!-- [et_pb_line_break_holder] -->                while (nodes.length > 0) {<!-- [et_pb_line_break_holder] -->                    pageCount++;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    \/\/ a. Crear el contenedor de la p\u00e1gina virtual y el \u00e1rea de contenido<!-- [et_pb_line_break_holder] -->                    const pageContentWrapper = document.createElement('div');<!-- [et_pb_line_break_holder] -->                    pageContentWrapper.style.width = `${VIRTUAL_PAGE_WIDTH_PX}px`;<!-- [et_pb_line_break_holder] -->                    pageContentWrapper.style.height = `${VIRTUAL_PAGE_HEIGHT_PX}px`;<!-- [et_pb_line_break_holder] -->                    pageContentWrapper.style.boxSizing = 'border-box';<!-- [et_pb_line_break_holder] -->                    pageContentWrapper.style.padding = `${CONTENT_AREA_PADDING.top}px ${CONTENT_AREA_PADDING.right}px ${CONTENT_AREA_PADDING.bottom}px ${CONTENT_AREA_PADDING.left}px`;<!-- [et_pb_line_break_holder] -->                    <!-- [et_pb_line_break_holder] -->                    const contentArea = document.createElement('div');<!-- [et_pb_line_break_holder] -->                    pageContentWrapper.appendChild(contentArea);<!-- [et_pb_line_break_holder] -->                    virtualPage.appendChild(pageContentWrapper);<!-- [et_pb_line_break_holder] -->                    <!-- [et_pb_line_break_holder] -->                    let pageBreakForced = false;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    \/\/ b. Llenar la p\u00e1gina virtual con nodos hasta que se desborde<!-- [et_pb_line_break_holder] -->                    while (nodes.length > 0) {<!-- [et_pb_line_break_holder] -->                        const node = nodes.shift();<!-- [et_pb_line_break_holder] -->                        <!-- [et_pb_line_break_holder] -->                        if (node.nodeName === 'IMG' && node.classList.contains('mce-pagebreak')) {<!-- [et_pb_line_break_holder] -->                            pageBreakForced = true;<!-- [et_pb_line_break_holder] -->                            break;<!-- [et_pb_line_break_holder] -->                        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                        contentArea.appendChild(node);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                        \/\/ c. Comprobar si el contenido se desborda<!-- [et_pb_line_break_holder] -->                        if (contentArea.scrollHeight > CONTENT_AREA_HEIGHT_PX + 2) {<!-- [et_pb_line_break_holder] -->                            contentArea.removeChild(node);<!-- [et_pb_line_break_holder] -->                            nodes.unshift(node);<!-- [et_pb_line_break_holder] -->                            break;<!-- [et_pb_line_break_holder] -->                        }<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] -->                    <!-- [et_pb_line_break_holder] -->                    if (contentArea.childNodes.length === 0 && pageBreakForced && pageCount > 1) {<!-- [et_pb_line_break_holder] -->                        virtualPage.innerHTML = '';<!-- [et_pb_line_break_holder] -->                        continue;<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    \/\/ d. Renderizar la p\u00e1gina virtual a un canvas con fondo transparente<!-- [et_pb_line_break_holder] -->                    const canvas = await html2canvas(pageContentWrapper, {<!-- [et_pb_line_break_holder] -->                        scale: 3,<!-- [et_pb_line_break_holder] -->                        useCORS: true,<!-- [et_pb_line_break_holder] -->                        backgroundColor: null, \/\/ \u00a1CR\u00cdTICO! Fondo transparente para el contenido<!-- [et_pb_line_break_holder] -->                        logging: false<!-- [et_pb_line_break_holder] -->                    });<!-- [et_pb_line_break_holder] -->                    <!-- [et_pb_line_break_holder] -->                    const contentImageDataUrl = canvas.toDataURL('image\/png');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    \/\/ e. A\u00f1adir la p\u00e1gina y el contenido al PDF<!-- [et_pb_line_break_holder] -->                    if (pageCount > 1) {<!-- [et_pb_line_break_holder] -->                        pdf.addPage();<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    \/\/ A\u00f1adir primero la imagen de fondo, cubriendo toda la p\u00e1gina<!-- [et_pb_line_break_holder] -->                    pdf.addImage(backgroundImageUrl, 'PNG', 0, 0, A4_WIDTH_MM, A4_HEIGHT_MM, undefined, 'FAST');<!-- [et_pb_line_break_holder] -->                    <!-- [et_pb_line_break_holder] -->                    \/\/ --- CORRECCI\u00d3N CLAVE ---<!-- [et_pb_line_break_holder] -->                    \/\/ Superponer la capa de contenido transparente sobre TODA la p\u00e1gina.<!-- [et_pb_line_break_holder] -->                    \/\/ html2canvas ya ha renderizado el contenido respetando los m\u00e1rgenes (gracias al padding).<!-- [et_pb_line_break_holder] -->                    \/\/ Las coordenadas (0,0) y las dimensiones (A4_WIDTH_MM, A4_HEIGHT_MM) aseguran un mapeo 1:1.<!-- [et_pb_line_break_holder] -->                    pdf.addImage(contentImageDataUrl, 'PNG', 0, 0, A4_WIDTH_MM, A4_HEIGHT_MM, undefined, 'FAST');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    \/\/ Limpiar el contenedor virtual para la siguiente iteraci\u00f3n<!-- [et_pb_line_break_holder] -->                    virtualPage.innerHTML = '';<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                \/\/ 4. Guardar el archivo PDF<!-- [et_pb_line_break_holder] -->                pdf.save('documento_generado.pdf');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            } catch (error) {<!-- [et_pb_line_break_holder] -->                console.error(\"Error al generar el PDF:\", error);<!-- [et_pb_line_break_holder] -->                alert(\"Ocurri\u00f3 un error al generar el PDF. Por favor, revise la consola para m\u00e1s detalles.\");<!-- [et_pb_line_break_holder] -->            } finally {<!-- [et_pb_line_break_holder] -->                \/\/ 5. Ocultar el overlay de carga<!-- [et_pb_line_break_holder] -->                loadingOverlay.style.display = 'none';<!-- [et_pb_line_break_holder] -->                sourceContainer.innerHTML = '';<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Asignar el evento al bot\u00f3n<!-- [et_pb_line_break_holder] -->        exportBtn.addEventListener('click', exportToPdf);<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->    <\/script><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/body><!-- [et_pb_line_break_holder] --><\/html>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n<span class=\"et_bloom_bottom_trigger\"><\/span>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":685,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_et_pb_use_builder":"on","_et_pb_old_content":"<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE html>\n&lt;html lang=\"es\">\n&lt;head>\n    &lt;meta charset=\"UTF-8\">\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    &lt;title>Generador de Cartas&lt;\/title>\n    &lt;!-- Importar Tailwind CSS para un dise\u00f1o r\u00e1pido y responsivo -->\n    &lt;script src=\"https:\/\/cdn.tailwindcss.com\">&lt;\/script>\n    &lt;!-- Importar Google Fonts: Montserrat -->\n    &lt;link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n    &lt;link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n    &lt;link href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@400;700&amp;display=swap\" rel=\"stylesheet\">\n    &lt;style>\n        \/* Estilos personalizados *\/\n        body {\n            font-family: 'Montserrat', sans-serif;\n            background-color: #f0f2f5;\n        }\n\n        \/* Estilos para la p\u00e1gina de la carta *\/\n        .carta-pagina {\n            background-color: white;\n            \/* IMPORTANTE: Reemplaza la siguiente URL con la URL de la IMAGEN de tu hoja membretada.\n               He usado un marcador de posici\u00f3n. La URL original del PDF no se puede usar como fondo. *\/\n            background-image: url('https:\/\/placehold.co\/2100x2970\/ffffff\/E8E8E8\/png?text=Fondo+de+Hoja+Membretada');\n            background-size: 100% 100%;\n            background-repeat: no-repeat;\n            width: 21cm; \/* Ancho de A4 *\/\n            min-height: 29.7cm; \/* Alto de A4 *\/\n            margin: 2rem auto;\n            box-shadow: 0 0 15px rgba(0,0,0,0.1);\n            padding: 2.54cm; \/* Margen de 1 pulgada *\/\n            position: relative;\n            font-size: 12px;\n            color: #000;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .carta-cuerpo {\n            flex-grow: 1;\n            outline: none; \/* Quita el borde al hacer clic *\/\n            line-height: 1.6;\n        }\n        \n        .carta-cuerpo p {\n            margin-bottom: 1em;\n        }\n\n        .carta-firma {\n            text-align: center;\n            padding-top: 4rem;\n        }\n\n        \/* Estilos para la impresi\u00f3n *\/\n        @media print {\n            body {\n                background-color: white;\n                margin: 0;\n            }\n            .controles-imprimir, .titulo-seccion {\n                display: none; \/* Oculta los controles al imprimir *\/\n            }\n            .carta-pagina {\n                margin: 0;\n                box-shadow: none;\n                border: none;\n                \/* Evita que el navegador agregue sus propios m\u00e1rgenes *\/\n                page-break-after: always;\n            }\n            \/* Asegura que el fondo se imprima (configuraci\u00f3n del navegador necesaria) *\/\n            @page {\n                size: A4;\n                margin: 0;\n            }\n        }\n    &lt;\/style>\n&lt;\/head>\n&lt;body class=\"p-4 md:p-8\">\n\n    &lt;div class=\"max-w-7xl mx-auto grid grid-cols-1 lg:grid-cols-3 gap-8\">\n\n        &lt;!-- Columna de Controles -->\n        &lt;div class=\"lg:col-span-1 space-y-6\">\n            &lt;h2 class=\"text-2xl font-bold text-gray-800 titulo-seccion\">Controles de la Carta&lt;\/h2>\n            \n            &lt;!-- Controles del Destinatario -->\n            &lt;div class=\"bg-white p-6 rounded-lg shadow-md\">\n                &lt;h3 class=\"text-lg font-bold mb-4 border-b pb-2\">Destinatario&lt;\/h3>\n                &lt;div class=\"space-y-4\">\n                    &lt;div>\n                        &lt;label for=\"titulo\" class=\"block text-sm font-medium text-gray-700\">T\u00edtulo:&lt;\/label>\n                        &lt;select id=\"titulo\" class=\"mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm\">\n                            &lt;option>Se\u00f1or&lt;\/option>\n                            &lt;option>Se\u00f1ora&lt;\/option>\n                            &lt;option>Se\u00f1orita&lt;\/option>\n                            &lt;option>Doctor&lt;\/option>\n                            &lt;option>Doctora&lt;\/option>\n                            &lt;option>Ingeniero&lt;\/option>\n                            &lt;option>Ingeniera&lt;\/option>\n                            &lt;option>Abogado&lt;\/option>\n                            &lt;option>Abogada&lt;\/option>\n                            &lt;option>M\u00e1ster&lt;\/option>\n                            &lt;option>Mag\u00edster&lt;\/option>\n                            &lt;option>Psic\u00f3logo&lt;\/option>\n                            &lt;option>Psic\u00f3loga&lt;\/option>\n                            &lt;option>Economista&lt;\/option>\n                            &lt;option>Arquitecto&lt;\/option>\n                            &lt;option>Arquitecta&lt;\/option>\n                            &lt;option>Licenciado&lt;\/option>\n                            &lt;option>Licenciada&lt;\/option>\n                        &lt;\/select>\n                    &lt;\/div>\n                    &lt;div>\n                        &lt;label for=\"nombre\" class=\"block text-sm font-medium text-gray-700\">Nombre Completo:&lt;\/label>\n                        &lt;input type=\"text\" id=\"nombre\" placeholder=\"Nombre a quien va dirigida la carta\" class=\"mt-1 block w-full py-2 px-3 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm\">\n                    &lt;\/div>\n                &lt;\/div>\n            &lt;\/div>\n\n            &lt;!-- Controles del Firmante -->\n            &lt;div class=\"bg-white p-6 rounded-lg shadow-md\">\n                &lt;h3 class=\"text-lg font-bold mb-4 border-b pb-2\">Firmante&lt;\/h3>\n                &lt;div>\n                    &lt;label for=\"firmante\" class=\"block text-sm font-medium text-gray-700\">Seleccionar firmante:&lt;\/label>\n                    &lt;select id=\"firmante\" class=\"mt-1 block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm\">\n                        &lt;option value=\"Jerem\u00edas Tama Espinoza|Director General de POLIS\">Jerem\u00edas Tama Espinoza&lt;\/option>\n                        &lt;option value=\"Mar\u00eda Caridad S\u00e1nchez|Directora Editorial de PLOG\">Mar\u00eda Caridad S\u00e1nchez&lt;\/option>\n                        &lt;option value=\"L\u00f3pez|Editor de PLOG\">L\u00f3pez&lt;\/option>\n                        &lt;option value=\"Juan Sebasti\u00e1n L\u00f3pez|Editor de PLOG\">Juan Sebasti\u00e1n L\u00f3pez&lt;\/option>\n                        &lt;option value=\"Juan Pablo Moscoso|Editor de PLOG\">Juan Pablo Moscoso&lt;\/option>\n                        &lt;option value=\"Sophia Cherres|Editora de PLOG\">Sophia Cherres&lt;\/option>\n                    &lt;\/select>\n                &lt;\/div>\n            &lt;\/div>\n\n            &lt;!-- Bot\u00f3n de Imprimir -->\n            &lt;div class=\"bg-white p-6 rounded-lg shadow-md controles-imprimir\">\n                 &lt;h3 class=\"text-lg font-bold mb-4 border-b pb-2\">Acciones&lt;\/h3>\n                &lt;button onclick=\"window.print()\" class=\"w-full bg-blue-600 text-white font-bold py-3 px-4 rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 transition-colors\">\n                    Imprimir \/ Guardar como PDF\n                &lt;\/button>\n            &lt;\/div>\n\n        &lt;\/div>\n\n        &lt;!-- Columna de la Carta (Preview) -->\n        &lt;div class=\"lg:col-span-2\">\n            &lt;div id=\"carta-preview\" class=\"carta-pagina\">\n                &lt;!-- Encabezado: Fecha y Destinatario -->\n                &lt;header>\n                    &lt;div id=\"fecha\" class=\"text-right mb-8\">&lt;\/div>\n                    &lt;div id=\"destinatario\" class=\"font-bold\">\n                        &lt;div id=\"dest-titulo\">&lt;\/div>\n                        &lt;div id=\"dest-nombre\">&lt;\/div>\n                        &lt;div>En su despacho.-&lt;\/div>\n                    &lt;\/div>\n                &lt;\/header>\n\n                &lt;!-- Cuerpo de la carta (editable) -->\n                &lt;div class=\"carta-cuerpo mt-12\" contenteditable=\"true\">\n                    &lt;p>Escriba aqu\u00ed el cuerpo de la carta...&lt;\/p>\n                &lt;\/div>\n\n                &lt;!-- Firma -->\n                &lt;footer>\n                    &lt;div id=\"firma\" class=\"carta-firma\">\n                        &lt;div id=\"firma-nombre\">&lt;\/div>\n                        &lt;div id=\"firma-cargo\">&lt;\/div>\n                    &lt;\/div>\n                &lt;\/footer>\n            &lt;\/div>\n        &lt;\/div>\n    &lt;\/div>\n\n    &lt;script>\n        document.addEventListener('DOMContentLoaded', function() {\n            \/\/ --- ELEMENTOS DEL DOM ---\n            const tituloSelect = document.getElementById('titulo');\n            const nombreInput = document.getElementById('nombre');\n            const firmanteSelect = document.getElementById('firmante');\n\n            const fechaEl = document.getElementById('fecha');\n            const destTituloEl = document.getElementById('dest-titulo');\n            const destNombreEl = document.getElementById('dest-nombre');\n            const firmaNombreEl = document.getElementById('firma-nombre');\n            const firmaCargoEl = document.getElementById('firma-cargo');\n\n            \/\/ --- FUNCIONES ---\n\n            \/\/ Funci\u00f3n para obtener y formatear la fecha actual en espa\u00f1ol\n            function actualizarFecha() {\n                const meses = &#91;\"enero\", \"febrero\", \"marzo\", \"abril\", \"mayo\", \"junio\", \"julio\", \"agosto\", \"septiembre\", \"octubre\", \"noviembre\", \"diciembre\"];\n                const fecha = new Date();\n                const dia = fecha.getDate();\n                const mes = meses&#91;fecha.getMonth()];\n                const anio = fecha.getFullYear();\n                fechaEl.textContent = `Cuenca, ${dia} de ${mes} de ${anio}`;\n            }\n\n            \/\/ Funci\u00f3n para actualizar los datos del destinatario en la carta\n            function actualizarDestinatario() {\n                destTituloEl.textContent = tituloSelect.value;\n                destNombreEl.textContent = nombreInput.value.toUpperCase(); \/\/ Por convenci\u00f3n, a veces va en may\u00fasculas\n            }\n\n            \/\/ Funci\u00f3n para actualizar los datos del firmante\n            function actualizarFirmante() {\n                const &#91;nombre, cargo] = firmanteSelect.value.split('|');\n                firmaNombreEl.textContent = nombre;\n                firmaCargoEl.textContent = cargo;\n            }\n\n            \/\/ --- EVENT LISTENERS ---\n            tituloSelect.addEventListener('change', actualizarDestinatario);\n            nombreInput.addEventListener('input', actualizarDestinatario);\n            firmanteSelect.addEventListener('change', actualizarFirmante);\n\n            \/\/ --- INICIALIZACI\u00d3N ---\n            actualizarFecha();\n            actualizarDestinatario();\n            actualizarFirmante();\n        });\n    &lt;\/script>\n\n&lt;\/body>\n&lt;\/html><\/code><\/pre>\n<!-- \/wp:code -->","_et_gb_content_width":"","footnotes":""},"class_list":["post-1341","page","type-page","status-publish","hentry"],"pp_statuses_selecting_workflow":false,"pp_workflow_action":"current","pp_status_selection":"publish","acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Generador de Documentos - Polis Ecuador<\/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:\/\/polisecuador.org\/en\/plog\/generador-de-documentos\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Generador de Documentos - Polis Ecuador\" \/>\n<meta property=\"og:url\" content=\"https:\/\/polisecuador.org\/en\/plog\/generador-de-documentos\/\" \/>\n<meta property=\"og:site_name\" content=\"Polis Ecuador\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/polisecuador\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-06T10:27:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/polisecuador.org\/wp-content\/uploads\/2024\/05\/Sin-titulo-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1500\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@polisecuador\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\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:\\\/\\\/polisecuador.org\\\/plog\\\/generador-de-documentos\\\/\",\"url\":\"https:\\\/\\\/polisecuador.org\\\/plog\\\/generador-de-documentos\\\/\",\"name\":\"Generador de Documentos - Polis Ecuador\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/polisecuador.org\\\/#website\"},\"datePublished\":\"2025-07-06T07:33:37+00:00\",\"dateModified\":\"2025-08-06T10:27:58+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/polisecuador.org\\\/plog\\\/generador-de-documentos\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/polisecuador.org\\\/plog\\\/generador-de-documentos\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/polisecuador.org\\\/plog\\\/generador-de-documentos\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/polisecuador.org\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Plog\",\"item\":\"https:\\\/\\\/polisecuador.org\\\/plog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Generador de Documentos\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/polisecuador.org\\\/#website\",\"url\":\"https:\\\/\\\/polisecuador.org\\\/\",\"name\":\"Polis Ecuador\",\"description\":\"Academia de Formaci\u00f3n Pol\u00edtica\",\"publisher\":{\"@id\":\"https:\\\/\\\/polisecuador.org\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/polisecuador.org\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/polisecuador.org\\\/#organization\",\"name\":\"Polis Ecuador\",\"url\":\"https:\\\/\\\/polisecuador.org\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/polisecuador.org\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/polisecuador.org\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/polis-web.svg\",\"contentUrl\":\"https:\\\/\\\/polisecuador.org\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/polis-web.svg\",\"width\":1391.69000000000005456968210637569427490234375,\"height\":754.1299999999999954525264911353588104248046875,\"caption\":\"Polis Ecuador\"},\"image\":{\"@id\":\"https:\\\/\\\/polisecuador.org\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/polisecuador\",\"https:\\\/\\\/x.com\\\/polisecuador\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Generador de Documentos - Polis Ecuador","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:\/\/polisecuador.org\/en\/plog\/generador-de-documentos\/","og_locale":"en_US","og_type":"article","og_title":"Generador de Documentos - Polis Ecuador","og_url":"https:\/\/polisecuador.org\/en\/plog\/generador-de-documentos\/","og_site_name":"Polis Ecuador","article_publisher":"https:\/\/www.facebook.com\/polisecuador","article_modified_time":"2025-08-06T10:27:58+00:00","og_image":[{"width":1500,"height":500,"url":"https:\/\/polisecuador.org\/wp-content\/uploads\/2024\/05\/Sin-titulo-2.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@polisecuador","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/polisecuador.org\/plog\/generador-de-documentos\/","url":"https:\/\/polisecuador.org\/plog\/generador-de-documentos\/","name":"Generador de Documentos - Polis Ecuador","isPartOf":{"@id":"https:\/\/polisecuador.org\/#website"},"datePublished":"2025-07-06T07:33:37+00:00","dateModified":"2025-08-06T10:27:58+00:00","breadcrumb":{"@id":"https:\/\/polisecuador.org\/plog\/generador-de-documentos\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/polisecuador.org\/plog\/generador-de-documentos\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/polisecuador.org\/plog\/generador-de-documentos\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/polisecuador.org\/"},{"@type":"ListItem","position":2,"name":"Plog","item":"https:\/\/polisecuador.org\/plog\/"},{"@type":"ListItem","position":3,"name":"Generador de Documentos"}]},{"@type":"WebSite","@id":"https:\/\/polisecuador.org\/#website","url":"https:\/\/polisecuador.org\/","name":"Polis Ecuador","description":"Academia de Formaci\u00f3n Pol\u00edtica","publisher":{"@id":"https:\/\/polisecuador.org\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/polisecuador.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/polisecuador.org\/#organization","name":"Polis Ecuador","url":"https:\/\/polisecuador.org\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/polisecuador.org\/#\/schema\/logo\/image\/","url":"https:\/\/polisecuador.org\/wp-content\/uploads\/2023\/04\/polis-web.svg","contentUrl":"https:\/\/polisecuador.org\/wp-content\/uploads\/2023\/04\/polis-web.svg","width":1391.69000000000005456968210637569427490234375,"height":754.1299999999999954525264911353588104248046875,"caption":"Polis Ecuador"},"image":{"@id":"https:\/\/polisecuador.org\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/polisecuador","https:\/\/x.com\/polisecuador"]}]}},"_links":{"self":[{"href":"https:\/\/polisecuador.org\/en\/wp-json\/wp\/v2\/pages\/1341","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/polisecuador.org\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/polisecuador.org\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/polisecuador.org\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/polisecuador.org\/en\/wp-json\/wp\/v2\/comments?post=1341"}],"version-history":[{"count":0,"href":"https:\/\/polisecuador.org\/en\/wp-json\/wp\/v2\/pages\/1341\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/polisecuador.org\/en\/wp-json\/wp\/v2\/pages\/685"}],"wp:attachment":[{"href":"https:\/\/polisecuador.org\/en\/wp-json\/wp\/v2\/media?parent=1341"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}