理解PDPageContentStream.setTextMatrix()的参数

时间:2016-09-20 14:52:06

标签: android pdfbox

我无法理解m参数的矩阵PDPageContentStream.setTextMatrix(Matrix m)中的6个值是什么意思。之前它过去常常需要6个值,但现在需要一个包含所有值的矩阵。

是的我已经阅读了文档,我发现解释完全没用 -

public void setTextMatrix(double a,
             double b,
             double c,
             double d,
             double e,
             double f)
               throws IOException

The Tm operator. Sets the text matrix to the given values. A current text matrix will be replaced with the new one.

Parameters:
a - The a value of the matrix.
b - The b value of the matrix.
c - The c value of the matrix.
d - The d value of the matrix.
e - The e value of the matrix.
f - The f value of the matrix.

我也搜索了一些例子,但我找不到这些值的解释。另外,奇怪的是,当我用2个不同的PDF文件尝试相同的值时,结果是不同的,所以我假设这与边距和距离等有关。

我觉得我在浪费时间做猜测工作。对论证的直接解释将非常好。

修改

我知道矩阵以及如何传递值。我不知道矩阵中的值实际意味着什么。

1 个答案:

答案 0 :(得分:2)

您可以尝试使用Matrix constructors

之一绕过新方法要求
setTextMatrix(new Matrix(Double.valueOf(a).floatValue(),
                             Double.valueOf(b).floatValue(),
                             Double.valueOf(c).floatValue(),
                             Double.valueOf(d).floatValue(),
                             Double.valueOf(e).floatValue(),
                             Double.valueOf(f).floatValue()))

具有丢失一些double准确度的小风险。

修改
您可以查看此示例 - UsingTextMatrix

每个PDPageContentStream.java 这是您已查询的已弃用的setTextMethod

@Deprecated
public void setTextMatrix(double a, double b, double c, double d, double e, double f) throws IOException
{
    setTextMatrix(new Matrix((float)a, (float)b, (float)c, (float)d, (float)e, (float)f));
} 

基本上做了我上面尝试的。所以除了更紧凑的使用之外,不应该有任何重大差异。有关org.apache.pdfbox.pdmodel.PDPageContentStream类的更多信息。

关于单个float / double值的含义:

a, b, c, d, e, f定义表格的单个org.apache.pdfbox.cos.COSArray

 static final float[] DEFAULT_SINGLE =
 {
        a,b,0,  
        c,d,0, 
        e,f,1 
 };

,其中

a stands for ScaleX
b stands for ShearY
c stands for ShearX
d stands for ScaleY
e stands for TranslateX
f stands for TranslateY

在此Wiki about Affine Transformations中,您可以阅读使用这些值可以执行的操作。以下是可视操作: enter image description here

注意:tXtY以及上图中org.apache.pdfbox.util.Matrix/dashboard的位置略有不同。

希望这可以解决问题。