PDFBox Matrix 中的参数意味着什么

g3b*_*blv 1 java apache pdf pdf-generation pdfbox

我已经按照这个示例创建横向 PDF,它工作得很好。我现在想将 0,0 参考从左下角移动到左上角。为此,我需要改变contentStream.transform(new Matrix(0, 1, -1, 0, pageWidth, 0));。我查看了PDFBox MatrixMatrix的文档,其中指定了如下参数。

public Matrix(float a,
      float b,
      float c,
      float d,
      float e,
      float f)
Creates a matrix with the given 6 elements.
Run Code Online (Sandbox Code Playgroud)

但它没有告诉我 6 个不同的参数/元素的作用。我猜其中一个与旋转有关,两个与 X 和 Y 方向上移动参考有关。我在哪里可以找到描述这些论点的文档?

mkl*_*mkl 8

我在哪里可以找到描述这些论点的文档?

要查找的文档是 PDF 规范 (ISO 32000-1) 以及一些线性代数 101。

PDF中的变换矩阵应由六个数字指定,通常采用包含六个元素的数组的形式。在其最通用的形式中,该数组表示为 [ abcdef ];它可以表示从一个坐标系到另一个坐标系的任何线性变换。

(第 8.3.3 节 - 常见转换)

随后不久解释了其含义:

PDF 表示二维空间中的坐标。这样的空间中的点( x,y )可以用向量形式表示为[ xy 1]。需要该向量的第三个常数元素 (1),以便该向量可以在下面描述的计算中与 3×3 矩阵一起使用。

两个坐标系之间的变换可以用如下所示的3×3变换矩阵来表示:

ab 0 cd 0 ef 1

由于变换矩阵只有六个可以更改的元素,因此在 PDF 中大多数情况下应将其指定为六元素数组 [ abcdef ]。

坐标变换应表示为矩阵乘法:

转型

(第 8.3.4 节 - 变换矩阵)

因此,当当前设置了变换 [ abcdef ] 并且您使用坐标 ( x, y ) 绘制某些内容时,它将出现在坐标 ( x', y' ) 处,其中

变换为坐标方程

常用的转换类型有:

  • 平移应指定为 [1 0 0 1 t x t y ],其中t xt y分别是在水平和垂直维度上平移坐标系原点的距离。

  • 缩放比例应通过 [ s x 0 0 s y 0 0] 获得。这会缩放坐标,以便新坐标系的水平和垂直维度中的 1 个单位分别与先前坐标系中的s xsy单位大小相同。

  • 旋转应由 [cos( q ) sin( q ) -sin( q ) cos( q ) 0 0] 产生,其作用是将坐标系轴逆时针旋转角度q

  • 倾斜应由 [1 tan( a ) tan( b ) 1 0 0]指定,它使x轴倾斜角度a,使y轴倾斜角度b

(第 8.3.3 节 - 常见转换)

如果您想要组合变换,只需按适当的顺序乘以矩阵即可。