我试图自动向我需要的一些PDF添加标题、书签等。我想到的方法是创建一个简单的pdfmark
脚本,如下所示:
% pdfmark.ps
[ /Title (My document)
/Author(Me)
/DOCINFO pdfmark
[ /Title (First chapter)
/Page 1
/OUT pdfmark
然后使用生成带有重影脚本的新PDF
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=out.pdf in.pdf pdfmark.ps
如果in.pdf
没有任何pdfmark
数据,它可以正常工作,但如果它正常工作,事情就不太好了:例如,标题/作者不会被修改,书签会被附加而不是替换。
由于我不想修改PDF的相应postscript,我试图找到是否有一些命令可以添加到pdfmark.ps
中,从而删除(或覆盖)以前的元数据。
我将把PostScript留给其他人,并展示如何使用qpdf包(用于qpdf
和fix-qdf
)和GNUsed
删除PDF大纲。
来自qpdf
手册:
在QDF模式中,qpdf以我们称之为QDF的形式创建PDF文件。QDF形式的PDF文件,有时称为QDF文件,是一个完整的第三行为
%QDF-1.0
的有效PDF文件(在PDF之后报头和二进制字符)并且具有某些其他特性。QDF表单的目的是使编辑PDF文件成为可能,有一些限制,在普通的文本编辑器中。
(对于非GNU/Linux系统,请调整以下命令。)
qpdf --qdf --compress-streams=n --decode-level=generalized
--object-streams=disable -- in.pdf - |
sed --binary
-e '/^[ ][ ]*/Outlines [0-9][0-9]* [0-9] R/ s/[1-9]/0/g' |
fix-qdf > tmp.qdf
qpdf --coalesce-contents --compression-level=9
--object-streams=generate -- tmp.qdf out.pdf
其中:
- 第一个
qpdf
命令将PDF文件转换为QDF格式以进行编辑 sed
孤儿通过在不存在的obj
0上生根在QDF文件中勾勒轮廓fix-qdf
编辑后修复QDF- 第二
qpdf
将QDF转换并压缩为PDF qpdf
输入不能流水线,需要到seek
sed
命令将包含缩进的文本CCD_ 18。请注意,GNUsed
用于非标准--binary
选项以避免在区分文本文件和二进制文件的操作系统上发生错误。类似地,要剥离注释,请将中的/Outlines
替换为/Annots
上面的-e
,或者将其插入第二个-e
选项中以同时执行这两个操作。sed
之外的另一个补丁实用程序;通常只有一个字节要更改。
要快速剥离所有非页面数据(docinfo,概述a.o.但不注释)qpdf
的--empty
选项可能很有用:
qpdf --coalesce-contents --compression-level=9
--object-streams=generate
--empty --pages in.pdf 1-z -- out.pdf