`
wangyanlong0107
  • 浏览: 481605 次
  • 性别: 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。

分享到:
评论

相关推荐

    word批量转pdf带书签.rar

    可以批量转换word文档为带书签的pdf。包含三个文件: (1)doc2pdf.vbs (2)word批量转pdf带书签.vb (3)使用说明.txt 两种转换方式,可任君挑选

    让PDF文件也支持书签功能

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

    【将pdf文件中的书签按首字母的拼音顺序排序】bookmark.js

    使pdf文件中的书签按首字母的拼音顺序排序。 1)将bookmark.js复制到Program Files (x86)\Adobe\Acrobat DC\Acrobat\Javascripts\目录下。 2)在Adobe Acrobat程序中新建动作,执行 sortBookmark(); 语句。

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

    使用combineRTF.py脚本,示例: comb = combineRTF() td = datetime.date.today() tddtc = dat

    PDFView4NET Render 去水印破解版

    面向 Windows 窗体的 PDF 浏览器控件支持注释 PDF 文件,漫游书签,增加和消除文件附件,以及其他特性。这个包包括了自有的 PDF 补偿引擎,其不依赖于任何软件来补偿和打印 PDF 文件. PDFView4NET 包已经在 C# 中...

    给Adobe Reader XI添加中文书签功能

    也有不少人尝试给该软件增加书签功能,但是只能是英文版,改用中文时功能按钮名称就会是乱码。 经过本人不懈努力,终于成功找到了一段能够正常使用的中文显示的书签功能代码,我也是拿来主义,就免费跟大家共享了。...

    python实现word 2007文档转换为pdf文件

    比如在项目中如果手册是DOC格式的,在项目发布时希望将其转换为PDF格式,并且保留DOC中的书签,链接等。将该过程整合到构建过程中就要求命令行下进行转换。 Michael Suodenjoki展示了使用Office的COM接口进行命令行...

    《10天掌握MongoDB》2012完整版.pdf[带书签]

    本版本带有 PDF 书签,方便读者朋友阅览。 目录: 第一天:认识MONGODB 从NOSQL说起 NOSQL数据库特点 NOSQL数据库类型 MONGODB简介 数据库、集合、文档命名规范 MONGODB的下载与安装 MONGODB SHELL MONGODB的数据类型...

    Windows 7脚本编程和命令行工具指南

    PDF文档 带书签 Windows 7及其之前的Vista版本都带有脚本命令、批处理文件和命令行工具,这些工具可以帮助管理员更轻松地完成任务,大大提高工作效率。本书通过大量实例,深入浅出地讲解这些工具,为广大Windows用户...

    Spark快速数据处理 PDF电子书下载 带书签目录 完整版

    Spark的单机版便于测试,同时本章也会提到通过SSH用Spark的内置部署脚本搭建Spark集群,使用Mesos、Yarn或者Chef来部署Spark。对于Spark在云环境中的部署,本章将介绍在EC2(基本环境和EC2MR)上的部署。如果你的...

    写给大家看的面向对象编程书(第3版).[美]Matt Weisfeld(带详细书签).pdf

    5.6.5 类应当对自己负责 74 5.7 设计时充分考虑可维护性 75 5.7.1 使用迭代 76 5.7.2 测试接口 76 5.8 使用对象持久性 78 5.9 小结 79 5.10 参考书目 79 5.11 本章使用的示例代码 79 5.11.1 TestMath示例:...

    pdfannots:从PDF文件中提取文本注释并设置其格式

    这是一个脚本,可从PDF文件中提取注释(突出显示,注释等),并将其格式化为markdown文本。 它旨在用于审阅会议论文。 当前,支持以下注释: 没有附件注释的突出显示首先输出,作为“突出显示”,仅包含突出显示的...

    Oracle Database 11g初学者指南--详细书签版

    CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 Oracle Database 11g初学者指南 基本信息 原书名: Oracle Database 11g, A Beginner's Guide 原出版社: ...

    sed and awk 101 hacks.pdf (中文版带书签)

    它在命令行中使用,但更多是作为脚本来使用。 awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。 如果没有指定处理动作,则把匹配...

    Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版

    Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版 原书名:Pro Android C++ with the NDK 原出版社: Apress 作者: (美)Onur Cinar 译者: 于红 佘建伟 冯艳红 丛书名: 移动开发...

    PHP和MySQL Web开发第4版pdf以及源码

    2.5 写文件 2.5.1 fwrite()的参数 2.5.2 文件格式 2.6 关闭文件 2.7 读文件 2.7.1 以只读模式打开文件:fopen() 2.7.2 知道何时读完文件:feof() 2.7.3 每次读取一行数据:fgets()、fgetss()和fgetcsv() ...

    download-my-pdfs:下载在chrome导出的书签中找到的PDF

    小型python脚本,用于解析包含书签HTML文件(由Google Chrome导出),并将找到的所有PDF链接下载到与书签的目录结构类似的子目录中。 用途 主要用于习惯将学术论文添加书签,然后发现自己想下载已添加书签的论文的...

    Linux C程序设计大全

    进程间通信 文件IO 网络编程进阶 shell脚本基础

    Hadoop硬实战 [(美)霍姆斯著][电子工业出版社][2015.01]_PDF电子书下载 带书签目录 高清完整版.rar )

    技术点71 使用你的脚本合并Pig 11.2.6 合并 技术点72 在Pig 中合并数据 11.2.7 排序 技术点73 元组排序 11.2.8 存储数据 技术点74 在SequenceFiles 中存储数据 11.3 使用Pig 优化用户的工作流程 ...

Global site tag (gtag.js) - Google Analytics