`
wangyanlong0107
  • 浏览: 502383 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

【转】自己写脚本给PDF文件加书签

 
阅读更多

在用PDF阅读文件时,如果页数过多,我们一时无法看完,或者是某一页面需要保存记录,就需要用到书签功能,以便于下次查阅。而普通的PDF(相对于不是高级的版本)是没有书签功能的。那么如何增加书签功能呢?我在网上找到了下面这段代码,经验证可以实现哈~希望对大家有用!

// bookmark_page.js, ver. 1.0

// visit: www.pdfhacks.com/bookmark_page/

// edit:cjs 2008-02-17

// 1 修改为中文标签

// 2 设置书签时可以自动获取当前的书名

// 3 自动获取当前所在的页码与总页数,方便查阅

// 4 实现更多功能可以参看Adobe Reader的SDK

// 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;

}

//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();

   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("打开书签错误. 是否删除本书签?", 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("确认要清除所有的书签吗?", 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: "设置本页为书签(&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;" } );

将以上代码存为bookmark_page.js,放入D:\Program Files\Adobe\Reader 8.0\Reader\Javascripts目录下,然后重启reader。

分享到:
评论

相关推荐

    教你怎样给PDF文件填加书签

    ### 教你怎样给PDF文件添加书签 #### 背景与意义 在日常学习、工作中,我们经常需要阅读大量的PDF文档。然而,对于长时间的阅读或查阅多个文档时,经常会遇到一个问题:如何标记阅读进度或者快速找到之前查看过的...

    知网pdf加书签.rar

    标题中的“知网pdf加书签.rar”表明这个压缩包包含了一种方法或工具,用于在从中国知网(CNKI)下载的PDF文件中添加书签。中国知网是著名的学术文献数据库,用户常常需要下载PDF格式的论文进行阅读和研究。在PDF文件...

    word批量转pdf带书签.rar

    标题中的"word批量转pdf带书签.rar"指的是一个压缩包文件,它的主要功能是将多份Word文档转换成PDF格式,并且转换后的PDF文件会带有书签,这对于组织和导航长文档非常有帮助。书签在PDF中起到了目录的作用,用户可以...

    pdf文档加书签,有说明

    1. 选择或打开PDF文件:首先,你需要选择或打开包含需要加书签的PDF文件。 2. 导入文件到工具:将PDF文件导入到批量处理工具中,可能需要通过点击“添加文件”或拖放操作。 3. 设置书签:定义书签的层级结构,如...

    让PDF文件也支持书签功能(v1.1)

    v1.1的更新确保了每个PDF文件都可以拥有自己的独立书签,这样用户在切换不同文件时,其对应的书签仍然能够正确显示和使用,提高了工作效率。 在压缩包中,有两个文件:`bookmark.js`和`readme.txt`。`bookmark.js`...

    Python提取pdf文件目录_Demo源码

    这个Demo的执行流程大致是这样的:通过命令行指定PDF文件路径和输出格式(JSON或文本),然后运行`bookmark.py`脚本,它会读取PDF,提取书签,将其转换为JSON格式,并根据用户选择的输出方式写入文件。 Python的...

    合并多个RTF文件转换成PDF并添加书签1

    书签文本生成后,通过运行`import_bookmark.cmd`命令行脚本,将这些书签导入到PDF文件中,利用PDFtk的强大功能。 标签中的“python 软件/插件 pandas”表明这个流程依赖于Python编程语言以及pandas库来处理数据,...

    让PDF文件也支持书签功能

    源资源来自...pdf一直没有原生支持的书签功能,用一个js脚本就可以实现了。由于原文时间较长,放在最新版本的adobe reader XI 里会出错,个人调试修改了几个地方就可以支持最新版本的了

    python提取pdf文件目录.zip

    PyPDF2 是一个用于操作PDF文件的纯Python库,它可以读取PDF文件的内容,包括元数据、页面、文本、书签、加密、分割和合并PDF等。对于提取PDF文件的目录,PyPDF2提供了`PdfFileReader`类,通过这个类我们可以获取到...

    PDF文件结构查看器

    PDF文件结构查看器是一款专为分析PDF文档设计的工具,它可以帮助用户深入理解PDF文件的内部构造,并进行数据提取。PDF(Portable Document Format)是一种广泛使用的文档格式,它能够跨平台保持一致的显示效果,因此...

    PDF添加书签javascript代码

    在本文中,我们将探讨如何使用JavaScript为PDF文件添加书签,以及如何在Adobe Reader中实现这一功能。PDF文件中的书签对于组织和导航长文档非常有用,尤其在阅读电子书时。通过使用JavaScript,我们可以创建自定义...

    pdf设置书签

    - 将书签写入PDF文件 在实际开发中,我们可能需要结合PDF处理库,如Adobe的PDF Library、PDFBox(Java)、PyPDF2(Python)或PDF.js(JavaScript)等。这些库提供了API接口,用于操作PDF的元数据、内容和结构,包括...

    超级PDF批量书签编辑

    5. **自定义书签**:用户可以根据自己的需求为每个PDF文件创建定制的书签,比如为章节命名,设置不同的颜色以便区分,甚至可以添加子书签形成层次结构。 6. **兼容性**:好的批量书签编辑工具应该兼容多种PDF标准,...

    PB在线预览PDF文件PDFViewOCX

    5. **编写代码**:使用PB的脚本语言(通常为PBL语言)编写事件处理函数,例如在控件加载时打开指定的PDF文件,或者响应用户的交互操作。 6. **测试与调试**:运行应用程序,确保PDF文件能够正确预览,并且所有预期的...

    PDF文件浏览器

    8. **安全性**:由于PDF文件可能包含恶意代码,软件应有安全机制来防止执行潜在有害的动作,例如JavaScript脚本。 9. **多平台支持**:虽然主要讨论的是C#,但若想实现跨平台,可以选择.NET Core或.NET 5,这样可以...

    PDF文件无损合并

    3. **书签和超链接**:如果源PDF文件包含书签或超链接,合并工具需要将这些元数据一并合并,保持文件的导航功能。 4. **安全性**:如果源PDF文件被加密或设置访问权限,合并工具需要处理这些安全设置,以确保新文件...

    通过书签来注入JS

    10g编程艺术:深入数据库体系结构_有图.pdf”看似与标题“通过书签来注入JS”无关,可能是一个关于Oracle数据库编程的资源,提供了对Oracle 9i和10g版本的深入理解,包括数据库的体系结构、SQL语法、存储过程等。...

    pdf文件转swf格式

    本教程将详细介绍如何使用脚本命令将PDF文件转换为SWF格式。 首先,你需要一个转换工具,如Adobe Acrobat Pro或者开源的PDF2SWF工具。这里我们假设你已经安装了PDF2SWF工具,这是一个命令行工具,适用于Linux、...

    PDF文件格式的标准说明

    此外,还有书签、表单字段和动作脚本等功能,增强了文档的交互性。 8. 加密和安全:PDF允许对文件进行加密,保护内容不被未经授权的访问。同时,还可以设置权限,限制打印、复制、编辑等操作。 9. 压缩:PDF文件...

    [PDF文件格式参考]PDF Reference 1.7.7z

    此版本的PDF参考手册是理解和操作PDF文件的基础。 PDF 1.7的特性包括: 1. **结构化内容**:PDF文件可以包含结构化元数据,允许文档内容被索引、搜索和访问。这有助于无障碍阅读和信息检索。 2. **多媒体支持**:...

Global site tag (gtag.js) - Google Analytics