es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en cómo se está poblando y manipulando STARS. La función splice() está eliminando un elemento del array LAYERS y reemplazándolo con null, y luego empujando ese valor null al array STARS. 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 de splice() para crear un nuevo array que contenga solo los objetos de capa que coinciden con el patrón de nombre STAR_. Luego, iterar a través de ese nuevo array y empujar los objetos de capa en sí mismos al array STARS, en lugar de empujar null.

    Otra cosa a verificar es si STARS está siendo referenciado correctamente en displayRating(). 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 array STARS 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.

Comments are closed.