#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);
Хитрость заключалась в том, чтобы получить вычисленную ширину строк из той, которая определяет конец текста столбца значений и начало текста столбца значений.