为什么 PDFBox“moveTextPositionByAmount(X,Y)”会导致指数行为?

Fla*_*ron 4 java pdfbox

我正在使用PDFBox库,目前我不了解该moveTextPositionByAmount(X,Y)方法的行为。

这是我正在使用的代码:

[...]    
int i = 0;
        for (InventoryItem currInvItem : invList) {
            try {
                content.moveTextPositionByAmount(textPositionX, textPositionY);
                content.drawString(currInvItem.toString());
                textPositionY = textPositionY+10;
                i++;
                if (i > 10) {
                    break;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
[...]
Run Code Online (Sandbox Code Playgroud)

这只是通过一个列表并将元素打印到我的 PDF 文件中。我希望该moveTextPositionByAmount(X,Y)方法可以将光标以线性方式简单地移动到另一个位置。

不幸的是,情况并非如此,结果是一个包含文本的 PDF 文件,但文本元素之间距离随着循环每次迭代增加,即使我只是将变量增加textPositionY了 10。元素之间距离的增加是最好的描述像distance = e^x

这是一个简化的示例输出:

例子

Moh*_*-Aw 6

moveTextPositionByAmount()不以绝对坐标作为参数。是相对定位。

假设您从坐标 0 0 开始并textPositionY使用 10 进行初始化。您第一次调用该方法会将光标移动到 0 10。

下一次迭代textPositionY增加到 20。您已经在 0 10 处,但是将光标移动了 20,所以您在 0 30 处。

第三名:0 60 第四名:0 100 第五名:0 150

如果您想要相等的距离,则不要增加textPositionY并且可能将变量重命名为,lineGap因为它不是一个位置。