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

问题描述 投票:0回答:2

我试图自动向我需要的一些 PDF 添加标题、书签等。我想出的方法是创建一个简单的

pdfmark
脚本,如下所示:

% pdfmark.ps
[ /Title (My document)
  /Author(Me)
  /DOCINFO pdfmark

[ /Title (First chapter)
  /Page 1
  /OUT pdfmark

然后使用 Ghostscript 生成一个新的 PDF:

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=out.pdf in.pdf pdfmark.ps

如果

in.pdf
没有任何
pdfmark
数据,它可以正常工作,但是如果有的话,效果就不太好:例如,标题/作者不会被修改,书签会被附加而不是被替换。

由于我不想修改PDF相应的后记,所以我试图查找是否有一些命令可以添加到

pdfmark.ps
,可以删除(或覆盖)以前的元数据。

pdf pdf-generation postscript
2个回答
0
投票

我将把 PostScript 留给其他人,并展示如何使用 qpdf 包(用于

qpdf
fix-qdf
)和 GNU
sed
删除 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
    QDF 文件中的孤儿轮廓,通过将它们植根于不存在的
    obj
    0
  • fix-qdf
    编辑后修复QDF
  • 2nd
    qpdf
    将 QDF 转换并压缩为 PDF
  • qpdf
    输入无法流水线化,需要
    seek

sed
命令将包含以下内容的行中的数字更改为零 缩进文本
/Outlines
。 请注意,GNU
sed
用于非标准
--binary
选项 以避免操作系统在区分文本文件和二进制文件时发生错误。 同样,要删除注释,请将
/Outlines
替换为
/Annots
上面的
-e
,或将其插入第二个
-e
选项中以执行这两项操作。
sed
之外的另一个补丁实用程序也可以;通常只有一个字节 要改变。

快速剥离所有非页面数据(docinfo、outlines a.o.,但不 注释)

qpdf
--empty
选项可能有用:

qpdf --coalesce-contents --compression-level=9 \
     --object-streams=generate \
     --empty --pages in.pdf 1-z -- out.pdf

0
投票

首先,我使用命令将 pdf 转换为 ps:

gswin32c.exe -q -dNOPAUSE -dBATCH -sDEVICE=ps2write -sOutputFile=file.ps file_with_bookmark_to_remove.pdf

文件转换后,我再次转换为pdf并添加pdfmark_file.ps

gswin32c.exe -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=file_with_pdfmark.pdf file.ps pdfmark_file.ps

第一个命令使用打印机“ps2write”将 pdf 转换为 ps。 Ps 文件没有 pdfmark。所有 pdfmarks 均已删除。

当您使用 pdf 打印机“pdfwrite”再次转换时,将创建没有 pdfmarks 的文件,并使用 pdfmark_file.ps 添加新的 pdfmarks

祝你好运! 乌比拉贾拉

© www.soinside.com 2019 - 2024. All rights reserved.