/    Sign up×
Community /Pin to ProfileBookmark

Pro Coders Challenge

Hi guys!

i’m sorry to say but i’ve got little to no knowledge when it comes to handling javascripts. i came here for some help on something.

right now i need a for Acrobat Reader 9 that allows you to add bookmarks to a PDF file…

i have read the help files and googled pretty much any related keyword i could think of and i always get answers on “adding bookmarks WHEN CREATING A PDF”… which is entirely different from what i needed which is “adding bookmarks to an already published PDF file” (i.e. i want to bookmark certain pages on an ebook i’ve been reading so that i don’t have to start from page 1 each time i load the pdf”)

the closest i’ve found to this is [URL=”http://www.pdfhacks.com/bookmark_page/”]THIS[/URL]

what that does is add Bookmark functions under the VIEW menu to “ADD” “GO TO” and “REMOVE BOOKMARKS”

the trouble with this code is that i always have to navigate through the Menu bar to get to the functions…

what i want is to be able to access these functions right clicking (CONTEXT MENU) to make things a lot easier…

i’ve tried to find a way to contact the author of the above script but it seems to be dated way back to 2004 and i couldn’t find any email options…

your help on this code is greatly appreciated.

i’ve tried looking into the script myself and i couldn’t get any more lost than i already am…

[CODE]// bookmark_page.js, ver. 1.0
// visit: www.pdfhacks.com/bookmark_page/

// use this delimiter for serializing our array
var bp_delim= ‘%#%#’;

function SaveData( data ) {
// data is an array of arrays that needs
// to be serialized and stored into a persistent
// global string
var ds= ”;
for( ii= 0; ii< data.length; ++ii ) {
for( jj= 0; jj< 3; ++jj ) {
if( ii!= 0 || jj!= 0 )
ds+= bp_delim;
ds+= data[ii][jj];
}
}
global.pdf_hacks_js_bookmarks= ds;
global.setPersistent( “pdf_hacks_js_bookmarks”, true );
}

function GetData() {
// reverse of SaveData; return an array of arrays
if( global.pdf_hacks_js_bookmarks== null ) {
return new Array(0);
}

var flat= global.pdf_hacks_js_bookmarks.split( bp_delim );
var data= new Array();
for( ii= 0; ii< flat.length; ) {
var record= new Array();
for( jj= 0; jj< 3 && ii< flat.length; ++ii, ++jj ) {
record.push( flat[ii] );
}
if( record.length== 3 ) {
data.push( record );
}
}
return data;
}

function AddBookmark() {
// query the user for a name, and then combine it with
// the current PDF page to create a record; store this record
var label=
app.response( “Bookmark Name:”,
“Bookmark Name”,
“”,
false );
if( label!= null ) {
var record= new Array(3);
record[0]= label;
record[1]= this.path;
record[2]= this.pageNum;

data= GetData();
data.push( record );
SaveData( data );
}
}

function ShowBookmarks() {
// show a pop-up menu; this seems to only work when
// a PDF is alreay in the viewer;
var data= GetData();
var items= ”;
for( ii= 0; ii< data.length; ++ii ) {
if( ii!= 0 )
items+= ‘, ‘;
items+= ‘”‘+ ii+ ‘: ‘+ data[ii][0]+ ‘”‘;
}
// assemble the command and the execute it with eval()
var command= ‘app.popUpMenu( ‘+ items+ ‘ );’;
var selection= eval( command );
if( selection== null ) {
return; // exit
}

// the user made a selection; parse out its index and use it
// to access the bookmark record
var index= 0;
// toString() converts the String object to a string literal
// eval() converts the string literal to a number
index= eval( selection.substring( 0, selection.indexOf(‘:’) ).toString() );
if( index< data.length ) {
try {
// the document must be ‘disclosed’ for us to have any access
// to its properties, so we use these FirstPage NextPage calls
//
app.openDoc( data[index][1] );
app.execMenuItem( “FirstPage” );
for( ii= 0; ii< data[index][2]; ++ii ) {
app.execMenuItem( “NextPage” );
}
}
catch( ee ) {
var response=
app.alert(“Error trying to open the requested document.nShould I remove this bookmark?”, 2, 2);
if( response== 4 && index< data.length ) {
data.splice( index, 1 );
SaveData( data );
}
}
}
}

function DropBookmark() {
// modelled after ShowBookmarks()
var data= GetData();
var items= ”;
for( ii= 0; ii< data.length; ++ii ) {
if( ii!= 0 )
items+= ‘, ‘;
items+= ‘”‘+ ii+ ‘: ‘+ data[ii][0]+ ‘”‘;
}
var command= ‘app.popUpMenu( ‘+ items+ ‘ );’;
var selection= eval( command );
if( selection== null ) {
return; // exit
}

var index= 0;
index= eval( selection.substring( 0, selection.indexOf(‘:’) ).toString() );
if( index< data.length ) {
data.splice( index, 1 );
SaveData( data );
}
}

function ClearBookmarks() {
if( app.alert(“Are you sure you want to erase all bookmarks?”, 2, 2 )== 4 ) {
SaveData( new Array(0) );
}
}

app.addMenuItem( {
cName: “-“, // menu divider
cParent: “View”, // append to the View menu
cExec: “void(0);” } );

app.addMenuItem( {
cName: “Bookmark This Page &5”,
cParent: “View”,
cExec: “AddBookmark();”,
cEnable: “event.rc= (event.target != null);” } );

app.addMenuItem( {
cName: “Go To Bookmark &6”,
cParent: “View”,
cExec: “ShowBookmarks();”,
cEnable: “event.rc= (event.target != null);” } );

app.addMenuItem( {
cName: “Remove a Bookmark”,
cParent: “View”,
cExec: “DropBookmark();”,
cEnable: “event.rc= (event.target != null);” } );

app.addMenuItem( {
cName: “Clear Bookmarks”,
cParent: “View”,
cExec: “ClearBookmarks();”,
cEnable: “event.rc= true;” } );[/CODE]

to post a comment
JavaScript

0Be the first to comment 😎

×

Success!

Help @GoogleMeThis spread the word by sharing this article on Twitter...

Tweet This
Sign in
Forgot password?
Sign in with TwitchSign in with GithubCreate Account
about: ({
version: 0.1.9 BETA 5.25,
whats_new: community page,
up_next: more Davinci•003 tasks,
coming_soon: events calendar,
social: @webDeveloperHQ
});

legal: ({
terms: of use,
privacy: policy
});
changelog: (
version: 0.1.9,
notes: added community page

version: 0.1.8,
notes: added Davinci•003

version: 0.1.7,
notes: upvote answers to bounties

version: 0.1.6,
notes: article editor refresh
)...
recent_tips: (
tipper: @AriseFacilitySolutions09,
tipped: article
amount: 1000 SATS,

tipper: @Yussuf4331,
tipped: article
amount: 1000 SATS,

tipper: @darkwebsites540,
tipped: article
amount: 10 SATS,
)...