为pdf文件自动添加目录.pdf
《为pdf文件自动添加目录.pdf》由会员分享,可在线阅读,更多相关《为pdf文件自动添加目录.pdf(7页珍藏版)》请在冰点文库上搜索。
用用AcrobatAcrobat自动生成自动生成pdfpdf目录目录目前网上流传的“在Acrobat中利用Javascript根据目录一键生成带页码的书签”的方法会在Acrobat的“工具”菜单增加“从附件添加书签”选项,然而在AcrobatXI中已经没有这个菜单(如下图)。
为此,AcrobatXI用户需要在原有方法基础上进行修改。
图1下面是具体步骤:
1.把目录复制粘贴到一个文本文件menu.txt中,确保所有的分隔符是半角的空格(正则表达式为s),并保存为UTF-8的编码(图2,图3)。
图2图32.在Acrobat把menu.txt添加到附件里(图4)并保存PDF文件。
图43.把Bookmark.js文件解压出来复制到Acrobat安装目录下的JavaScript文件夹里面,默认是AdobeAcrobat11.0AcrobatJavascriptsBookmark.js文件内容如下(请将代码粘贴到文本编辑器例如记事本、NotePad+中,并保存为Bookmark.js):
app.addMenuItem(cName:
Addbookmarksfromattach,cParent:
Edit,cExec:
bookm();,cEnable:
event.rc=(event.target!
=null););varName_Bookmark;varPage_Bookmark;functionbookm()varStartNum=app.response(cQuestion:
PleaseentertherealpagenumberofPage1!
cTitle:
Entertherealpagenumberofthefirstpage,cDefault:
1,cLabel:
Enter:
);if(StartNum!
=null)varmyThis=event.target;varattName=myThis.dataObjects0.name;varoFile=myThis.getDataObjectContents(attName);vararrFile=util.stringFromStream(oFile,utf-8);vartArr=arrFile.split(n);myThis.bookmarkRoot.remove();myThis.bookmarkRoot.createChild(Contents);varfSpc;varlSpc;vartCht;varoDot;varNum_Dot;varMenuBookmark=myThis.bookmarkRoot.children0;/目录varChaptersBookmark;varSectionsBookmark;varSubSectionsBkm;varSubSectionsBkm1;vari;vara;varb;/首空格后的字符for(i=0;i2)/空行的length=1,设置为2即不添加空行fSpc=a.search(/s/);/首空格位置tCht=a.slice(0,fSpc);/首空格前的字符oDot=tCht.match(/./g);/匹配.符号Num_Dot=(oDot=null?
0:
oDot.length);lSpc=a.lastIndexOf(a.charAt(fSpc);/末空格的位置b=Number(a.slice(lSpc);Page_Bookmark=(isNaN(b)?
0:
b-2+Number(StartNum);/书签指向的页码Name_Bookmark=(isNaN(b)?
a:
a.slice(0,lSpc);/书签的名字switch(Num_Dot)case0:
ChaptersBookmark=CreateSubBkm(MenuBookmark);break;case1:
SectionsBookmark=CreateSubBkm(ChaptersBookmark);break;case2:
SubSectionsBkm=CreateSubBkm(SectionsBookmark);break;case3:
SubSectionsBkm1=CreateSubBkm(SubSectionsBkm);break;default:
break;functionCreateSubBkm(RootBkm)/在RootBkm书签底下创建一个新书签,并返回新书签对象varRootBkm;varsubBookmark;RootBkm.createChild(Name_Bookmark,this.pageNum=+Page_Bookmark+;);RootBkm.insertChild(RootBkm.children0,RootBkm.children.length);subBookmark=RootBkm.childrenRootBkm.children.length-1;/目录中最后一个章节returnsubBookmark;4.重新用Acrobat打开刚才保存了附件的PDF文件。
选择编辑菜单下的Addbookmarksfromattach”选项。
图5接下来弹出的这个对话框要讲解一下(图6)图6页码为1的页面就是正文开始的第一页,但一般都不是PDF开始的第一页。
如图7所示,页码为1的页面是PDF文件的第14页,这里已修改了页码。
图7这样就可以按照目录的页数直接找到要看的页面,就是看实体书一样。
因此,对于图7来说,图6中就应该输入14,然后按确定,稍等一下,带连接的书签就自动生成了。
图8有的PDF没有页码1的页面,只有页码2或其它,这时需要把推断出的页码1的页数填入图9如上图,页码2的页数是15,则页码1的页数是14,以此类推。
注意事项:
1.这个脚本只能处理最多4层的书签,如:
第一章-1.1-1.1.1-1.1.1.1需要处理更多的层数请自己修改脚本。
2.如果原始目录没有章节编号,而是采用缩进形式分层,如:
Javascript入门1网页中的Javascript和基本语法15Javascript语法15可以这样编写menu.txt:
Javascript入门1.网页中的Javascript和基本语法15.Javascript语法15也就是说,第一层目录不带含有句点的前缀,第二层目录带有一个句点的前缀,第三层带有两个句点,以此类推。
3.有的PDF正文内可能插有其他的内容,例如发布网站的广告等,这时要把这些页面删掉,以确保正文的页数跟目录是一致的,否则将连接不到正确的页面。
4.脚本也能处理没有页数的目录,但是需要手动设置书签的目标了5.AcrobatPro的版本要高于9.3,否则不能读取附件内容。
图10本文在网络文章“在Acrobat中利用Javascript根据目录一键生成带页码的书签”基础上进行修改以适应AcrobatXI,在此感谢原作者的辛勤劳动!