Я хочу нарисовать расписание на основе таблицы (включая границы), где некоторые из ячеек (частично) заполнены цветом. Этот цвет основан на PdfTemplate, который добавляется как изображение в ячейку.рисовать таблицу с заполненными ячейками в PDF с помощью iText для .NET.
Я создать тестовый проект для него, и приложенных к нему размещен выходу по адресу: PDF output
В примере, я ожидаю, что это сделать заполненную строку, каждый раз в 2 кварталов больше. Как вы можете видеть, это немного больше, чем 2 блока.
Шаблон, который я создаю, должен быть точный размер ячеек таблицы. Поэтому я не понимаю, почему он становится все больше итераций.
Любые идеи, как исправить это?
public Test()
{
int cellWidth = 23;
int usernameCellWith = 86;
float[] scheduleTableColumnWidths = new float[33];
scheduleTableColumnWidths[0] = usernameCellWith;
for (int i = 1; i <= 32; i++)
scheduleTableColumnWidths[i] = cellWidth;
using (MemoryStream stream = new MemoryStream())
{
Rectangle rect = PageSize.GetRectangle("A4");
rect = new Rectangle(rect.Height, rect.Width, 90);
using (Document document = new Document(rect, 10f, 10f, 10f, 10f))
{
PdfWriter writer = PdfWriter.GetInstance(document, stream);
if (!document.IsOpen())
{
document.NewPage();
document.Open();
}
PdfPTable containerTable = new PdfPTable(1);
containerTable.DefaultCell.Border = Rectangle.NO_BORDER;
containerTable.WidthPercentage = 100;
PdfPTable scheduleTable = new PdfPTable(scheduleTableColumnWidths);
for (int iRow = 0; iRow <= 23; iRow++)
{
PdfPCell usernameCell = new PdfPCell(new Phrase("user "+ iRow));
usernameCell.FixedHeight = cellWidth;
scheduleTable.AddCell(usernameCell);
for (int iColumn = 1; iColumn <= 32; iColumn++)
{
PdfPCell cell = new PdfPCell();
cell.FixedHeight = cellWidth;
if (iColumn == 1 && iRow % 2 == 0)
{
float width = (float)(iRow + 1) * cellWidth;
PdfTemplate template = writer.DirectContent.CreateTemplate(width, cellWidth);
template.SetColorFill(new BaseColor(System.Drawing.ColorTranslator.FromHtml("#255C8A")));
template.Rectangle(0, 0, width, cellWidth);
template.Fill();
cell = new PdfPCell(Image.GetInstance(template));
}
scheduleTable.AddCell(cell);
}
scheduleTable.CompleteRow();
}
containerTable.AddCell(scheduleTable);
containerTable.CompleteRow();
document.Add(containerTable);
document.CloseDocument();
}
}
}
Я не могу использовать colspan. Строка расписания может начинаться с половины ячейки. Я не всегда должен заполнять целые ячейки. –
У вас есть определенные части, например, только четверти или половинки, или это может быть довольно произвольным, как 6/17? –
Это может быть что угодно. Клетка будет представлять 30 минут. Мне нужно нарисовать минутку, поэтому 1/30-я ячейка –