为什么 PDFBox "moveTextPositionByAmount(X,Y)" 会导致指数行为?
Why does PDFBox "moveTextPositionByAmount(X,Y)" result in a exponential behavior?
我正在使用 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();
}
}
[...]
这只是遍历一个列表并将元素打印到我的 PDF 文件中。我希望 moveTextPositionByAmount(X,Y)
方法能够简单地将光标以线性方式移动到另一个位置。
不幸的是,情况并非如此,结果生成了一个包含文本的 PDF 文件,但是 文本元素之间的距离随着循环的每次迭代 而增加,即使我只是将我的变量 textPositionY
增加 10。元素之间距离的增加最好用 distance = e^x
之类的东西来描述
这是一个简化的示例输出:
moveTextPositionByAmount()
不以绝对坐标为参数。是相对定位。
假设您从坐标 0 0 开始,textPositionY
初始化为 10。您第一次调用该方法会将光标移动到 0 10。
下一次迭代将 textPositionY
提高到 20。您已经在 0 10,但将光标移动 20,所以您在 0 30。
第三:0 60
第四:0 100
第五名:0 150
如果你想要相等的距离,那么不要增加 textPositionY
并且可能将变量重命名为 lineGap
因为它不是一个位置。
我正在使用 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();
}
}
[...]
这只是遍历一个列表并将元素打印到我的 PDF 文件中。我希望 moveTextPositionByAmount(X,Y)
方法能够简单地将光标以线性方式移动到另一个位置。
不幸的是,情况并非如此,结果生成了一个包含文本的 PDF 文件,但是 文本元素之间的距离随着循环的每次迭代 而增加,即使我只是将我的变量 textPositionY
增加 10。元素之间距离的增加最好用 distance = e^x
这是一个简化的示例输出:
moveTextPositionByAmount()
不以绝对坐标为参数。是相对定位。
假设您从坐标 0 0 开始,textPositionY
初始化为 10。您第一次调用该方法会将光标移动到 0 10。
下一次迭代将 textPositionY
提高到 20。您已经在 0 10,但将光标移动 20,所以您在 0 30。
第三:0 60 第四:0 100 第五名:0 150
如果你想要相等的距离,那么不要增加 textPositionY
并且可能将变量重命名为 lineGap
因为它不是一个位置。