通过从一些带有书签的 pdf 文件中获取元数据pdftk
,我观察了 pdf 元数据中书签的格式。所以我猜用pdftk
,可以添加和编辑 pdf 文件的书签。
以下是我遵循的三个步骤:
pdftk in.pdf dump_data > in.info
。接下来,我将一些书签添加到元数据文本文件中in.info
,将其从
InfoKey: Creator
InfoValue: PScript5.dll Version 5.2
InfoKey: Title
InfoValue: SSReader Print.
InfoKey: Producer
InfoValue: Acrobat Distiller 7.0 (Windows)
InfoKey: Author
InfoValue: Administrator
InfoKey: ModDate
InfoValue: D:20050605073244+08'00'
InfoKey: CreationDate
InfoValue: D:20050605073244+08'00'
PdfID0: 591a87c91dc76881fdf2ccf3811e72a5
PdfID1: 6b6ab11de8824e438e4f5eb1d85ec72
NumberOfPages: 400
PageLabelNewIndex: 1
PageLabelStart: 1
PageLabelNumStyle: DecimalArabicNumerals
Run Code Online (Sandbox Code Playgroud)
到
InfoKey: Creator
InfoValue: PScript5.dll Version 5.2
InfoKey: Title
InfoValue: SSReader Print.
InfoKey: Producer
InfoValue: Acrobat Distiller 7.0 (Windows)
InfoKey: Author
InfoValue: Administrator
InfoKey: ModDate
InfoValue: D:20050605073244+08'00'
InfoKey: CreationDate
InfoValue: D:20050605073244+08'00'
PdfID0: 591a87c91dc76881fdf2ccf3811e72a5
PdfID1: 6b6ab11de8824e438e4f5eb1d85ec72
NumberOfPages: 400
BookmarkBegin
BookmarkTitle: Front cover
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
BookmarkTitle: About the Author
BookmarkLevel: 1
BookmarkPageNumber: 5
BookmarkBegin
BookmarkTitle: Title page
BookmarkLevel: 1
BookmarkPageNumber: 6
BookmarkBegin
BookmarkTitle: Copyright page
BookmarkLevel: 1
BookmarkPageNumber: 7
BookmarkBegin
BookmarkTitle: Foreword
BookmarkLevel: 1
PageLabelNewIndex: 1
PageLabelStart: 1
PageLabelNumStyle: DecimalArabicNumerals
Run Code Online (Sandbox Code Playgroud)pdftk
in.pdf update_info in.info output out.pdf
.但是当我打开新的 pdf 文件时 out.pdf
在 evince 或 adobe reader 中中没有书签。
如果我得到了新的PDF文件的元数据out.pdf
通过pdftk out.pdf dump_data > out.info
,将有中没有书签out.info
。看起来书签没有成功添加。
我想知道是否有一些错误?我应该如何添加和编辑 pdf 文件的书签,不一定是通过 pdftk?
小智 13
在我看来,从 1.45 版(2012-12-06)开始,pdftk 确实允许通过 update_info 命令修改书签:
您现在可以使用 update_info 添加或更改 PDF 的书签。
通过:http : //www.pdflabs.com/docs/pdftk-version-history/
小智 7
pdftk
书签格式写起来有点乏味。相反,我用我创建自己的脚本bash
,sed
,pdftk
和python3
。在此 repo 中查看:https : //github.com/SiddharthPant/booky
所以现在我可以创建一个这样的文本文件(bkmrks.txt
),即使是 1000 页的 pdf 也只需 5 分钟即可完成。
{
Title1, 1
Title2, 2
{
Subtitle1, 3
Subtitle2, 4
{
SubSubtitle1, 5
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用我的脚本
./booky.sh pdf_file.pdf bkmrks.txt
Run Code Online (Sandbox Code Playgroud)
这会自动创建一个pdf_file_new.pdf
包含我的书签的 pdf( )。
如果你仍然坚持使用那些 unix 脚本,那么
pdftk
gs
接受ghostscript 命令。gs
脚本将它们与 pdfmarks 合并在一起看看http://blog.tremily.us/posts/PDF_bookmarks_with_Ghostscript/脚本pdf-merge.py
完全按照你(或我)想要的去做。
pdf-merge.py --output=merged.pdf input1.pdf input2.pdf
可以在他的脚本中进行一些小的改进
无论如何,它应该工作
小智 5
pdftk 绝对是正确的工具(具有正确的语法):
BookmarkBegin
BookmarkTitle: Chapter 1
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
BookmarkTitle: Paragraph 1.1
BookmarkLevel: 2
BookmarkPageNumber: 1
Run Code Online (Sandbox Code Playgroud)