2015-08-11 1 views
2

Я использую библиотеку PDFBox, и в настоящее время я не понимаю поведение метода moveTextPositionByAmount(X,Y).Почему 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

Вот упрощенный пример вывода:

Example

+0

и как выглядит содержимое вашего файла pdf для этого раздела кода? – duffy356

+0

Я отредактировал свой вопрос, я привел вам образ в качестве примера. – Flatron

+0

N.B. Экспоненциальный 'e^x'! = Квадратичный' x^2'. –

ответ

4

moveTextPositionByAmount() делает не принимать абсолютные координаты в качестве параметров. Это относительное позиционирование.

Допустим, вы начинаете в точке с координатами 0 0 и textPositionY инициализировалась 10. Вашего первого вызова метода будет переместить курсор на 0 10.

Следующая итерация поднимает textPositionY до 20. Вы уже- 10, но переместить курсор на 20, так что вы на 0 30.

третий: 0 60 четвёртая: 0 100 пятый: 0 150

Если вы хотите равные расстояния, то не увеличиваются textPositionY и, возможно, переименуйте переменную в lineGap, поскольку это не позиция.

+0

безупречный, спасибо! – Flatron

Смежные вопросы