如何导入,导出和编辑pdf文件的书签?


21

听说pdf文件的书签以纯文本格式存储在文件中的某个位置。我想知道是否可以将pdf文件的书签导入和导出到文本文件中,以进行批处理?

如果是,是否有关于编辑包含pdf文件书签的文本文件的语法的描述?

我希望为Ubuntu 10.10和Windows 7提供免费的软件解决方案。

谢谢并恭祝安康!

Answers:



13

您可以pdftk为此使用。更多信息:如何导出和导入PDF书签

像这样在命令行上导出PDF书签:

pdftk C:\Users\Sid\Desktop\doc.pdf dump_data output C:\Users\Sid\Desktop\doc_data.txt

从这样的数据文件导入PDF书签:

pdftk C:\Users\Sid\Desktop\doc.pdf update_info C:\Users\Sid\Desktop\doc_data.txt output C:\Users\Sid\Desktop\updated.pdf

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()。

如果您使用的是Windows计算机,这将在* nix系统中起作用。然后先安装python3,然后pdftk使用booky.py回购中的文件将其转换bkmrks.txtpdftk兼容格式

python3 booky.py < bkmrks.txt > output.txt

然后使用export命令生成转储的数据文件。从该文件中删除以前的书签,然后output.txt使用简单的复制粘贴插入的内容。然后将该数据导入回来。


4

如果您有一个带有书签的文档版本,并且想要复制它们,那么一种更简单的方法是使用PDF-XChange Viewer(我使用v2.5.211)。打开包含书签的PDF(源PDF),在书签窗格中选择所有书签,使用Ctrl + C复制它们,打开不包含书签的PDF(目标PDF),然后粘贴(Ctrl PDF的书签窗格中的+ V)。PDF-Xchange Viewer保留来自源PDF的书签属性(包括书签文本上的任何粗体/斜体格式)。如果由于对文档的修订,由于某种原因目标PDF的某些部分变高或变小,您可以单击需要更正的书签,滚动到页面上您希望书签打开的位置,右键单击-再次单击书签,然后单击“设置目标”。根据需要对任何有问题的书签重复最后一部分。完成后保存目标PDF。

这对我来说非常有效,非常直观,几分钟后就完成了。在我的特殊情况下,一位同事使用Word for Mac制作了一个很长的文档,没有书签。由于文档的长度,我想要与文档的轮廓相对应的书签。我可以让Word for Windows将文档另存为带有书签的PDF,但是Word for Windows和Word for Mac之间的某些格式差异大大消除了页数(特别是页脚周围的空格存在差异,并且差异在图形和标题之间的间距中)。我能够解决页眉和页脚以及图形大小的问题,以使Word for Windows中的分页正确,然后保存到带有书签的PDF中。不幸,


1
+1为PDF-Xchange。
越少越好

1

PDF文件的规范可以从Adobe免费下载PDF,或者至少是我上次检查的规范。但是,大多数PDF文件中的压缩数据最多。可能曾经有一个PDF的基本纯文本版本,如果是这样,它现在仍然有效,但是实际上以这种形式获取文件可能是一个问题。

尽管我还没有做过,但很可能(如果您愿意付款)是购买Acrobat Pro,并使用该应用程序内置的Javascript脚本功能。让您开始...

http://acrobatusers.com/tutorials/2008/10/auto_bookmark_creation

本教程说明如何在Acrobat 7.0 Pro(Creative Suite CS2中包含的版本)中使用Javascript自动创建书签。尽管有些陈旧,但对于较新的版本,相同的技术应该可以正常工作。

Adobe应用程序确实包含一个使用Javascript(Javascript尚不具备的标准功能)读取/写入文本文件的库,因此可以编写自己的导入/导出脚本,尽管要使这些脚本健壮起来并不容易。


谢谢!是否有Linux版本的Acrobat Pro?
蒂姆(Tim)

抱歉-我非常怀疑。AFAIK是Mac或Windows平台,除非大量创意专业人士(1)开始使用该平台,并且(2)表明他们愿意为专有软件而不是使用FOSS付出高价,否则Adobe不太可能支持Linux。备择方案。似乎不太可能。对于免费解决方案,您可以尝试使用诸如blog.rubypdf.com/2007/12/12/…(对于Ruby)的库。我对此知之甚少-我刚刚在Google上找到了它。
Steve314 2011年

1

要导出书签,我采用了另一种方法,该方法需要使用Microsoft OneNote:

我打开PDF阅读器(我使用的是Foxit的免费版本),书签结构可见,然后在OneNote中要求快照,然后选择Foxit书签结构。

返回到OneNote,选择“从图像复制文本”选项(在右键单击快照图像后出现的菜单中),然后将其粘贴在侧面以纠正缩进(通常带有项目符号)。


1

HandyOutline。1拖动,1单击完成。https://sourceforge.net/projects/handyoutlinerfo/。自由。缩进子书签。不需要任何PDF阅读器/编辑器。还可以编辑,将所有详细信息导出到文本(复制到word中并编写宏以将其整理到功能齐全的word文档中)或XML,重新分页,导入到PDF。开发人员值得捐赠。

PDF-Xchange编辑器(替换为PDFViewer)随机复制/丢失的书签导出到文本

JPDF需要Java,导出了格式垃圾,无法清除它以仅获取名称

PDFtk只看说明就让我头疼

:-)


很喜欢将其导出到XML,而不是一种更特殊的格式。导出的拖放界面也同样简单。我只希望它可以一次执行多个操作。
Evan Donovan

0

我发现了另一个相当“愚蠢”的解决方案,可以将PDF中的所有书签复制为文本以供其他地方使用。在Acrobat Pro(适用于Mac OS)中,无法选择所有书签并将其复制/粘贴到文字处理器中。但是,您可以选择“一个HTML页面,并添加基于书签的Navigationframe”选项将整个PDF导出为HTML文件。然后在浏览器中打开HTML,在导航框架中选择所有文本并将其复制/粘贴到字处理器中...


0

要将所有书签从PDF读取到文本文件,可以将此命令与以下命令一起使用pdftk

pdftk input.pdf dump_data output output.txt

然后,我在Notepad ++上使用了正则表达式来删除多余的部分。下面我用一个空字符串替换(依次),然后得到一个书签列表(不要忘了在文本编辑器中使用regex替换):

BookmarkLevel.*
BookmarkPageNumber.*
BookmarkBegin.*
\n\s+\n

如果要删除数字,请替换此表达式:

BookmarkTitle: A8.\d.\d+\s
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.