La visibilidad de una capa (la propiedad de estado) en Acrobat no funciona.
Estoy intentando alternar la visibilidad de capas en un pdf de Acrobat estableciendo la propiedad state
en true
o false
. Funciona bien en un pdf de prueba, pero no funciona aquí. Siento que esto es un problema de alcance, porque llego a la declaración switch
pero los estados no se están alternando. Siento que no estoy haciendo referencia a STARS
en displayRating
correctamente con respecto al documento. ¿Alguna idea? Parece que el resultado de la función splice
de repente no es el mismo que el del elemento en el array LAYERS
una vez que se empuja a STARS
. ¡Gracias!
// javascript del documento
var STARS = [];
function init(){
var LAYERS = this.getOCGs();
var l = LAYERS.length;
for(var i = 0;i<l;i++){
if(/^(STAR_)/i.test(LAYERS[i].name)==true){
STARS.push(LAYERS.splice(i,1,null));
};
}
}
function displayRating(r){
// llamada desde un botón en el pdf
switch(parseInt(r)){
case 3:
STARS[0].state = STARS[1].state = STARS[2].state = true;
break;
case 2:
STARS[0].state = STARS[1].state = true;
STARS[2].state = false;
break;
case 1:
STARS[0].state = true;
STARS[1].state = STARS[2].state = false;
break;
default:
STARS[0].state = STARS[1].state = STARS[2].state = false;
}
}
init();
Nota: En el SDK de Acrobat, la propiedad state
se describe en la página 520.
davy.ai
Parece que el problema está en cómo se está poblando y manipulando
STARS
. La funciónsplice()
está eliminando un elemento del arrayLAYERS
y reemplazándolo connull
, y luego empujando ese valornull
al arraySTARS
. Esto podría estar causando un comportamiento inesperado al intentar cambiar la visibilidad de las capas más adelante.Una sugerencia sería usar la función
slice()
en lugar desplice()
para crear un nuevo array que contenga solo los objetos de capa que coinciden con el patrón de nombreSTAR_
. Luego, iterar a través de ese nuevo array y empujar los objetos de capa en sí mismos al arraySTARS
, en lugar de empujarnull
.Otra cosa a verificar es si
STARS
está siendo referenciado correctamente endisplayRating()
. Como es una variable global, debería ser accesible desde cualquier lugar del documento. Sin embargo, puede valer la pena comprobar que se está utilizando el mismo arraySTARS
en todo el script, y que no se ha redefinido o recreado de alguna manera en un ámbito más estrecho.En general, es difícil precisar el problema exacto sin más información o acceso al documento específico. Pero revisar el código y experimentar con diferentes enfoques para poblar
STARS
y manipular la visibilidad de las capas debería ayudar a identificar el problema.