gpt4 book ai didi

java - 了解pdf中的图形(变换矩阵cm)坐标(解析图形位置)系统?

转载 作者:行者123 更新时间:2023-11-30 01:42:50 25 4
gpt4 key购买 nike

我浏览了包含图形元素的不同 pdf 的内容流。 Some pdf 包含图形的普通 CTM 文本坐标系。像下面这样 enter image description here在这里,我可以将 CTM 位置与我的页面坐标进行比较。

但是我在这个pdf中发现了一些奇怪的东西(x 和 y 转换以千为单位,我的页面坐标为 576、720。我如何与页面坐标进行比较?)。您可以看到下面enter image description here 。在这种情况下,CTM 是如何进行计算的。

我看到了in诸如“PDF 内容流的合格读取器或写入器可以将图形状态运算符的排列更改为任何其他排列,以实现每个图形对象的相关图形状态参数的相同值。”之类的规则。

任何人都可以解释一下图形解析的其他类似情况以及以通用方式处理它需要考虑哪些因素吗?

请解释解析可用图形坐标的所有方法。

最佳答案

Please explain all ways of parsing available graphics coordinates.

本质上只有一种方法可以做到这一点,即 PDF 规范所暗示的方法:读取内容流时,根据您的指令的效果更新当前转换矩阵 (CTM)找到。

让我们看看您的第二个内容流。

初始值

一开始,CTM 将默认用户空间映射到设备空间。由于我们对默认用户空间本身的坐标感兴趣,因此对我们来说这些空间是重合的,我们从单位矩阵开始。此外,还没有保存的图形状态,因此保存的状态中还没有 CTM 值:

1 0 0        |
0 1 0 |
0 0 1 |

(0) q

第一条指令q保存当前图形状态;因此,我们现在在图形堆栈上有了 CTM 的副本:

1 0 0        |    1 0 0
0 1 0 | 0 1 0
0 0 1 | 0 0 1

(1) .1 0 0 .1 0 0 厘米

下一条指令.1 0 0 .1 0 0 cm从左侧乘以CTM:

.1 0  0     1 0 0     .1 0  0
0 .1 0 * 0 1 0 = 0 .1 0
0 0 1 0 0 1 0 0 1

因此,我们有

.1 0  0        |    1 0 0
0 .1 0 | 0 1 0
0 0 1 | 0 0 1

(2..6) ... re W n ... rg ... gs

这些指令不会更改 CTM 或状态堆栈。

(7) q

下一条指令q保存当前图形状态;因此

.1 0  0        |    1 0 0    .1 0  0
0 .1 0 | 0 1 0 0 .1 0
0 0 1 | 0 0 1 0 0 1

(我将堆栈的顶部绘制在右侧。)

(8) 1 0 0 1 3398 2608 厘米

(为了简洁起见,我稍微截断了这些值。)

下一条指令1 0 0 1 3398 2608 cm从左侧乘以CTM:

   1    0 0     .1 0  0        .1   0   0
0 1 0 * 0 .1 0 = 0 .1 0
3398 2606 1 0 0 1 339.8 260.6 1

因此,我们现在有了

   .1   0   0        |    1 0 0    .1 0  0
0 .1 0 | 0 1 0 0 .1 0
339.8 260.6 1 | 0 0 1 0 0 1

这是您不确定的第一条指令,因为其值(value)数千。不过,在评估之后,您会看到原点被推至相当正常的值 339.8 260.6

(9..13) ... m ... l ... l h f*

这些指令不会更改 CTM 或状态堆栈。

(14)

下一条指令Q恢复最近保存的图形状态。因此,我们有

.1 0  0        |    1 0 0
0 .1 0 | 0 1 0
0 0 1 | 0 0 1

(15..17) ... RG ... w ... M

这些指令不会更改 CTM 或状态堆栈。

(18) q

下一条指令q保存当前图形状态;因此

.1 0  0        |    1 0 0    .1 0  0
0 .1 0 | 0 1 0 0 .1 0
0 0 1 | 0 0 1 0 0 1

(19) 1 0 0 1 3607 2339 厘米

(为了简洁起见,我稍微截断了这些值。)

下一条指令1 0 0 1 3607 2339 cm从左侧乘以CTM:

   1    0 0     .1 0  0        .1   0   0
0 1 0 * 0 .1 0 = 0 .1 0
3607 2339 1 0 0 1 360.7 233.9 1

因此,我们现在有了

   .1   0   0        |    1 0 0    .1 0  0
0 .1 0 | 0 1 0 0 .1 0
360.7 233.9 1 | 0 0 1 0 0 1

这是您因值(value)数千而不确定的第二条指令。不过,在评估之后,您会再次看到原点被推至相当正常的值 360.7 233.9

(20..)等

关于java - 了解pdf中的图形(变换矩阵cm)坐标(解析图形位置)系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59355347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com