使用 pdftk 为 PDF 文档创建书签
创始人
2024-03-02 16:17:52
0

充分利用现有的技术,提供书签以帮助用户。

介绍 pdftk-java 中, 我展示了如何在脚本中使用 pdftk-java 来快速修改 PDF 文件。

但是,pdftk-java 最有用的场景是处理那种动辄几百页的没有目录的大 PDF 文件。这里所谓的目录不是指文档前面供打印的目录,而是指显示在 PDF 阅读器侧边栏里的目录,它在 PDF 格式中的正式叫法是“ 书签 bookmarks ”。

Screenshot of a sidebar table of contents next to a PDF

如果没有书签,就只能通过上下滚动或全局搜索文本来定位想要的章节,这非常麻烦。

PDF 文件的另一个恼人的小问题是缺乏元数据,比如标题和作者。如果你打开过一个标题栏上显示类似 “Microsoft Word - 04_Classics_Revisited.docx” 的 PDF 文件,你就能体会那种感觉了。

pdftk-java 让我能够创建自己的书签,我再也不面对这些问题了。

在 Linux 上安装 pdftk-java

正如 pdftk-java 的名称所示的,它是用 Java 编写的。它能够在所有主流操作系统上运行,只要你安装了 Java。

Linux 和 macOS 用户可以从 AdoptOpenJDK.net 安装 Java(LCTT 译注:原文为 Linux,应为笔误)。

Windows 用户可以安装 Red Hat’s Windows build of OpenJDK

在 Linux 上安装 pdftk-java:

  1. 从 Gitlab 仓库下载 pdftk-all.jar release,保存至 ~/.local/bin/其它路径 下.
  2. 用文本编辑器打开 ~/.bashrc,添加 alias pdftk='java -jar $HOME/.local/bin/pdftk-all.jar'
  3. 运行 source ~/.bashrc 使新的 Bash 设置生效。

数据转储

修改元数据的第一步是抽取 PDF 当前的数据文件。

现在的数据文件可能并没包含多少内容,但这也是一个不错的开端。

$ pdftk mybigfile.pdf \
  data_dump \
  output bookmarks.txt

生成的 bookmarks.txt 文件中包含了输入 PDF 文件 mybigfile.pdf 的所有元数据和一大堆无用数据。

编辑元数据

用文本编辑器(比如 AtomGedit)打开 bookmarks.txt 以编辑 PDF 元数据。

元数据的格式和数据项直观易懂:

InfoBegin
InfoKey: Creator
InfoValue: Word
InfoBegin
InfoKey: ModDate
InfoValue: D:20151221203353Z00'00'
InfoBegin
InfoKey: CreationDate
InfoValue: D:20151221203353Z00'00'
InfoBegin
InfoKey: Producer
InfoValue: Mac OS X 10.10.4 Quartz PDFContext
InfoBegin
InfoKey: Title
InfoValue: Microsoft Word - 04_UA_Classics_Revisited.docx
PdfID0: f049e63eaf3b4061ddad16b455ca780f
PdfID1: f049e63eaf3b4061ddad16b455ca780f
NumberOfPages: 42
PageMediaBegin
PageMediaNumber: 1
PageMediaRotation: 0
PageMediaRect: 0 0 612 792
PageMediaDimensions: 612 792
[...]

你可以将 InfoValue 的值修改为对当前 PDF 有意义的内容。比如可以将 Creator 字段从 Word 修改为实际的作者或出版社名称。比起使用导出程序自动生成的标题,使用书籍的实际标题会更好。

你也可以做一些清理工作。在 NumberOfPages 之后的行都不是必需的,可以删除这些行的内容。

添加书签

PDF 书签的格式如下:

BookmarkBegin
BookmarkTitle: My first bookmark
BookmarkLevel: 1
BookmarkPageNumber: 2
  • BookmarkBegin 表示这是一个书签。
  • BookmarkTitle 书签在 PDF 阅读器中显示的文本。
  • BookmarkLevel 书签层级。如果书签层级为 2,它将出现在上一个书签的小三角下。如果设置为 3,它会显示在上一个 2 级书签的小三角下。这让你能为章以及其中的节设置书签。
  • BookmarkPageNumber 点击书签时转到的页码。

为你需要的章节创建书签,然后保存文件。

更新书签信息

现在已经准备好了元数据和书签,你可以将它们导入到 PDF 文件中。实际上是将这些信息导入到一个新的 PDF 文件中,它的内容与原 PDF 文件相同:

$ pdftk mybigfile.pdf \
  update_info bookmarks.txt \
  output mynewfile.pdf

生成的 mynewfile.pdf 包含了你设置的全部元数据和书签。

体现专业性

PDF 文件中是否包含定制化的元数据和书签可能并不会影响销售。

但是,关注元数据可以向用户表明你重视质量保证。增加书签可以为用户提供便利,同时亦是充分利用现有技术。

使用 pdftk-java 来简化这个过程,用户会感激不尽。

(题图:MJ/f8869a66-562d-4ee4-9f2d-1949944d6a9c)


via: https://opensource.com/article/22/1/pdf-metadata-pdftk

作者:Seth Kenlon 选题:lujun9972 译者:toknow-gh 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

PDF

相关内容

Bytescout.PDF...
在.NET Core 2.0/2.1上,可以使用Bytescout...
2025-01-12 22:33:40
不支持HLMT2PDF列表...
这个错误提示通常意味着在将列表类型转换为PDF时出现了问题。下面是...
2025-01-11 22:30:28
不支持的操作:无法进行非零...
这个错误通常是由于使用PyPDF2库中的相对寻址方法(如extra...
2025-01-11 19:31:10
不允许复制内容的PDF文件...
要解决无法对不允许复制内容的PDF文件进行OCR处理的问题,可以使...
2025-01-11 11:00:46
不要弹出拦截器,打开PDF...
解决这个问题的方法可能因使用的编程语言和具体环境而有所不同。以下是...
2025-01-10 18:01:46
不显示文件保存对话框,将“...
要实现不显示文件保存对话框,将"Print FixedDocume...
2025-01-10 09:01:43

热门资讯

使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
什么是 KDE Connect... 什么是 KDE Connect?它的主要特性是什么?它应该如何安装?本文提供了基本的使用指南。科技日...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...
Bazzite:专为 Stea... 为 Linux 桌面或者 Steam Deck 做好游戏准备,听起来都很刺激!对于一个专为 Linu...