Если вы заставите iText определять макет текста, даже используя SetFixedPosition
, в этом расчете будет множество значений, в частности, спуск шрифта, начало, отступы и поля, ...
Эти сложности, прежде всего, связаны с возможностью эмуляции HTML / CSS -подобных функций настройки типа текста.
Кроме того, iText применяет округление к числам, которые записывает в поток контента.
Если вы хотите легко распознать позицию, которую вы задали, не заставляйте iText определять макет текста, а делайте это самостоятельно и используйте координаты, которые не повредят при округлении, например, вместо
Paragraph paragraph = new Paragraph("test string");
paragraph.SetFont(helv);
paragraph.SetFontSize(8);
paragraph.SetFixedPosition(500, 194, 100);
document.Add(paragraph);
do
PdfCanvas canvas = new PdfCanvas(pdfDocument, 1);
canvas.BeginText()
.SetFontAndSize(helv, 8)
.MoveText(100, 194)
.ShowText("test string")
.EndText();
, в результате чего
BT
/F1 8 Tf
100 194 Td
(test string) Tj
ET
позволяет вам сразу узнать ваши координаты.
(Конечно, это означает что значение y относится не к самому низу текста, а к его базовой строке.)
При этом вы упоминаете, что хотите go вернись позже и повтор зашнуруйте этот текст чем-нибудь еще . Пожалуйста, позвольте мне рекомендовать против этого. Текст в потоках содержимого PDF не предназначен для такого редактирования. Здесь вы можете найти много вопросов о переполнении стека людьми, которые попробовали это и столкнулись с проблемами после легкого старта. Прочитайте этот ответ перечисляя некоторые из препятствий.
Даже если вы хотите редактировать только те документы, которые вы создаете сами, и, следовательно, до некоторой степени контролировать их, вы не защищены от таких проблемы, например, после обновления библиотеки.
Альтернативой может быть использование полей формы AcroForm (которые вы можете сделать доступными только для чтения, чтобы предотвратить случайные манипуляции и даже сгладить, как только больше не ожидается никаких изменений).