Forum


Replies: 3   Views: 179
Cómo usar la propiedad headinglevel en un custom paragraph style
Topic closed:
Please note this is an old forum thread. Information in this post may be out-to-date and/or erroneous.
Every phpdocx version includes new features and improvements. Previously unsupported features may have been added to newer releases, or past issues may have been corrected.
We encourage you to download the current phpdocx version and check the Documentation available.

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.