I'm trying to toggle layer visibility in an Acrobat pdf by setting the state property to either true or false. It works fine in a proof of concept pdf, but it's not working here. I feel like this is a scope issue, because I'm getting into the switch statement but the states aren't toggling. I feel like I'm not referencing STARS in displayRating correctly with respect to the document. Any ideas? It seems like the result of the splice suddenly isn't the same as what that item is in the LAYERS array once it's pushed into STARS. Thanks!
// document javascript
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){
// called from a button in the 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();
Note: In the Acrobat SDK pdf, the state property is described on page 520.
Solved: It turns out the
splicestatement was causing the problems. It was recording the null value into the LAYERS array and then pushingnullinto the STARS array. I thought it would return the value from thesplicefirst, and then fill it withnullafter, but that wasn't the case. Solution was to just push the matched value without the splice.