// 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。包含三个文件: (1)doc2pdf.vbs (2)word批量转pdf带书签.vb (3)使用说明.txt 两种转换方式,可任君挑选
源资源来自...pdf一直没有原生支持的书签功能,用一个js脚本就可以实现了。由于原文时间较长,放在最新版本的adobe reader XI 里会出错,个人调试修改了几个地方就可以支持最新版本的了
使pdf文件中的书签按首字母的拼音顺序排序。 1)将bookmark.js复制到Program Files (x86)\Adobe\Acrobat DC\Acrobat\Javascripts\目录下。 2)在Adobe Acrobat程序中新建动作,执行 sortBookmark(); 语句。
使用combineRTF.py脚本,示例: comb = combineRTF() td = datetime.date.today() tddtc = dat
面向 Windows 窗体的 PDF 浏览器控件支持注释 PDF 文件,漫游书签,增加和消除文件附件,以及其他特性。这个包包括了自有的 PDF 补偿引擎,其不依赖于任何软件来补偿和打印 PDF 文件. PDFView4NET 包已经在 C# 中...
也有不少人尝试给该软件增加书签功能,但是只能是英文版,改用中文时功能按钮名称就会是乱码。 经过本人不懈努力,终于成功找到了一段能够正常使用的中文显示的书签功能代码,我也是拿来主义,就免费跟大家共享了。...
比如在项目中如果手册是DOC格式的,在项目发布时希望将其转换为PDF格式,并且保留DOC中的书签,链接等。将该过程整合到构建过程中就要求命令行下进行转换。 Michael Suodenjoki展示了使用Office的COM接口进行命令行...
本版本带有 PDF 书签,方便读者朋友阅览。 目录: 第一天:认识MONGODB 从NOSQL说起 NOSQL数据库特点 NOSQL数据库类型 MONGODB简介 数据库、集合、文档命名规范 MONGODB的下载与安装 MONGODB SHELL MONGODB的数据类型...
PDF文档 带书签 Windows 7及其之前的Vista版本都带有脚本命令、批处理文件和命令行工具,这些工具可以帮助管理员更轻松地完成任务,大大提高工作效率。本书通过大量实例,深入浅出地讲解这些工具,为广大Windows用户...
Spark的单机版便于测试,同时本章也会提到通过SSH用Spark的内置部署脚本搭建Spark集群,使用Mesos、Yarn或者Chef来部署Spark。对于Spark在云环境中的部署,本章将介绍在EC2(基本环境和EC2MR)上的部署。如果你的...
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示例:...
这是一个脚本,可从PDF文件中提取注释(突出显示,注释等),并将其格式化为markdown文本。 它旨在用于审阅会议论文。 当前,支持以下注释: 没有附件注释的突出显示首先输出,作为“突出显示”,仅包含突出显示的...
CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 Oracle Database 11g初学者指南 基本信息 原书名: Oracle Database 11g, A Beginner's Guide 原出版社: ...
它在命令行中使用,但更多是作为脚本来使用。 awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。 如果没有指定处理动作,则把匹配...
Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版 原书名:Pro Android C++ with the NDK 原出版社: Apress 作者: (美)Onur Cinar 译者: 于红 佘建伟 冯艳红 丛书名: 移动开发...
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() ...
小型python脚本,用于解析包含书签HTML文件(由Google Chrome导出),并将找到的所有PDF链接下载到与书签的目录结构类似的子目录中。 用途 主要用于习惯将学术论文添加书签,然后发现自己想下载已添加书签的论文的...
进程间通信 文件IO 网络编程进阶 shell脚本基础
技术点71 使用你的脚本合并Pig 11.2.6 合并 技术点72 在Pig 中合并数据 11.2.7 排序 技术点73 元组排序 11.2.8 存储数据 技术点74 在SequenceFiles 中存储数据 11.3 使用Pig 优化用户的工作流程 ...