使用 ConTeXt 修改既有 PDF 文档的元数据
昨天将 GNOME 升级到了 3.2,因此体验到了一些新功能,例如 gnome-documents 这个工具可用来整理我收集的电子文档 [1],但是在我使用这个工具的时候发现了一个问题,有一部分 PDF 文档的元数据(Metadata)非常不堪。
所谓 PDF 文档的元数据,可以在 PDF 文档属性中查看到。例如我下载的一份 pyramid-algorithms.pdf 文档,用 Evince 打开它,然后在 Evince 的菜单『File->Properties』开启的对话框中可以看到 pyramid-algorithms.pdf 的元数据,如下图所示。
这份文档在 gnome-documents 中的显示结果下图所示。
显然 gnome-documents 工具显示的是 pyramid-algorithms.pdf 文档的缩略图及其元数据中的『Title』信息,结果显然是令人抓狂的,如果不打开文档查看内容的话,根本不知道这份文档讲的什么内容。我们必须修改这份文档的元数据。
可能你会去使用 jpdftweak 之类的工具,或者干脆回到 Windows 环境随便找个 PDF 文档编辑工具来解决这个问题。而我要做的是写出下面的 ConTeXt 文稿 pyramid-algorithms-new.tex,并将它与 pyramid-algorithms.pdf 放在同一目录下。
% 设置元数据 \setupinteraction[ title={Pyramid Algorithms}, subtitle={A Dynamic Programming Approach to Curves and Surfaces for Geometric Modeling}, author={Ron Goldman}, keyword=CAGD; Freeform Surface Modeling ] % 设定待处理的 PDF 文档并获取其尺寸、页面数量等信息 \define\MyDocument{pyramid-algorithms.pdf} \getfiguredimensions[\MyDocument] % 将当前文档的页面尺寸设为与 pyramid-algorithms.pdf 的页面尺寸相等, % \figurewidth 与 \figureheight 皆为 \getfiguredimensions 所获 \definepapersize[MyPaper][width=\figurewidth,height=\figureheight] \setuppapersize[MyPaper] % 将当前文档的天头、地脚、翻口、钉口等区域设为 0cm \setuplayout[ backspace=0cm, cutspace=0cm, topspace=0cm, bottomspace=0cm, header=0cm, footer=0cm, width=middle, height=middle, ] % 关闭页码 \setuppagenumbering[location=] \starttext % 将 pyramid-algorithms.pdf 文档的各页面作为图形插入到当前文档 \dorecurse\noffigurepages{% \externalfigure[\MyDocument][ page=\recurselevel,width=\paperwidth,height=\paperheight ] } \stoptext
然后使用 context 命令编译这份文稿:
$ context --once pyramid-algorithms-new
现在使用 Evince 打开上述编译命令所生成的 pyramid-algorithms-new.pdf 文档并查看其属性,结果如下图所示:
然后,gnome-documents 中显示的文档信息也令人愉悦,见下图:
也许你读到了这篇文章,但是你对 TeX 或 ConTeXt 一点也不熟悉,可以参考我以前写的一些 ConTeXt 学习笔记 [2],只需阅读其中的第 1, 2 篇即可,然后将上面我提供的 ConTeXt 文稿当成模板,每次使用的时候只需根据实际情形修改其中的以下部分内容即可。
% 设置元数据 \setupinteraction[ title={Pyramid Algorithms}, subtitle={A Dynamic Programming Approach to Curves and Surfaces for Geometric Modeling}, author={Ron Goldman}, keyword=CAGD; Freeform Surface Modeling ] % 设定待处理的 PDF 文档并获取其尺寸、页面数量等信息 \define\MySingleSidedDocument{pyramid-algorithms.pdf}
参考资料
[1] 用上了 GNOME 3.2
[2] ConTeXt 学习笔记
转载时,希望不要链接文中图片,另外请保留本文原始出处:http://garfileo.is-programmer.com
2011年9月29日 21:01
速度好慢。。。
2011年9月29日 21:29
写了个改 PDF 信息的 PDF 脚本 ;-) http://p.vim-cn.com/cmS/py
2011年9月30日 07:58
@依云: 脚本很好。
速度慢,可能是第一次运行 ConTeXt MkIV 的缘故,它要做字体缓冲。我这里只需要 5 秒左右。
2011年9月30日 11:23
@Garfileo: 5 秒还不慢啊。。。
2011年9月30日 11:37
@依云: 500 多页呢。不过,要只是修改 metadata,的确是慢了点,但是后面更精彩 :)
2011年9月30日 11:41
@Garfileo: 我测试用的才一行文字。。。。后面有什么?标点压缩和中英文混排怎么弄啊?
2011年9月30日 13:59
@依云:
1. ConTeXt MkIv 运行的基本时间大概在 4 秒左右,所以你的一行文字运行这么久也是正常的。
2. 后面会陆续有页面裁剪、批注、水印之类的内容,所用方法与本文方法类似。
3. 如果你说的标点压缩和中英文混排指的是使用 ConTeXt 排版自己的文档,那么可参考 http://garfileo.is-programmer.com/2011/1/11/zhfonts-usage.23740.html
2011年9月30日 14:33
@Garfileo: 仔细测试了下,zhfonts 处理了标点,但中英文混排时不能自动在中英文间添加空白。
2011年9月30日 14:39
@依云:
> 中英文混排时不能自动在中英文间添加空白。
嗯,因为处理起来挺麻烦,而且 TeX 用户也大都习惯了在中文和英文之间手动加空格,所以就没把它当问题。
2011年10月05日 16:29
@Garfileo: 我就不习惯,写的时候还好,要是粘贴过来的文本就麻烦了,而且一些中文标点和英文间又不需要空格。最重要的是,感觉手动加的那个空格大了些。纠结的中文排版啊。。。
2011年10月05日 16:40
@依云:
习惯是慢慢养成的。写纯文本的时候中西文主动用空格间隔一下,可读性要比不用空格好多了。
在 TeX 源文档中手动加的空格,排版出来后是一个西文空格,其宽度在 TEX 里是可全局调整的。
至于粘贴过来的文本,可以写个脚本预处理一下。或者你也可以为 vim 做个插件 :)
2011年10月06日 13:53
@依云: 我一开始也不习惯,现在用 word 都习惯性的打空格。