Поиск начальной координаты x текста в выровненной по правому краю ячейке PdfPCell

#c# #itext

#c# #itext

Вопрос:

Я пытаюсь создать форматированную таблицу в iTextSharp.

Таблица будет состоять из двух столбцов, левый из которых выровнен по левому краю, а правый выровнен по правому краю с пунктирной линией между значениями в правом и левом столбцах.

Поскольку я не хочу использовать шрифт фиксированной ширины / моноширинный, мои попытки до сих пор заключались в попытке определить конец текста в левом столбце и начало текста в правом столбце, чтобы нарисовать пунктирную линию между этими двумя точками, однако я изо всех сил пытаюсь получитьэти значения координат.

 string item = "Case #: ";
string value = record.CaseID;

// Initialize left cell of row
PdfPCell itemCell = new PdfPCell(new Phrase(item, regular));
itemCell.HorizontalAlignment = 0; // Left
caseSummaryTable.AddCell(itemCell);

// Resolve left cell in row to get end point
columnText.Go();
float xItemEnd = columnText.LastX;
float yItemEnd = columnText.YLine;

// Initialize right cell of row
PdfPCell valueCell = new PdfPCell(new Phrase(value, regular));
valueCell.HorizontalAlignment = 2; // Right
caseSummaryTable.AddCell(valueCell);

// Resolve right cell in row
// Attempt to get usable start X coordinate
columnText.Go();
float xValueStart = columnText.LastX; // ?
float yValueStart = columnText.YLine; // ?
  

Метод lastX get возвращает 0 в обоих случаях, тогда как строка Y, по-видимому, возвращает полезное значение. Есть ли у кого-нибудь советы по определению нужных мне координат?

Ответ №1:

                     string item = "Case #: ";
                    string value = record.CaseID;

                    // Initialize left cell of row
                    PdfPCell itemCell = new PdfPCell(new Phrase(item, regular));
                    itemCell.HorizontalAlignment = 0; // Left
                    itemCell.Border = Rectangle.NO_BORDER;
                    caseSummaryTable.AddCell(itemCell);

                    // Initialize right cell of row
                    PdfPCell valueCell = new PdfPCell(new Phrase(value, regular));
                    valueCell.HorizontalAlignment = 2; // Right
                    valueCell.Border = Rectangle.NO_BORDER;
                    caseSummaryTable.AddCell(valueCell);

                    // Calculate start and end of dotted-line
                    float xItemEnd = x0   regular.BaseFont.GetWidthPoint(item, fontSize);
                    float xValueStart = x0   xD - regular.BaseFont.GetWidthPoint(value, fontSize);
                    float rowBaseLine = columnText.YLine - leadingValue;

                    // Draw dotted-line from end of item text to start of value text
                    DottedLineSeparator dottedLine = new DottedLineSeparator();
                    dottedLine.Draw(contentByte, xItemEnd, rowBaseLine, xValueStart, rowBaseLine, rowBaseLine);
  

Хитрость заключалась в том, чтобы получить вычисленную ширину строк из той, которая определяет конец текста столбца значений и начало текста столбца значений.