ConTeXt 内嵌文本的逐步显示
使用 ConTeXt 裁剪既有 PDF 文档页面

使用 ConTeXt 修改既有 PDF 文档的元数据

Garfileo posted @ 2011年9月29日 20:02 in ConTeXt 笔记 with tags ConTeXt MkIV PDF 编辑 , 7679 阅读

昨天将 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

  • 无匹配
Avatar_small
依云 说:
2011年9月29日 21:01

速度好慢。。。

Avatar_small
依云 说:
2011年9月29日 21:29

写了个改 PDF 信息的 PDF 脚本 ;-) http://p.vim-cn.com/cmS/py

Avatar_small
Garfileo 说:
2011年9月30日 07:58

@依云: 脚本很好。

速度慢,可能是第一次运行 ConTeXt MkIV 的缘故,它要做字体缓冲。我这里只需要 5 秒左右。

Avatar_small
依云 说:
2011年9月30日 11:23

@Garfileo: 5 秒还不慢啊。。。

Avatar_small
Garfileo 说:
2011年9月30日 11:37

@依云: 500 多页呢。不过,要只是修改 metadata,的确是慢了点,但是后面更精彩 :)

Avatar_small
依云 说:
2011年9月30日 11:41

@Garfileo: 我测试用的才一行文字。。。。后面有什么?标点压缩和中英文混排怎么弄啊?

Avatar_small
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

Avatar_small
依云 说:
2011年9月30日 14:33

@Garfileo: 仔细测试了下,zhfonts 处理了标点,但中英文混排时不能自动在中英文间添加空白。

Avatar_small
Garfileo 说:
2011年9月30日 14:39

@依云:

> 中英文混排时不能自动在中英文间添加空白。

嗯,因为处理起来挺麻烦,而且 TeX 用户也大都习惯了在中文和英文之间手动加空格,所以就没把它当问题。

Avatar_small
依云 说:
2011年10月05日 16:29

@Garfileo: 我就不习惯,写的时候还好,要是粘贴过来的文本就麻烦了,而且一些中文标点和英文间又不需要空格。最重要的是,感觉手动加的那个空格大了些。纠结的中文排版啊。。。

Avatar_small
Garfileo 说:
2011年10月05日 16:40

@依云:

习惯是慢慢养成的。写纯文本的时候中西文主动用空格间隔一下,可读性要比不用空格好多了。

在 TeX 源文档中手动加的空格,排版出来后是一个西文空格,其宽度在 TEX 里是可全局调整的。

至于粘贴过来的文本,可以写个脚本预处理一下。或者你也可以为 vim 做个插件 :)

Avatar_small
views63 说:
2011年10月06日 13:53

@依云: 我一开始也不习惯,现在用 word 都习惯性的打空格。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter