给pdf添加导航目录
给pdf添加导航目录
我们下载pdf书籍经常需要以下导航功能,没有导航的pdf根本看不下,接下来会分享我添加导航的方法
首先需要下载工具软件,链接:
http://t.cn/Exyss1G
打开软件,点击更改pdf:
在弹出的窗口按顺序操作:
导出完成后存放接口文件的文件夹会有这两个文件:
查看FreePic2Pdf_bkmk.txt。如果原pdf是有目录的,那么这里将有pdf的目录,否则就是空白。
我们用自己的pdf浏览器打开自己的原pdf文件(我用的是Adobe Reader),为方便叙述,我称pdf有标记页码和实际页码,标记页码是写在书上的页码,实际页码是该页在pdf中包括封面在内按顺序排列的页码,对于我下面用来演示的pdf文件,很幸运标记页码和实际的页码是一样的:
我们先给标记页码的第一页加导航目录试试效果,回到之前的FreePic2Pdf_bkmk.txt文件,
键入:1tab1,保存。
再回到以下页面:
弹出导入完成对话框后(注意原pdf文件要关闭掉,否则无法导入完成)再次打开原pdf文件:
已经可以看到导航目录并且可以跳转了,也就是说我们只要编辑好FreePic2Pdf_bkmk.txt文件就好了,tab键之前的内容为要显示的内容,tab键之后的就是实际页码了。但是,翻到书的目录页看看一共有379页,
我们不可能一页一页去键入,可以借助编程工具,笔者用的是Java:
将上面窗口的内容全部复制进FreePic2Pdf_bkmk.txt,同样的操作导入完成后,每个页码都可以跳转了,但是这样光有页码都不知道每页有什么内容,似乎没什么用啊?
我们可以给书中的目录页添加导航,找具体内容就通过目录页指示的页码跳转就好了,实体书也不就是通过看目录找内容嘛。
找到目录所在实体页码:
是英文字母的话,也没关系,编辑FreePic2Pdf_bkmk.txt为:
再次导入就可以看到目录并且可以跳转到目录页了:
这样子添加的导航目录页也可以在其他pdf阅读器看到,比如Chrome里看:
给pdf添加导航目录的更多相关文章
- C#/VB.NET 在Word转PDF时生成目录书签
当我们在转换Word文档到PDF格式时,想保留Word文档的标题作为PDF书签,那么应该如何操作呢?那么本文将以C#及VB.NET代码为例,介绍如何在Word转PDF时生成目录书签.下面是具体方法和步 ...
- C# 给PDF添加图片背景
C# 给PDF添加图片背景 今天要实现的是给PDF文件添加图片背景这个功能.PDF是近年来最流行的文件之一,无论是办公还是日常生活中都经常会用到,很多时候,PDF文件的背景色都是白色,看多了难免觉得累 ...
- wordpress模板学习之导航目录
wordpress的导航目录分为三个部分,一开启,二配置:三使用 开启在functions.php,这个注册会保存在全局变量中,接下来在菜单配置中会看到 register_nav_menu( 'pri ...
- Asp.net MVC 如何向webform一样在IIS里添加虚拟目录
相信很多用webform的程序猿都习惯性的使用虚拟目录的形式来对一个程序添加新的功能,那么在mvc下该如何来弄呢? 首先得有一个项目基层的项目,然后我们在这个项目的基础上新增一个功能模块,例如信息发布 ...
- Android Studio 添加Assets目录
Android Studio 添加Assets目录: 法一: Since Android Studio uses the new Gradle-based build system, you shou ...
- iOS viewController添加导航条以及返回跳转选择
给单独的viewcontroller或者在Appdelegate的主页面添加导航条,只要在viewcontroller上添加navigationcontroller,在添加此navigationcon ...
- .Net程序员学用Oracle系列(1):导航目录
本人从事基于 Oracle 的 .Net 企业级开发近三年,在此之前学习和使用的都是 (MS)SQL Server.未曾系统的了解过 Oracle,所以长时间感到各种不习惯.不方便.怪异和不解,常会遇 ...
- X-003 FriendlyARM tiny4412 uboot移植之添加相应目录文件
X-003 FriendlyARM tiny4412 uboot移植之添加相应目录文件 <<<<<<<<<<<<<< ...
- 【Android Studio安装部署系列】十五、Android studio添加Assets目录
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio新建项目时是没有assets目录,需要自己手动创建. app右键——New——Folder——Asset ...
随机推荐
- ActiveMQ(4)---ActiveMQ原理分析之消息消费
消费端消费消息的原理 我们通过上一节课的讲解,知道有两种方法可以接收消息,一种是使用同步阻塞的MessageConsumer#receive方法.另一种是使用消息监听器MessageListener. ...
- go语言问题集锦
==============================================beego框架=========================================== 1.使 ...
- vim 批量替换使用说明
基本语法: :[addr]s/源字符串/目的字符串/[option] 全局替换命令: :%s/源字符串/目的字符串/g [addr] 表示检索范围,省略时表示当前行. "1,20" ...
- java过滤emoji表情
import java.util.regex.Matcher; import java.util.regex.Pattern; public class test { /** * 表情过滤 * */ ...
- Java demo之时间
jdk原生 public class Start { public static void main(String[] args) { SimpleDateFormat simpleDateForma ...
- celery (二) task
Task task 具有如下特点: task 可以在任何可调用的地方创建.它有双重角色: 定义了当task被调用时,会发送一个消息. 定义了当worker收到消息时会运行消息对应的函数 每个task都 ...
- AX2009里调用.NET DLL的效率问题
经常在AX2009里引用.NET的DLL,因为序列化和反序列化,用.NET的定义的实体方便一些,平时数据量不大,也没觉得有什么问题,今天要把几万条数据从数据库中取出来序列化以后,调用第三方系统的接口, ...
- jquery中的 parseJSON() 源码分析
parseJSON: function( data ) { // Attempt to parse using the native JSON parser first if ( window.JSO ...
- ARTS打卡计划第一周-Algorithm
7. Reverse Integer import math class Solution: def reverse(self, x: int) -> int: ret = 0 if x > ...
- CSS初识盒子
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...