【问题标题】:Change PDF coordinate system更改 PDF 坐标系
【发布时间】:2015-11-12 14:41:19
【问题描述】:

我想更改PDF坐标系以将原点(0,0)->从左下角更改为左上角。因此,例如,当我在 x=5 y=10 的位置写入文本时,它将以从左数 10 点和从上数(而不是从下)数 10 点数​​写入。

我读过PDF specification,它谈到了裁剪框、旋转、坐标变换('cm' 运算符)......但我做不到。

注意。在 eps 中,我使用平移和缩放做了类似的事情:

% Rescaling and translate
0 95<-(height of the page) translate
1 -1 scale

任何帮助将不胜感激!

【问题讨论】:

  • 通常 PDF 是由应用程序创建的,然后将 y 轴反转是在创建 PDF 之前进行计算的简单问题。这可能是 PDF 参考中未提及它的原因。所有缩放和翻译都使用单个矩阵完成,我认为您最终也会将文本颠倒过来。

标签: pdf pdf-generation coordinate-systems


【解决方案1】:

PDF 不是 PostScript 之类的编程语言,但与您在示例中的完全相同的原则也适用于此处。您将设置一个转换矩阵,而不是通过不同的 PostScript 调用(“translate”和“scale”)

1 0 0 -1 0 95 cm

这意味着 X 轴保持不变,Y 轴倒置并且坐标系的原点发生偏移,因此与 EPS 示例中发生的情况完全相同。

您可以在页面开头更改转换矩阵,也可以为每个单独的元素或元素组更改转换矩阵。

请记住,“cm”运算符总是与现有的转换矩阵连接,它不会设置它。实际上没有方法可以设置矩阵。

因此,在几乎所有 PDF 文件中,您都会发现类似的结构

q
1 0 0 -1 0 95 cm
...
Q

这会保存当前的图形状态;更改矩阵,然后执行您想要的任何操作,最后将矩阵替换为原始值。

此外,正如 Jongware 和 mkl 在 cmets 中所述;如果像这样翻转坐标系,可能还需要翻转其他矩阵,例如文本变换矩阵,以确保绘制的对象正面朝上。

【讨论】:

  • 请不要忘记,1 0 0 -1 0 95 的转换矩阵可能需要1 0 0 -1 0 0 文本矩阵。话虽如此,cm 需要 6 个单独的操作数,而不是数组操作数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多