Forum


Replies: 3   Views: 120
Cómo usar la propiedad headinglevel en un custom paragraph style

Posted by rmartinez  · 26-07-2024 - 12:13

Buenos días.

Una vez más, recurro a vosotros.

Creando un estilo de párrafo de una manera similar a:

$heading2_anexo_style = array(
    'color' => $main_hex_color,
    'spacingTop' => config('phpdocx.lineSpacing.single'),
    'headingLevel' => 2,
            
    'font' => 'Arial',
        'fontSize' => 24,
        'bold' => 'on',
        'smallCaps' => 'on',
);
$wf->createParagraphStyle('title2_anexo', $heading2_anexo_style);

Creo un $docx con el método CreateDocxFromTemplate

Creo un wf de manera similar a:

$titulo2->addText('Título 2', array('pStyle' => 'title2_anexo', 'fontSize' => 22, 'textAlign' => 'center', 'underline' => 'single'));

Utilizo el método replaceVariableByWordFragment para sustituir y, el texto y formato se renderizan correctamente salvo el headingLevel que no lo cambia, se queda como texto independiente. ¿Por qué?

Sin embargo, si añado al estilo 'pStyle' => 'myHeading2' (siendo myHeading2 el estilo del título dos del documento), si que utiliza el Nivel correcto pero, por contra, se genera el texto como una lista porque así lo tengo definido el estilo myHeading2. ¿Puedo quitar el formato de lista de un estilo predefinido en la plantilla para determinados textos?

¿Alguna otra opción?

Gracias.

Saludos.

Posted by admin  · 26-07-2024 - 13:21

Hola,

Para que estén disponibles los estilos a nivel de documento, deben añadirse al documento, no a un WordFragment.

En lugar de:

$wf->createParagraphStyle('title2_anexo', $heading2_anexo_style);

que se está añadiendo a un WordFragment, debe añadirse al objecto del documento, por ejemplo:

$docx->createParagraphStyle('title2_anexo', $heading2_anexo_style);

Saludos.

Posted by rmartinez  · 05-08-2024 - 05:58

Perdona la demora pero he estado ausente unos días.

Sí, tal como indicas, los estilos se añaden a nivel del documento aunque en el código que os pasé apareciera $wf en vez de $docx.

Posted by admin  · 05-08-2024 - 07:06

Hola,

Con la versión de phpdocx que estás usando, en lugar de headingLevel, prueba a utilizar outlineLvl con createParagraphStyle:

$heading2_anexo_style = array(
    'color' => '#FF0000',
    'spacingTop' => 20,
    'outlineLvl' => 2,
    'font' => 'Arial',
    'fontSize' => 24,
    'bold' => 'on',
    'smallCaps' => 'on',
);
$docx->createParagraphStyle('title2_anexo', $heading2_anexo_style);

O añade la opción headingLevel al crear el texto:

$titulo = new WordFragment($docx, 'document');
$titulo->addText('Titulo 2', array('pStyle' => 'title2_anexo', 'fontSize' => 22, 'textAlign' => 'center', 'underline' => 'single', 'headingLevel' => 2));

Saludos.