PDF自动生成页码

原文:http://www.2cto.com/kf/201108/100715.html


在Acrobat中利用Javascript根据目录一键生成带页码的书签


网络上很多扫描版的PDF电子书都缺少书签。特别是对计算机教程类的大部头来说,由于需要经常翻阅,没有书签的痛苦可想而知。
制作书签的办法主要有:
Ctrl+B来一个个地创建;
在Word2007里面生成书签,然后和内容主体合并;
利用JavaScript生成;
今天我来讲讲怎样利用JavaScript在Acrobat一键生成书签。
基本思路:大多数的扫描版PDF电子图书都可以在官网或者各大网上书店找到目录,很多都是带有页码的(图1)。 将目录用文本文件保存起来,作为附件添加到PDF中,利用JavaScript读取附件,生成数组,用循环处理字符串,再生成书签。

image

图1
 
下面是具体步骤:
1.把目录复制粘贴到一个文本文件中,确保所有的分隔符是半角的空格(正则表达式为\s),并保存为UTF-8的编码。(图2,图3)

image

图2

image

图3
2.在Acrobat把目录.txt添加到附件里(图4)并保存PDF文件。

image

图4
3.下载文末的附件把Bookmark.js文件解压出来复制到Acrobat安装目录下的JavaScript文件夹里面,默认是Adobe\Acrobat 9.0\Acrobat\Javascripts
Bookmark.js文件内容:
app.addMenuItem({    
  cName: "从附件添加书签", cParent: "Tools",
  cExec: "bookm();",
  cEnable: "event.rc= (event.target != null);" });

    
var Name_Bookmark;
var Page_Bookmark;


function bookm()
{
  var StartNum = app.response({    
    cQuestion: "输入页码为1的实际页数",    
    cTitle: "若缺少1页码,则输入2页码的实际页数,依此类推",    
    cDefault: "1",    
    cLabel: "输入:"
    });
    
  if (StartNum!=null)
  {
    var myThis=event.target;
    var attName=myThis.dataObjects[0].name;
    var oFile = myThis.getDataObjectContents(attName);
    var arrFile = util.stringFromStream(oFile, "utf-8");
    var tArr=arrFile.split("\n");

    myThis.bookmarkRoot.remove();
    myThis.bookmarkRoot.createChild("目录");

    var fSpc;
    var lSpc;
    var tCht;
    var oDot;
    var Num_Dot;
    
    var MenuBookmark=myThis.bookmarkRoot.children[0];//目录
    var ChaptersBookmark;
    var SectionsBookmark;
    var SubSectionsBkm;
    var SubSectionsBkm1;
        
    var i;
    var a;
    var b;//首空格后的字符
    for (i=0;i<tArr.length;i++)
    {
      a=tArr[i];
      if (a.length>2)//空行的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)
        {
          case 0:
            ChaptersBookmark=CreateSubBkm(MenuBookmark);
            break;
          case 1:
            SectionsBookmark=CreateSubBkm(ChaptersBookmark);
            break;
          case 2:
            SubSectionsBkm=CreateSubBkm(SectionsBookmark);
            break;
          case 3:
            SubSectionsBkm1=CreateSubBkm(SubSectionsBkm);
            break;
          default:
            break;
        }

      }
    }
  }    
}
    
function CreateSubBkm(RootBkm)//在RootBkm书签底下创建一个新书签,并返回新书签对象
{
  var RootBkm;
  var subBookmark;
  RootBkm.createChild(Name_Bookmark, "this.pageNum="+Page_Bookmark+";");
  RootBkm.insertChild(RootBkm.children[0],RootBkm.children.length);
  subBookmark=RootBkm.children[RootBkm.children.length-1];//目录中最后一个章节
  return subBookmark;
}    
    
4.重新打开Acrobat,并打开刚才保存了附件的PDF文件。选择"工具"菜单下的"从附件添加书签”选项。

图5
 
接下来弹出的这个对话框要讲解一下(图6)

image

图6
页码为1的页面就是正文开始的第一页,但一般都不是PDF开始的第一页。
如图7所示,页码为1的页面是PDF文件的第14页,这里我已修改了页码。

image

图7
这样就可以按照目录的页数直接找到要看的页面,就是看实体书一样。
因此,对于图7来说,图6中就应该输入14,然后按确定,稍等一下,带连接的书签就自动生成了。

image

图8
有的PDF没有页码1的页面,只有页码2或其它,这时需要把推断出的页码1的页数填入

image

如上图,页码2的页数是15,则页码1的页数是14,以此类推。
 
注意事项:
一.这个脚本只能处理最多5层的书签,如
目录--第一章--1.1--1.1.1--1.1.1.1
需要处理更多的层数请自己修改脚本,很简单的。
二.有的PDF正文内可能插有其他的内容,例如发布网站的广告等,这时要把这些页面删掉,以确保正文的页数跟目录是一致的,否则将连接不到正确的页面。
三.脚本也能处理没有页数的目录,但是需要手动设置书签的目标了…
四.Acrobat Pro的版本要高于9.3,否则不能读取附件内容。


好了,本文就到此结束了,有任何疑问请回帖,希望本文对你有帮助!
本文出自 “一些心得” 博客


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: WPS Office是一款功能强大的办公软件,其中包含了WPS Writer文档编辑器和WPS PDF转换器。 WPSPDF自动生成目录功能可以很方便地为PDF文档生成目录。操作步骤如下: 首先,将需要生成目录的文档转换为PDF格式。可以在WPS Writer中打开文档,然后点击菜单栏中的"文件",选择"转换为PDF",将文档保存为PDF格式。 接着,在WPS PDF转换器中打开刚才保存的PDF文件。点击工具栏中的"目录"按钮,系统将自动扫描文档内容,并根据章节标题、子标题等信息生成目录。 生成的目录列表将显示在PDF文档的侧边栏中,用户可以根据需要将其打开或关闭。 如果文档中有标题或内容发生变化,可以重新点击"目录"按钮进行更新。系统将重新扫描文档并生成新的目录。 此外,用户还可以自定义目录样式。点击工具栏中的"目录选项"按钮,可以设置目录的字体、字号、颜色等属性。 需要注意的是,要正确生成目录,文档中的章节标题、子标题等必须使用WPS Writer的相关样式进行标记。例如,将章节标题设置为"标题1"样式,子标题设置为"标题2"样式。 总之,WPSPDF自动生成目录功能使得对于含有复杂章节结构的文档,用户可以很方便地生成目录列表,提升文档的可读性和导航性。这一功能的使用也非常简单,只需几步操作即可完成目录的生成。 ### 回答2: WPS PDF是一款功能强大的PDF编辑器,其中自动生成目录功能让用户能够轻松地为文档添加目录。 首先,打开WPS PDF并加载你想要自动生成目录的PDF文档。在左侧的“工具”栏中,你会看到一个名为“大纲”的选项。点击它,你将看到一个弹出窗口。 接下来,你需要标记出你想要在目录中显示的部分标题。在文档中选择第一个标题并在“大纲”窗口中点击“添加”。这将添加第一级标题。 如果文档中有更多级别的标题,你可以在“大纲”窗口中选择相应级别,然后选择相应标题并点击“添加”。通过这种方式,你可以为文档中的多个标题添加目录级别。 完成所有标题的标记后,点击“生成目录”按钮。WPS PDF将根据你在“大纲”窗口中添加的标题自动创建目录。你可以选择将目录插入到当前页面或者作为整个文档的最后一页。 生成目录后,你可以对其进行进一步的调整和编辑。你可以添加页码,格式化目录的样式以及调整标题的层次结构。通过使用WPS PDF的其他编辑功能,你还可以为目录添加书签、链接等。 最后,保存你的文档,并在需要时打印或分享。现在,你已经成功地使用WPS PDF自动生成了一个含有目录的PDF文档。 总之,WPS PDF自动生成目录功能为用户提供了一个简便而强大的工具,使他们能够快速创建具有标准格式的目录,提高文档的可读性和导航性。 ### 回答3: WPS PDF是一款功能强大的PDF编辑工具,它不仅可以编辑和转换PDF文件,还有自动生成目录的功能。 在使用WPS PDF自动生成目录功能的时候,首先我们需要打开需要编辑的PDF文件。然后,点击软件界面上方的“导航”选项卡,接着点击“目录”按钮。 在弹出的目录管理窗口中,我们可以选择自动生成目录的样式。WPS PDF提供了多种不同的样式可供选择,包括带数字标签、带点标签、不带标签等。我们可以根据自己的需求选择相应的样式。 接下来,我们需要选择生成目录的范围。WPS PDF支持生成整个文档的目录,也支持根据文档的标题级别生成目录。如果我们只想生成某几个章节的目录,可以选择相应的章节进行生成。 在确定样式和范围后,我们点击“确定”按钮即可生成目录。WPS PDF会根据文档的标题级别自动生成目录,并将其插入到文档的指定位置。 生成目录后,我们可以对目录进行进一步的编辑。例如,可以修改目录的字体、样式和标题级别等。只需要选中目录,然后点击界面上方的“样式”选项卡,进行相应的编辑即可。 总之,WPS PDF提供了便捷的自动生成目录功能,可以帮助我们更好地组织和管理PDF文件的内容。无论是编辑大型报告还是整理学习资料,WPS PDF都能提供高效的工具和功能,让我们的工作更加便捷和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值