Я пытаюсь реализовать PDF-таблицу с iText7 и C#, и я схожу с ума из-за размера шрифта. Я хочу реализовать таблицу такого типа:

и это то, что я понял до сих пор:

каждая ячейка от 1 до 7 имеет свою ширину (я использую служебную функцию для перехода от миллиметров к указателям, , но в основном ширина больше или меньше 33,53 , 50,51,51,51,54 балла ):
float widthCellId = 120;
float widthCell1 = MillimetersToPoints(11.750f);
float widthCell2 = MillimetersToPoints(18.750f);
float widthCell3 = MillimetersToPoints(17.750f);
float widthCell4 = MillimetersToPoints(18f);
float widthCell5 = MillimetersToPoints(18f);
float widthCell6 = MillimetersToPoints(18f);
float widthCell7 = MillimetersToPoints(19f);
Ячейка 1B идентична ячейке 1A, поэтому я это осознаю в будущем.
Моя настоящая проблема в моей ничьей с клетками c2 ... c7;
row3 - это строка с такой же высотой, как row1 и row2; Я добавил первую ячейку «Row3 N ° 1», которая занимает 2 строки:
table.AddCell(new Cell(2,1).Add(new Paragraph("ROW3\nN°1"))
.SetBorder(new SolidBorder(0))
.SetVerticalAlignment(VerticalAlignment.MIDDLE)
.SetTextAlignment(TextAlignment.CENTER)
.SetCharacterSpacing(0)
.SetFontSize(8)
.SetHeight(33.4f));
, затем я добавил таблицу, содержащую CellA и CellB:
float bargraph1Width = widthCell2 + widthCell3 + widthCell4; \\it is Cell1A or CellA
float bargraph2Width = widthCell5 + widthCell6 + widthCell7; \\it is Cell1B or CellB
float[] innerColWidths = { bargraph1Width, bargraph2Width };
Table innerTable1 = new Table(innerColWidths);
innerTable1.SetWidth((bargraph1Width + bargraph2Width));
innerTable1.SetHorizontalAlignment(HorizontalAlignment.LEFT);
innerTable1.SetBorder(new SolidBorder(blueColor, 0)).SetMargin(0); \\to recognize the table
\\add innerTable1 to table
Cell cellWithInnerTable = new Cell(1,6)
.Add(innerTable1)
.SetBorder(new SolidBorder(0));
table.AddCell( cellWithInnerTable.SetPadding(0) );
, и теперь проблема.
Я добавляю innertableLabels
, который содержит последние 6 текстовых ячеек:
float[] innerColLabelsWidths = { widthCell2, widthCell3, widthCell4, widthCell5, widthCell6, widthCell7 };
Table innertableLabels = new Table(innerColLabelsWidths);
innertableLabels.SetWidth( (widthCell2) + (widthCell3) + (widthCell4) + widthCell5 + (widthCell6) + (widthCell7));
innertableLabels.SetHorizontalAlignment(HorizontalAlignment.LEFT);
innertableLabels.SetBorder(new SolidBorder(ColorConstants.RED, 0)).SetMargin(0);
// cells for led labels
Cell cell2 = AddCellWithLabelsForLeds("FAILURE").SetPaddingLeft(0).SetPaddingRight(0);
Cell cell3 = AddCellWithLabelsForLeds("ESD").SetPaddingLeft(0).SetPaddingRight(0);
Cell cell4 = AddCellWithLabelsForLeds("MCU FAIL").SetPaddingLeft(0).SetPaddingRight(0);
Cell cell5 = AddCellWithLabelsForLeds("PREF.TRIP").SetPaddingLeft(0).SetPaddingRight(0);
Cell cell6 = AddCellWithLabelsForLeds("HEATER").SetPaddingLeft(0).SetPaddingRight(0);
Cell cell7 = AddCellWithLabelsForLeds("THERM.TRIP").SetPaddingLeft(0).SetPaddingRight(0);
innertableLabels.AddCell(cell2);
innertableLabels.AddCell(cell3);
innertableLabels.AddCell(cell4);
innertableLabels.AddCell(cell5);
innertableLabels.AddCell(cell6);
innertableLabels.AddCell(cell7);
Cell cellWithLabels = new Cell(1,6)
.Add(innertableLabels)
.SetBorder(new SolidBorder(0));
// inserting cell with inner table in main table
table.AddCell(cellWithLabels.SetPadding(0));
Для создания каждой ячейки я использую созданную мной функцию с именем AddCellWithLabelsForLeds
:
private static Cell AddCellWithLabelsForLeds(string label) {
var greenColor = new DeviceCmyk(1, 0, 1, 0.176f);
Paragraph ledParagraph = new Paragraph(label)
.SetMargins(0,0,0,0)
.SetPaddings(0,0,0,0)
//.SetMaxWidth(39)
.SetTextAlignment(TextAlignment.CENTER)
.SetBorder(new SolidBorder(greenColor, 0))
.SetFontSize(8);
Cell ledCell = new Cell()
.SetHeight(18.7f)
.SetMargins(0, 0, 0, 0)
.SetPaddings(0, 0, 0, 0)
.SetVerticalAlignment(VerticalAlignment.MIDDLE)
.SetBorder(new SolidBorder(ColorConstants.RED, 0));
ledCell.Add(ledParagraph);
return ledCell;
}
А вот и сумасшествие: если я установлю ledParagraph
размер шрифта 9 или больше вместо 8 .SetFontSize(9);
, то все сломается:

Основная таблица table
становится больше, чем я определил, и в конце добавляется еще один «столбец»; также ячейки с «LAMP / EXPORT» становятся больше, чем я решил. Мне все равно, если текст не помещается, меня беспокоит тот факт, что справа появляется новый пробел.
Почему?