有没有办法丢弃以前的pdfmark元数据



我试图自动向我需要的一些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包(用于qpdffix-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孤儿通过在不存在的obj0上生根在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

最新更新