文档固执和搜索Pdf用户空间和设备空间知识



在整理了足够的代码来解析pdf文件之后,我实际上对如何处理解码的流内容感到震惊,描述了如何"绘制"实际的页面内容。除了操作员"画这个或画那个,或者从这里移到那里"的概念,这些概念大多不言自明,我无法实现用户空间或设备空间的概念。我根本不明白它们是什么,以及我应该如何在代码中表示它们。谁能给我指出一个关于这个主题的好的技术信息来源(也许是一本书,而不是被称为"PDF规范"的文字海洋)?

这是一个有点出格的建议,但您应该尝试阅读Apple Quartz 2D文档。显然,你不是在OS X上(因为你已经标记了c#),但我提出这个建议是因为Quartz 2D绘图模型几乎与PDF绘图模型相同。事实上,在OS X(和iOS)上呈现PDF内容流非常容易,因为对应于每个PDF操作符的是等效的Quartz调用(使用一个名为Core Graphics的框架)。

从这个开始。

(这种相似的原因是因为最初的Mac OS/NextStep绘图模型是基于一种叫做Display Postscript的东西。)

至于用户空间和设备空间——它们非常直观。设备空间就是设备的坐标系统:原点在哪里,轴线在哪个方向。例如,在OS X上,屏幕的原点在屏幕的左上角,而PDF页面空间的原点(通常)在页面的左下角。这意味着你绘制的每一个东西都必须进行适当的转换,这看起来相当麻烦,除了这个所谓的CTM可以应用一次(在OS X的情况下,它涉及到一个缩放转换来翻转页面,以及一个平移来滑动页面)。在Quartz的例子中,一旦将这两个转换应用到绘图上下文,就可以忘记这个问题了。我想您正在使用的Windows API有一个非常类似的解决方案。

如果你读一下维基百科关于仿射变换的条目会很有帮助。

最新更新