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