我正在使用pdftk
书签/大纲重新排列 pdf 文件的页面,但之后,输出文件丢失了原始文件的书签。
我的命令是pdftk in.pdf cat 1-22 43 23-42 44-end output out.pdf
。
我想知道如何在重新排列页面时保留书签?
答案1
这是一个可行的解决方案。但是,您需要对其进行调整以满足您的需求。
在我的示例中,我删除了 PDF 的第一页,然后我需要更新书签以指向正确的位置。
从 in.pdf 中删除第 1 页:
pdftk A=in.pdf cat A2-end output temp.pdf
从 in.pdf 创建一个 in.info 文件:
pdftk in.pdf dump_data > in.info
in.info 需要在我的情况下进行更正,因为我将删除一个页面。
因此,我需要将 BookmarkPageNumber 减一以使书签指向正确的页面。
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"; } }
创建最终的 out.pdf:
pdftk temp.pdf update_info in2.info output out.pdf
使用 pdftk 2.01 在 debian 上进行测试
答案2
答案3
你需要这样做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>
与 update_info 相同,只是输入编码为 UTF-8。
答案4
qpdf 至少在 cygwin 下很有魅力。只要您不使用以下--empty
选项,它就会保留链接:
qpdf input.pdf --pages input.pdf 1,4,5,7-r8,2,3,r7-z -- output.qpdf.pdf
(rN是选择从end开始索引的一页,z是最后一页)