mirror of
https://github.com/LCTT/TranslateProject.git
synced 2024-12-26 21:30:55 +08:00
Merge pull request #29660 from wxy/20220105-Create-bookmarks-for-your-PDF-with-pdftk
RP:published/20220105 Create bookmarks for your PDF with pdftk.md
This commit is contained in:
commit
b1bfab6fe3
@ -3,30 +3,29 @@
|
|||||||
[#]: author: "Seth Kenlon https://opensource.com/users/seth"
|
[#]: author: "Seth Kenlon https://opensource.com/users/seth"
|
||||||
[#]: collector: "lujun9972"
|
[#]: collector: "lujun9972"
|
||||||
[#]: translator: "toknow-gh"
|
[#]: translator: "toknow-gh"
|
||||||
[#]: reviewer: " "
|
[#]: reviewer: "wxy"
|
||||||
[#]: publisher: " "
|
[#]: publisher: "wxy"
|
||||||
[#]: url: " "
|
[#]: url: "https://linux.cn/article-15973-1.html"
|
||||||
|
|
||||||
使用 pdftk 为 PDF 文档创建书签
|
使用 pdftk 为 PDF 文档创建书签
|
||||||
======
|
======
|
||||||
充分利用现有的技术,提供书签以帮助用户。
|
|
||||||
![Business woman on laptop sitting in front of window][1]
|
> 充分利用现有的技术,提供书签以帮助用户。
|
||||||
|
|
||||||
|
![][0]
|
||||||
|
|
||||||
在 [介绍 pdftk-java][2] 中, 我展示了如何在脚本中使用 `pdftk-java` 来快速修改 PDF 文件。
|
在 [介绍 pdftk-java][2] 中, 我展示了如何在脚本中使用 `pdftk-java` 来快速修改 PDF 文件。
|
||||||
|
|
||||||
但是,`pdftk-java` 最有用的场景是处理那种动辄几百页的没有目录的大 PDF 文件。这里所谓的目录不是指文档前面供打印的目录,而是指显示在 PDF 阅读器侧边栏里的目录,它在 PDF 格式中的正式叫法是“书签”。
|
但是,`pdftk-java` 最有用的场景是处理那种动辄几百页的没有目录的大 PDF 文件。这里所谓的目录不是指文档前面供打印的目录,而是指显示在 PDF 阅读器侧边栏里的目录,它在 PDF 格式中的正式叫法是“<ruby>书签<rt>bookmarks</rt></ruby>”。
|
||||||
|
|
||||||
![Screenshot of a sidebar table of contents next to a PDF][3]
|
![Screenshot of a sidebar table of contents next to a PDF][3]
|
||||||
|
|
||||||
(Seth Kenlon, [CC BY-SA 4.0][4])
|
|
||||||
|
|
||||||
如果没有书签,就只能通过上下滚动或全局搜索文本来定位想要的章节,这非常麻烦。
|
如果没有书签,就只能通过上下滚动或全局搜索文本来定位想要的章节,这非常麻烦。
|
||||||
|
|
||||||
PDF 文件的另一个恼人的小问题是缺乏元数据,比如标题和作者。如果你打开过一个标题栏上显示类似 “Microsoft Word - 04_Classics_Revisited.docx” 的 PDF 文件,你就能体会那种感觉了。
|
PDF 文件的另一个恼人的小问题是缺乏元数据,比如标题和作者。如果你打开过一个标题栏上显示类似 “Microsoft Word - 04_Classics_Revisited.docx” 的 PDF 文件,你就能体会那种感觉了。
|
||||||
|
|
||||||
`pdftk-java` 让我能够创建自己的书签,我再也不面对这些问题了。
|
`pdftk-java` 让我能够创建自己的书签,我再也不面对这些问题了。
|
||||||
|
|
||||||
|
|
||||||
### 在 Linux 上安装 pdftk-java
|
### 在 Linux 上安装 pdftk-java
|
||||||
|
|
||||||
正如 `pdftk-java` 的名称所示的,它是用 Java 编写的。它能够在所有主流操作系统上运行,只要你安装了 Java。
|
正如 `pdftk-java` 的名称所示的,它是用 Java 编写的。它能够在所有主流操作系统上运行,只要你安装了 Java。
|
||||||
@ -41,26 +40,19 @@ Windows 用户可以安装 [Red Hat's Windows build of OpenJDK][6]。
|
|||||||
2. 用文本编辑器打开 `~/.bashrc`,添加 `alias pdftk='java -jar $HOME/.local/bin/pdftk-all.jar'`
|
2. 用文本编辑器打开 `~/.bashrc`,添加 `alias pdftk='java -jar $HOME/.local/bin/pdftk-all.jar'`
|
||||||
3. 运行 `source ~/.bashrc` 使新的 Bash 设置生效。
|
3. 运行 `source ~/.bashrc` 使新的 Bash 设置生效。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 数据转储
|
### 数据转储
|
||||||
|
|
||||||
修改元数据的第一步是抽取 PDF 当前的数据文件。
|
修改元数据的第一步是抽取 PDF 当前的数据文件。
|
||||||
|
|
||||||
现在的数据文件可能并没包含多少内容,但这也是一个不错的开端。
|
现在的数据文件可能并没包含多少内容,但这也是一个不错的开端。
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
$ pdftk mybigfile.pdf \
|
$ pdftk mybigfile.pdf \
|
||||||
data_dump \
|
data_dump \
|
||||||
output bookmarks.txt
|
output bookmarks.txt
|
||||||
|
|
||||||
```
|
```
|
||||||
生成的 `bookmarks.txt` 文件中包含了输入 PDF 文件 `mybigfile.pdf` 的所有元数据和一大堆无用数据。
|
生成的 `bookmarks.txt` 文件中包含了输入 PDF 文件 `mybigfile.pdf` 的所有元数据和一大堆无用数据。
|
||||||
|
|
||||||
|
|
||||||
### 编辑元数据
|
### 编辑元数据
|
||||||
|
|
||||||
用文本编辑器(比如 [Atom][9] 或 [Gedit][10])打开 `bookmarks.txt` 以编辑 PDF 元数据。
|
用文本编辑器(比如 [Atom][9] 或 [Gedit][10])打开 `bookmarks.txt` 以编辑 PDF 元数据。
|
||||||
@ -68,8 +60,6 @@ output bookmarks.txt
|
|||||||
元数据的格式和数据项直观易懂:
|
元数据的格式和数据项直观易懂:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
InfoBegin
|
InfoBegin
|
||||||
InfoKey: Creator
|
InfoKey: Creator
|
||||||
InfoValue: Word
|
InfoValue: Word
|
||||||
@ -94,10 +84,9 @@ PageMediaRotation: 0
|
|||||||
PageMediaRect: 0 0 612 792
|
PageMediaRect: 0 0 612 792
|
||||||
PageMediaDimensions: 612 792
|
PageMediaDimensions: 612 792
|
||||||
[...]
|
[...]
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
你可以将 `InfoValue` 的值修改为对当前 PDF 有意义的内容。比如可以将 Creator 字段从 Word 修改为实际的作者或出版社名称。比起使用导出程序自动生成的标题,使用书籍的实际标题会更好。
|
你可以将 `InfoValue` 的值修改为对当前 PDF 有意义的内容。比如可以将 `Creator` 字段从 `Word` 修改为实际的作者或出版社名称。比起使用导出程序自动生成的标题,使用书籍的实际标题会更好。
|
||||||
|
|
||||||
你也可以做一些清理工作。在 `NumberOfPages` 之后的行都不是必需的,可以删除这些行的内容。
|
你也可以做一些清理工作。在 `NumberOfPages` 之后的行都不是必需的,可以删除这些行的内容。
|
||||||
|
|
||||||
@ -105,15 +94,11 @@ PageMediaDimensions: 612 792
|
|||||||
|
|
||||||
PDF 书签的格式如下:
|
PDF 书签的格式如下:
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
BookmarkBegin
|
BookmarkBegin
|
||||||
BookmarkTitle: My first bookmark
|
BookmarkTitle: My first bookmark
|
||||||
BookmarkLevel: 1
|
BookmarkLevel: 1
|
||||||
BookmarkPageNumber: 2
|
BookmarkPageNumber: 2
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
* `BookmarkBegin` 表示这是一个书签。
|
* `BookmarkBegin` 表示这是一个书签。
|
||||||
@ -121,8 +106,6 @@ BookmarkPageNumber: 2
|
|||||||
* `BookmarkLevel` 书签层级。如果书签层级为 2,它将出现在上一个书签的小三角下。如果设置为 3,它会显示在上一个 2 级书签的小三角下。这让你能为章以及其中的节设置书签。
|
* `BookmarkLevel` 书签层级。如果书签层级为 2,它将出现在上一个书签的小三角下。如果设置为 3,它会显示在上一个 2 级书签的小三角下。这让你能为章以及其中的节设置书签。
|
||||||
* `BookmarkPageNumber` 点击书签时转到的页码。
|
* `BookmarkPageNumber` 点击书签时转到的页码。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
为你需要的章节创建书签,然后保存文件。
|
为你需要的章节创建书签,然后保存文件。
|
||||||
|
|
||||||
### 更新书签信息
|
### 更新书签信息
|
||||||
@ -130,12 +113,9 @@ BookmarkPageNumber: 2
|
|||||||
现在已经准备好了元数据和书签,你可以将它们导入到 PDF 文件中。实际上是将这些信息导入到一个新的 PDF 文件中,它的内容与原 PDF 文件相同:
|
现在已经准备好了元数据和书签,你可以将它们导入到 PDF 文件中。实际上是将这些信息导入到一个新的 PDF 文件中,它的内容与原 PDF 文件相同:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
$ pdftk mybigfile.pdf \
|
$ pdftk mybigfile.pdf \
|
||||||
update_info bookmarks.txt \
|
update_info bookmarks.txt \
|
||||||
output mynewfile.pdf
|
output mynewfile.pdf
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
生成的 `mynewfile.pdf` 包含了你设置的全部元数据和书签。
|
生成的 `mynewfile.pdf` 包含了你设置的全部元数据和书签。
|
||||||
@ -148,6 +128,8 @@ PDF 文件中是否包含定制化的元数据和书签可能并不会影响销
|
|||||||
|
|
||||||
使用 `pdftk-java` 来简化这个过程,用户会感激不尽。
|
使用 `pdftk-java` 来简化这个过程,用户会感激不尽。
|
||||||
|
|
||||||
|
*(题图:MJ/f8869a66-562d-4ee4-9f2d-1949944d6a9c)*
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
via: https://opensource.com/article/22/1/pdf-metadata-pdftk
|
via: https://opensource.com/article/22/1/pdf-metadata-pdftk
|
||||||
@ -155,7 +137,7 @@ via: https://opensource.com/article/22/1/pdf-metadata-pdftk
|
|||||||
作者:[Seth Kenlon][a]
|
作者:[Seth Kenlon][a]
|
||||||
选题:[lujun9972][b]
|
选题:[lujun9972][b]
|
||||||
译者:[toknow-gh](https://github.com/toknow-gh)
|
译者:[toknow-gh](https://github.com/toknow-gh)
|
||||||
校对:[校对者ID](https://github.com/校对者ID)
|
校对:[wxy](https://github.com/wxy)
|
||||||
|
|
||||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||||
|
|
||||||
@ -171,3 +153,4 @@ via: https://opensource.com/article/22/1/pdf-metadata-pdftk
|
|||||||
[8]: https://opensource.com/article/17/6/set-path-linux
|
[8]: https://opensource.com/article/17/6/set-path-linux
|
||||||
[9]: https://opensource.com/article/20/12/atom
|
[9]: https://opensource.com/article/20/12/atom
|
||||||
[10]: https://opensource.com/article/20/12/gedit
|
[10]: https://opensource.com/article/20/12/gedit
|
||||||
|
[0]: https://img.linux.net.cn/data/attachment/album/202307/06/185044ioz6nw1jqkqnhx66.jpg
|
Loading…
Reference in New Issue
Block a user