itext7, шрифты абзаца в ячейках разбивают весь макет - PullRequest
0 голосов
/ 06 апреля 2020

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

enter image description here

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

enter image description here

каждая ячейка от 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);, то все сломается:

enter image description here

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

Почему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...