使用pdftk之类的工具重新排列PDF文件的页面时,如何保留书签?


12

pdftk用来重新排列带有书签/轮廓的pdf文件的页面,但是此后,输出文件丢失了原始书签的书签。

我的命令是pdftk in.pdf cat 1-22 43 23-42 44-end output out.pdf

我想知道在重新排列页面时如何保留书签?

Answers:


10

这是一个可行的解决方案。但是,您将需要对其进行调整以适合您的需求。

在我的示例中,我删除了PDF的第一页,然后需要更新书签以指向正确的位置。

  1. 从in.pdf中删除第1页:

    pdftk A=in.pdf cat A2-end output temp.pdf
    
  2. 从in.pdf创建一个in.info文件:

    pdftk in.pdf dump_data > in.info
    
  3. 在我的情况下,in.info需要更正,因为我将删除一个页面。

    因此,我需要将BookmarkPageNumber减少1,以使书签指向正确的页面。

    php代码:

    $file = "in.info";
    $data = file_get_contents($file);
    
    foreach (explode("\n", $data) as $row) {
        $tmp = explode(": ", $row);
    
        if ($tmp[0] == "BookmarkPageNumber") {
            if ($tmp[1] != "1") $tmp[1]--;
            echo $tmp[0].": ".$tmp[1]."\n";
        } else {
            echo $row."\n";
        }
    }
    
  4. 创建最终out.pdf:

    pdftk temp.pdf update_info in2.info output out.pdf
    

测试使用pdftk 2.01在debian上的工作


1
也为我工作。也许您可以添加有关如何执行脚本的提示(不知道如何...)或添加python脚本:#!/usr/bin/python output = open('res.info','w') with open('temp.info','r') as f: for line in f: if line.startswith("BookmarkPageNumber"): output.write( "BookmarkPageNumber: "+ str(int(line.split()[1])+1)+"\n") else: output.write(line)
Vser

6

您需要这样做pdftk in.pdf dump_data > in.info,然后update_info在生成时添加参数out.pdf。引用自man pdftk

update_info <info data filename | - | PROMPT>

更改存储在单个PDF的“信息”字典中的元数据以匹配输入数据文件。输入数据文件使用与dump_data输出相同的语法。非ASCII字符应编码为XML数字实体。如果有,则不会更改存储在PDF的XMP流中的元数据。例如:

             pdftk in.pdf update_info in.info output out.pdf

  update_info_utf8 <info data filename | - | PROMPT>

除输入编码为UTF-8外,与update_info相同。


谢谢!我应该如何获取该文件“ in.info”?
蒂姆(Tim)

@Tim:已编辑。我希望现在很清楚。您需要使用dump_data_utf8update_info_utf8工作,当然。
Philomath

3
谢谢!它仍然不起作用。我的命令分三个步骤:pdftk in.pdf dump_data > in.infopdftk in.pdf cat 1-22 43 23-42 44-end output out.pdf并且pdftk out.pdf update_info in.info output out1.pdf中仍然没有书签out1.pdf。`
蒂姆(Tim)

@Tim我可以确认这确实不起作用。您有没有找到任何解决方案?
谷氨酰胺

1
我粗略的Google拖网显示建议根本不处理书签。
vonbrand

5

仔细阅读手册页后,它update_info会读取dump_data生成的任何格式的数据。据推测,必须根据页面改组进行调整。听起来并非不可能,但自动并非如此。

PDFTK网站只给出了上述命中和创建/编辑书签的结果。Google知道的所有有关PDF书签和重新组织问题的信息,都是上述操作的热门话题,以及它们提供的奇妙的歌词说明,以及该主题;-)。

因此,似乎无法完成。这些评论暗示了一些可能性,但尝试时不起作用。


1

“ pdfmod”是一种简单的图形工具,它允许从现有PDF删除一个页面或模式页面。只需单击几下即可。它还将内容信息和交叉链接保留在pdf中。

“ pdftk”效果很好,我已经使用了很长时间,但是从pdf中删除一两个页面后,我常常会丢失内容。在“ pdftk”和“ pdfmod”中测试的那些pdf文件是从openoffice创建的。

https://apps.fedoraproject.org/packages/pdfmod


pdfmod似乎比pdftk保留元数据要好。的DIFF exiftool输出显示pdfmod保存的元数据,但pdftk不保留一切,即使你使用dump_data_utf8update_info_utf8
user1338062
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.