PDFBox Matrix

时间:2017-01-23 15:37:25

标签: java apache pdf pdf-generation pdfbox

我已按照此示例Create landscape PDF进行操作,但效果很好。我现在想将0,0引用从左下角移动到左上角。为此,我需要更改contentStream.transform(new Matrix(0, 1, -1, 0, pageWidth, 0));。我已经查看了PDFBox Matrix的文档,其中列出了Matrix的参数,如下所示。

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

但它并没有告诉我6个不同的论点/元素是做什么的。我想一个用旋转做,两个用于在X和Y方向上移动参考。我在哪里可以找到描述参数的文档?

1 个答案:

答案 0 :(得分:4)

  

我在哪里可以找到描述参数的文档?

要查找的文档是PDF规范(ISO 32000-1)与某些线性代数101的组合。

  

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

(第8.3.3节 - 常见转换)

此后不久将解释其含义:

  

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

     

两个坐标系之间的转换可以用如下编写的3乘3变换矩阵表示:

     

a b 0 c d 0 e f 1

     

因为变换矩阵只有六个可以改变的元素,所以在大多数情况下,它应该被指定为六元素阵列[ a b c d e f ]。

     

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

     

transformation

(第8.3.4节 - 转换矩阵)

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

transformation as coordinate-wise equations

常用的转换类型有:

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

  •   
  • 缩放应通过[ s x 0 0 s y 0 0]获得。这会缩放坐标,以便新坐标系的水平和垂直尺寸中的1个单位与 s x s y <的尺寸相同/ sub> 分别在前一个坐标系中。

  •   
  • 旋转应由[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节 - 常见转换)

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