将书签添加和编辑为PDF


22

通过从带有书签的pdf文件中获取元数据pdftk,我观察了pdf元数据中书签的格式。因此,我猜测使用pdftk可以添加和编辑pdf文件的书签。

我遵循以下三个步骤:

  1. 首先,我将pdf文件中的元数据(包括书签,如果有的话)转换为文本文件pdftk in.pdf dump_data > in.info
  2. 接下来,我将一些书签添加到元数据文本文件中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
    

    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
    
  3. 然后,我尝试通过来将已编辑的元数据放回pdf文件pdftk in.pdf update_info in.info output out.pdf

但是,当我out.pdf在evince或Adobe Reader中打开新的pdf文件时,新的pdf文件中没有书签。

如果我得到了新的PDF文件的元数据out.pdf通过pdftk out.pdf dump_data > out.info,将有中没有书签out.info。书签似乎未成功添加。

我想知道是否有一些错误?我如何添加和编辑pdf文件的书签,而不必通过pdftk?


1
这个小的图形工具为我工作。(PDF Mod 0.9.1)apps.fedoraproject.org/packages/pdfmod
Abhijit,2015年

Answers:



4

jPDFtweak(Java,因此可以在Unix / Linux上运行)可以更改书签,但是我不知道您是否可以使用它编写脚本。

对于脚本,我猜您唯一的本地Unix / Linux选项是带有pdfpages软件包的pdflatex。但这是一个学习曲线,如果您还不是LaTeX用户。

编辑:其实有可能与ghostscript:请参阅此处此处此处


4

如果您仍然坚持使用那些Unix脚本,那么

  1. 提取从中转储的书签数据 pdftk
  2. 编写一个额外的脚本,以将转储的书签数据转换为pdfmarks格式,gs接受该ghostscript命令。
  3. 使用gs脚本将它们与pdfmarks合并

看看http://blog.tremily.us/posts/PDF_bookmarks_with_Ghostscript/这个脚本pdf-merge.py完全可以完成您(或我)想要的操作。

pdf-merge.py --output=merged.pdf input1.pdf input2.pdf

他的脚本可以做一些小的改进

  1. Unicode处理
  2. 输出书签文件,因此人们也可以对其进行调整

无论如何,它应该工作


一票!谢谢!我期待您的脚本!
2012年

似乎链接无效。你能修好吗?
Fish Monitor

4

pdftk绝对是正确的工具(具有正确的语法):

BookmarkBegin
BookmarkTitle: Chapter 1
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
BookmarkTitle: Paragraph 1.1
BookmarkLevel: 2
BookmarkPageNumber: 1

2

迦勒,

据我了解,PDF规范的书签无法通过诸如诊断工具插入pdftk。更新元数据以引用不存在的章节和书签着陆锚绝对是行不通的,甚至可能使您的PDF不一致或无法打开。

我最终使用java + iText库完成了根据本教程的建议,但是我们每天要处理数百个pdf,因此需要将其自动化。如果您要一次性完成,则Adobe Acrobat应该能够执行此操作。


2

总结所有这些好的答案:

GitHub上有一个bmconverter项目,可以转换各种PDF书签格式。它可以将pdftk输出转换为jpdftweak格式,尽管如果您将使用jpdftweak,则无需将pdftk输出转换为csv,因为您可以在jpdftweak内完成所有工作。

不幸的是,该项目不支持pdfmarks,但是幸运的是有人在bmconverter问题中发布了可以将pdftk输出转换为pdfmarks的脚本。因此,ghostscript批处理选项是一个选项


2

pdftk书签格式有点繁琐。相反,我用我创建自己的脚本bashsedpdftkpython3。在此仓库中查看: https //github.com/SiddharthPant/booky

因此,现在我可以创建一个bkmrks.txt像这样的文本文件(),即使对于1000页的pdf也只需5分钟即可编写。

{
  Title1, 1
  Title2, 2
  {
    Subtitle1, 3
    Subtitle2, 4
    {
      SubSubtitle1, 5
      ...
    }
  }
}

然后使用我的脚本

./booky.sh pdf_file.pdf bkmrks.txt

这会自动创建一个pdf_file_new.pdf包含我的书签的pdf()。


1

只需BookmarkBegin在每个书签条目之前添加,如

BookmarkBegin
BookmarkTitle: Front cover
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
    ⋮

0

您在步骤1中使用的重定向将导致update_info无法正常工作。您需要将输出文件指定为pdftk:

pdftk in.pdf dump_data output in.info

看到类似问题的答案: https //stackoverflow.com/a/30308964/3158933

我使用重定向创建的文件的文件大小稍大,导致pdftk在运行update_info命令时发出“警告:LoadDataFile()中意外情况1;继续”消息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.