我在用 pdftk
书签/大纲重新排列 pdf 文件的页面,但在那之后,输出文件丢失了原始文件的书签。
我的命令是pdftk in.pdf cat 1-22 43 23-42 44-end output out.pdf
。
我想知道如何在重新排列页面时保留书签?
Mar*_*ika 15
这是一个有效的解决方案。但是,您需要对其进行调整以满足您的需要。
在我的示例中,我删除了 PDF 的第一页,然后我需要更新书签以指向正确的位置。
从 in.pdf 中删除第 1 页:
pdftk A=in.pdf cat A2-end output temp.pdf
Run Code Online (Sandbox Code Playgroud)从 in.pdf 创建一个 in.info 文件:
pdftk in.pdf dump_data > in.info
Run Code Online (Sandbox Code Playgroud)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)创建最终输出.pdf:
pdftk temp.pdf update_info in2.info output out.pdf
Run Code Online (Sandbox Code Playgroud)使用 pdftk 2.01 在 debian 上测试工作
你需要做的pdftk in.pdf dump_data > in.info
,然后update_info
在生成的时候加上参数out.pdf
。引自man pdftk
:
Run Code Online (Sandbox Code Playgroud)update_info <info data filename | - | PROMPT>
更改存储在单个 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。