Forum


Replies: 6   Views: 2721
Reemplazar bookmark
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 Samuel  · 18-01-2017 - 15:59

Hola,

Disculpa, escribí antes con una cuenta incorrecta. No hay licencia asociada a esta cuenta ya que la licencia la tiene el cliente para el que trabajamos.

En un paso, generamos un docx con bookmarks, conteniendo éstos graficas y texto, del siguiente modo:

$docx->addBookmark(array(
    'type' => 'start',
    'name' => "chapter_module_$chapter[id]"
));

$docx->add...

[...]

$docx->addBookmark(array(
    'type' => 'end',
    'name' => "chapter_module_$chapter[id]"
));

Y generamos el docx. Una vez abierto con MS Word, podemos ver los bookmarks, al seleccionar uno se selecciona todo su contenido, etc.

En otro paso, el usuario sube el docx y queremos reemplazar el contenido del bookmark por otro, mediante:

$docx->replaceWordContent($wordfragment, $reference_node)

Pero no logro hacerlo funcionar. Veo que replaceWordContent() no permite que type sea 'bookmark', en la documentación se indica "paragraph (also for bookmarks, links and lists)", así que he probado de la siguiente manera:

$reference_node = array(
    'type' => 'paragraph',
    'attributes' => array(
        'name' => "chapter_module_$chapter[id]"
    )
);
$docx->replaceWordContent($content, $reference_node);

Pero no funciona.

De hecho, a pesar de que en word aparecen los bookmarks, getDOCXPathQueryInfo creo que no los encuentra:

$reference_node = array(
    'type' => 'bookmark',
);

$query_result = $docx->getDOCXPathQueryInfo($reference_node);
var_dump($query_result);

Devuelve:

array(size=2)
  'length' => int 0
  'query' => string '//w:body/w:bookmarkStart[1=1]'

¿Hay alguna forma de reemplazar un bookmark de principio a fin con un WordFragment? ¿O alguna otra forma de agrupar distinto contenido en un .docx de modo que, trabajando con ese fichero como plantilla, se pueda reemplazar? Teniendo en cuenta que habrá varios bloques distintos y tienen que tener algún nombre o clave que los diferencie entre sí, es decir, puede haber varios de estos bloques y que sólo se tenga que reemplazar uno en concreto que puede estar en cualquier posición...

Estamos usando la versión advanced con namespaces.

Gracias