C# Doc Stude和搜索Pdf用户空间和设备空间知识

C# Doc Stude和搜索Pdf用户空间和设备空间知识,c#,pdf,C#,Pdf,在编写了足够多的代码来解析pdf文件之后,我对如何处理解码的流内容产生了深刻的印象,描述了如何“绘制”实际的页面内容。除了操作员“画这个或那个,或从这里移动到那里”的概念,这些概念大多是不言自明的,我无法实现用户空间或设备空间的概念。我只是不明白它们是什么,我应该如何在代码中表示它们。有人能给我指出一个关于这个主题的好的技术信息来源吗(也许是一本书,而不是一大堆被称为“PDF规范”的文字)?提前谢谢。这是一个稍微开箱即用的建议,但您应该尝试阅读Apple Quartz 2D文档。显然,您不在OS

在编写了足够多的代码来解析pdf文件之后,我对如何处理解码的流内容产生了深刻的印象,描述了如何“绘制”实际的页面内容。除了操作员“画这个或那个,或从这里移动到那里”的概念,这些概念大多是不言自明的,我无法实现用户空间或设备空间的概念。我只是不明白它们是什么,我应该如何在代码中表示它们。有人能给我指出一个关于这个主题的好的技术信息来源吗(也许是一本书,而不是一大堆被称为“PDF规范”的文字)?提前谢谢。

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

首先

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

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


如果您阅读维基百科中关于仿射变换的条目,这将非常有帮助。

很抱歉这么晚才回来(现实问题),谢谢您的回答:这帮助我指出了正确的方向。我设法在画布上写了一些图形和文本(尽管在解释文本和文本行矩阵等方面存在一些问题)。正如您所说,通过将画布的LayoutTransform设置为ctm值,给了我一个视觉上一致的结果,因此这似乎是正确的方法。真正的问题仍然是在一些最困难的任务(例如pdf字体对象)中缺少关于预期内容的信息。无论如何,再次感谢你的回答。我会想办法的!我知道你对PDF规范不感兴趣,它也有它的问题,但我强烈建议你阅读第5.3节文本对象-我密切关注它,以确保我的字形定位准确无误。字体是一个完整的另一个蠕虫,你在那里的选择将取决于平台。祝你好运