找到一段处理PDF书签的代码
1把代码保存为X:\Program Files\Adobe\Reader 8.0\Reader\Javascripts\bookmark_page.js
2设置Adobe Reader首选项,因特网下参数全选
code:
// bookmark_page.js, ver. 1.0
// visit: www.pdfhacks.com/bookmark_page/
// 1 修改为中文标签
// 2 设置书签时可以自动获取当前的书名
// 3 自动获取当前所在的页码与总页数,方便查阅
// 4 实现更多功能可以参看Adobe Reader的SDK
// use this delimiter for serializing our array
var bp_delim= '%#%#';
function hashCode(name){
var h=0;
for (var i=0;i<name.length;i++){
h = 31*h + name.charCodeAt(i);
h = h % 0xffffffff;
}
return h;
}
function SaveData( data,bookname ) {
// data is an array of arrays that needs
// to be serialized and stored into a persistent
// global string
var bookmark = eval("global.bookmark_"+hashCode(bookname));
//app.alert("savedata:"+bookmark);
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];
}
}
eval( "global.bookmark_"+hashCode(bookname)+" = ds " );
global.setPersistent( "bookmark_"+hashCode(bookname), true );
}
function GetData(bookname) {
//app.alert("getdata:bookmark_"+hashCode(bookname));
var bookmark = eval("global.bookmark_"+hashCode(bookname));
//app.alert("getdata:"+bookmark);
if( typeof bookmark == "undefined" || bookmark == null ){
return new Array(0);
}
var flat= bookmark.split( bp_delim );
var data= new Array(0);
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;
}
//Get Current Date
function DateNow(){
var d, s ;
d = new Date();
s = d.getFullYear()+"/";
s += (d.getMonth() + 1) + "/";
s += d.getDate() ;
/**//*
s += d.getHours() + ":";
s += d.getMinutes() + ":";
s += d.getSeconds() ;
*/
return(s);
}
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 thisfilename=this.documentFileName;
thisfilename=thisfilename.substr(0,thisfilename.lastIndexOf("."));
var numPlugInss=this.pageNum+1;
var currentdate=DateNow();
var label=
app.response( "书签名称,可以修改以便于记忆:",
"书签名称",
"《"+thisfilename+"》第 "+numPlugInss+" 页/共 "+this.numPages+" 页"+currentdate,
false );
if( label!= null ) {
var record= new Array(3);
record[0]= label;
record[1]= this.path;
record[2]= this.pageNum;
data= GetData(this.documentFileName);
data.push( record );
SaveData( data,this.documentFileName );
}
}
function ShowBookmarks() {
// show a pop-up menu; this seems to only work when
// a PDF is alreay in the viewer;
var data= GetData(this.documentFileName);
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" );
}*/
this.pageNum = data[index][2];
}
catch( ee ) {
var response=
app.alert("打开书签错误. 是否删除本书签?", 2, 2,"删除书签");
if( response== 4 && index< data.length ) {
data.splice( index, 1 );
SaveData( data,this.documentFileName );
}
}
}
}
function DropBookmark() {
// modelled after ShowBookmarks()
var data= GetData(this.documentFileName);
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,this.documentFileName );
}
}
function ClearBookmarks() {
if( app.alert("确认要清除所有的书签吗?", 2, 2,"删除书签" )== 4 ) {
SaveData( new Array(0),this.documentFileName );
}
}
app.addMenuItem( {
cName: "-", // menu divider
cParent: "View", // append to the View menu
cExec: "void(0);" } );
app.addMenuItem( {
cName: "设置本页为书签(&B)",
cParent: "View",
cExec: "AddBookmark();",
cEnable: "event.rc= (event.target != null);" } );
app.addMenuItem( {
cName: "转到指定书签(&T)",
cParent: "View",
cExec: "ShowBookmarks();",
cEnable: "event.rc= (event.target != null);" } );
//cEnable: "event.rc= true;" } );
app.addMenuItem( {
cName: "删除一个书签(&D)",
cParent: "View",
cExec: "DropBookmark();",
cEnable: "event.rc= (event.target != null);" } );
app.addMenuItem( {
cName: "清除所有书签(&C)",
cParent: "View",
cExec: "ClearBookmarks();",
cEnable: "event.rc= true;" } );
分享到:
相关推荐
"一键修改PDF书签为适合宽度"的工具就是为了解决这个问题而设计的,它能够批量处理PDF文档中的所有书签,自动调整至适合宽度,极大地提升了用户在查阅和管理PDF文档时的体验。 这个工具的核心功能主要涉及以下几个...
也可以修复pdf书签乱码问题(一般是编码问题) 方法:启动软件,在右下角点击“更改pdf”,点击“从pdf取书签”选择路径然后点击“3、开始”,这样就取出来编码正确的书签,然后再点击“往pdf挂书签”选择路径然后...
3. **导入书签**:PDFlib支持导入PDF书签文件,这些文件通常为XML格式,包含了PDF文档的层次结构和导航信息。你可以通过调用特定的方法,如`import_bookmarks()`,将XML书签数据合并到PDF文档中。 4. **修改PDF属性...
开发者可能通过修改或扩展这个脚本来实现对PDF书签的支持,包括添加、编辑、删除书签,以及优化书签的显示和交互体验。 另一方面,`readme.txt`通常包含插件的安装指南、使用说明、更新日志或者开发者联系方式等...
PDF书签编辑的基础概念包括: 1. **书签**:PDF书签类似于电子书中的目录,可以点击跳转至对应页面。它们是PDF元数据的一部分,显示在PDF阅读器的侧边栏中,方便用户浏览和定位内容。 2. **批量处理**:批量处理是...
本示例"Python提取pdf文件目录_Demo源码"就展示了如何使用Python从PDF文档中抽取书签(目录)并将其转换为JSON格式,这对于需要处理大量PDF文献或需要构建索引的项目非常有用。 首先,我们需要了解涉及到的主要...
标签“PDF书签”是关键词,说明重点在于如何处理PDF文档的书签功能。“中国知网”再次强调了这个工具是为了解决从该网站下载的PDF文件的问题。“bas文件”通常是指Basic语言的源代码文件,这里可能是指提供了一个用...
此外,理解PDF书签的XML结构,甚至可以自定义脚本批量处理,但这需要一定的技术基础。 总之,这个教程和工具旨在简化为PDF添加书签的过程,让阅读和管理长篇PDF变得更加高效。用户只需遵循说明,即可充分利用书签...
为Adobe Reader添加书签功能,一直用Adobe Reader看pdf文档,但是发现它竟然没有书签功能。导致每次打开文档后都要从第一页往后翻。。。。于是google了一下,发现了两种解决方法。 1. Reader本身提供了一个记忆上次...
总之,这个Matlab编译的工具提供了一种高效、便捷的方式来整理JPG图片,将其转化为带有书签的PDF文档,这对于需要管理和分享图片集合的用户来说是一个非常实用的解决方案。通过这样的自动化处理,用户可以避免手动...
总的来说,PDF补丁丁0.5.0.1816提供了一个全面的PDF编辑解决方案,尤其是对于书签管理有着独特的优势。通过与这些底层库的结合,软件能够稳定且高效地处理各种PDF任务,无论是基本的编辑还是高级的书签操作。对于...
为了解决这一问题,有人开发了一个能够给PDF添加书签的小工具,并且还特别进行了优化处理,以防止书签出现乱码的情况。 #### 添加书签的方法 1. **打开编辑的首选项** - 首先,在Adobe Reader软件中找到并打开...
PDF书签和链接是PDF文档中的重要组成部分,它们极大地增强了用户对PDF文件的导航和交互体验。Java作为一种广泛使用的编程语言,提供了丰富的库和工具来处理PDF文档,包括添加书签、设置链接以及调整缩放比例等操作。...
根据提供的文件信息,“JAVA并发编程实践 中文 高清 带书签 完整版 Doug Lea .pdf”,我们可以推断出这份文档主要聚焦于Java并发编程的技术实践与理论探讨。下面将从多个角度来解析这个文档可能涵盖的关键知识点。 ...
这本书的PDF高清晰中文书签版,提供了方便的导航,使得学习过程更加高效。 在书中,你可以了解到以下关键知识点: 1. **数据库基础**:理解数据库的基本概念,如关系模型、表、字段和记录,以及如何创建和管理...
总结来说,Spire.pdf提供了一个强大且灵活的解决方案,帮助开发者克服PDF打印的页数限制问题。通过简单易用的API,我们能够轻松地实现对PDF文档的无限制打印,无论是少量还是大量页面,都能处理得游刃有余。这使得...
完整版PDF电子书下载 带索引书签目录高清版。绝对的完整、高清,有目录,带索引书签。 对于程序员而言,标准库与语言本身同样重要,它好比一个百宝箱,能为各种常见的任务提供完美的解决方案,所以本书是所有Python...
标题"Activiti实战 PDF电子书-含书签目录"明确指出,这是一个关于Activiti的实战指南,以PDF格式呈现,并且包含了书签目录,方便读者快速定位到所需内容。描述中的重复信息进一步强调了书籍的实用性和易用性。 **...