Answers:
这是一个可行的解决方案。但是,您将需要对其进行调整以适合您的需求。
在我的示例中,我删除了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减少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";
}
}
创建最终out.pdf:
pdftk temp.pdf update_info in2.info output out.pdf
测试使用pdftk 2.01在debian上的工作
您需要这样做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相同。
dump_data_utf8
的update_info_utf8
工作,当然。
pdftk in.pdf dump_data > in.info
,pdftk 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
。`
“ pdfmod”是一种简单的图形工具,它允许从现有PDF删除一个页面或模式页面。只需单击几下即可。它还将内容信息和交叉链接保留在pdf中。
“ pdftk”效果很好,我已经使用了很长时间,但是从pdf中删除一两个页面后,我常常会丢失内容。在“ pdftk”和“ pdfmod”中测试的那些pdf文件是从openoffice创建的。
pdfmod
似乎比pdftk
保留元数据要好。的DIFF exiftool
输出显示pdfmod
保存的元数据,但pdftk
不保留一切,即使你使用dump_data_utf8
&update_info_utf8
。
#!/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)