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

Tim*_*Tim 17 pdf pdftk

我在用 pdftk书签/大纲重新排列 pdf 文件的页面,但在那之后,输出文件丢失了原始文件的书签。

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

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

Mar*_*ika 15

这是一个有效的解决方案。但是,您需要对其进行调整以满足您的需要。

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

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

    pdftk A=in.pdf cat A2-end output temp.pdf
    
    Run Code Online (Sandbox Code Playgroud)
  2. 从 in.pdf 创建一个 in.info 文件:

    pdftk in.pdf dump_data > in.info
    
    Run Code Online (Sandbox Code Playgroud)
  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";
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 创建最终输出.pdf:

    pdftk temp.pdf update_info in2.info output out.pdf
    
    Run Code Online (Sandbox Code Playgroud)

使用 pdftk 2.01 在 debian 上测试工作

  • 也为我工作。也许您可以添加有关如何执行脚本的提示(不知道如何...)或添加 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)` (3认同)

Phi*_*ath 5

你需要做的pdftk in.pdf dump_data > in.info,然后update_info在生成的时候加上参数out.pdf。引自man pdftk

update_info <info data filename | - | PROMPT>
Run Code Online (Sandbox Code Playgroud)

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

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

  update_info_utf8 <info data filename | - | PROMPT>
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢!它仍然不起作用。我的命令分三步:`pdftk in.pdf dump_data &gt; in.info`、`pdftk in.pdf cat 1-22 43 23-42 44-end output out.pdf`和`pdftk out.pdf update_info in.info输出 out1.pdf` 在 `out1.pdf` 中仍然没有书签。` (3认同)

von*_*and 5

仔细阅读手册页,它说update_infodump_data生成的任何格式获取数据。这大概必须根据页面改组进行调整。听起来不是不可能,但它不是自动的。

PDFTK网站只给出了上述命中和创建/编辑书签的结果。Google 所知道的关于 PDF 中的书签和重新组织的问题,是对上述操作的点击和对它们提供的奇迹的抒情阐述,以及这个线程 ;-)。

所以好像做不到。评论提出了一些可能性,但在尝试时不起作用。