Как указать положение таблицы в файле PDF, используя iTextsharp в C#
Я создал PDF-файл с графикой, сейчас пытаюсь добавить таблицу под эту графику. Моя проблема в том, что таблица находится над графикой, как мне указать местоположение / положение, в котором я хочу разместить свою таблицу в документе PDF?
Это мой код
docl.Open();
docl.Add(new Paragraph("My first PDF file"));
PdfContentByte cb = writer.DirectContent;
//employee
// position y,position x,length,height, unknown
cb.RoundRectangle( 20f, 745f, 200f, 35f, 10f);
//title
cb.RoundRectangle(235f, 745f, 35f, 35f, 10f);
//identity number
cb.RoundRectangle(280f, 745f, 105f, 35f, 10f);
//date of birth
cb.RoundRectangle(390f, 745f, 105f, 35f, 10f);
//employee number
cb.RoundRectangle(500f, 745f, 105f, 35f, 10f);
//address
cb.RoundRectangle(20f, 660f, 200f, 80f, 10f);
//pay method
cb.RoundRectangle(235f, 700f, 35f, 35f, 10f);
//brantch code
cb.RoundRectangle(235f, 660f, 35f, 35f, 10f);
//bank
cb.RoundRectangle(280f, 700f, 215f, 35f, 10f);
//account type
cb.RoundRectangle(500f, 700f, 105f, 35f, 10f);
//account number
cb.RoundRectangle(280f, 660f, 160f, 35f, 10f);
//pay point
cb.RoundRectangle(445f, 660f, 35f, 35f, 10f);
//date of payment
cb.RoundRectangle(506f, 660f, 90f, 35f, 10f);
//marital status
cb.RoundRectangle(20f, 600f, 35f, 35f, 10f);
//gender
cb.RoundRectangle(60f, 600f, 35f, 35f, 10f);
//date of appointment
cb.RoundRectangle(100f, 600f, 70f, 35f, 10f);
//Tax number
cb.RoundRectangle(175f, 600f, 70f, 35f, 10f);
cb.Stroke();
PdfPTable table = new PdfPTable(2);
table.HorizontalAlignment = 0;
table.SetTotalWidth(new float[] { 800, 200 });
PdfPCell cell = new PdfPCell(new Phrase("EARNINGS"));
cell.Colspan = 2;
cell.HorizontalAlignment = 1;
table.AddCell(cell);
table.AddCell("Description");
table.AddCell("Amount");
Я использовал эту строку, чтобы указать положение графики в документе: // позиция y, позиция x, длина, высота, неизвестно cb.RoundRectangle( 20f, 745f, 200f, 35f, 10f);
Я хочу разместить таблицу под графикой.
2 ответа
Вы смешиваете низкоуровневый подход (добавление контента в абсолютных позициях) с высокоуровневым подходом (используя document.add()
) для содержимого страницы.
Либо вы придерживаетесь высокоуровневого подхода, используя таблицу для создания круглых прямоугольников. Вы можете создавать таблицы с границами, которые имеют закругленные углы, используя события ячеек и таблиц. Когда вы используете document.add()
, iText позаботится о позиционировании всего (включая разделение таблицы, если она не помещается на странице).
Или вы придерживаетесь низкоуровневого подхода, добавляя таблицу в абсолютной позиции, но имейте в виду, что itext не разделит таблицу, если она не помещается на странице.
Взгляните на этот пример: Java | C# | PDF
В нем показано, как создать закругленные границы для таблиц, используя события ячейки и / или события таблицы. См. Другие примеры главы 5 для менее сложного примера кода.
Как вы можете видеть на примере календаря, таблица добавляется в абсолютной позиции, используя метод table.WriteSelectedRows(...)
, Поскольку вы знаете координаты скругленных прямоугольников, вы можете использовать этот метод, чтобы добавить свою таблицу в абсолютную позицию.
private static void DemoTableSpacing() {
using (FileStream fs = new FileStream("SpacingTest.pdf", FileMode.Create)) {
Document doc = new Document();
PdfWriter.GetInstance(doc, fs);
doc.Open();
Paragraph paragraphTable1 = new Paragraph();
paragraphTable1.SpacingAfter = 15f;
PdfPTable table = new PdfPTable(3);
PdfPCell cell = new PdfPCell(new Phrase("This is table 1"));
cell.Colspan = 3;
cell.HorizontalAlignment = 1;
table.AddCell(cell);
table.AddCell("Col 1 Row 1");
table.AddCell("Col 2 Row 1");
table.AddCell("Col 3 Row 1");
//table.AddCell("Col 1 Row 2");
//table.AddCell("Col 2 Row 2");
//table.AddCell("Col 3 Row 2");
paragraphTable1.Add(table);
doc.Add(paragraphTable1);
Paragraph paragraphTable2 = new Paragraph();
paragraphTable2.SpacingAfter = 10f;
table = new PdfPTable(3);
cell = new PdfPCell(new Phrase("This is table 2"));
cell.Colspan = 3;
cell.HorizontalAlignment = 1;
table.AddCell(cell);
table.AddCell("Col 1 Row 1");
table.AddCell("Col 2 Row 1");
table.AddCell("Col 3 Row 1");
table.AddCell("Col 1 Row 2");
table.AddCell("Col 2 Row 2");
table.AddCell("Col 3 Row 2");
paragraphTable2.Add(table);
doc.Add(paragraphTable2);
doc.Close();
}
}
Я ИСПОЛЬЗУЮ ЭТОТ ОДИН ДЛЯ МОЕЙ СТОЛИЧНОЙ ПОЗИЦИИ В iTEXTSHARP LINK: https://www.codeproject.com/Questions/351802/Its-possible-put-a-table-in-absolute-position-with