【发布时间】:2017-05-19 03:34:19
【问题描述】:
我已经使用 itextsharp 创建了 pdf 文件,并且创建了 Header 确定,但是当我创建具有两列的表时。我没有从标题到我的两列的间距
代码
PdfPTable table1 = new PdfPTable(2);
table1.DefaultCell.Border = Rectangle.NO_BORDER;
table1.WidthPercentage = 100;
PdfPCell cell11 = new PdfPCell();
Paragraph UniName = new Paragraph(@"TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐỒNG NAI", fontBold);
UniName.Alignment = Element.ALIGN_CENTER;
Paragraph paragraph = new Paragraph(@"PHÒNG ĐÀO TẠO", times);
paragraph.Alignment = Element.ALIGN_CENTER;
cell11.AddElement(UniName);
cell11.AddElement(paragraph);
cell11.BorderColor = BaseColor.WHITE;
PdfPCell cell12 = new PdfPCell();
Paragraph QH1 = new Paragraph(@"CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM", fontBold);
QH1.Alignment = Element.ALIGN_CENTER;
Paragraph QH = new Paragraph(@"Độc lập - Tự do - Hạnh phúc", fontBold);
QH.Alignment = Element.ALIGN_CENTER;
Paragraph Symbol = new Paragraph(@"----------oOo----------", fontBold);
Symbol.Alignment = Element.ALIGN_CENTER;
cell12.AddElement(QH1);
cell12.AddElement(QH);
cell12.AddElement(Symbol);
cell12.BorderColor = BaseColor.WHITE;
table1.AddCell(cell11);
table1.AddCell(cell12);
Paragraph TitleReport = new Paragraph(@"TỔNG HỢP COI CHẤM THI", titleFont);
TitleReport.Alignment = Element.ALIGN_CENTER;
Paragraph Info = new Paragraph(string.Format(@"Từ ngày: {0} đến ngày: {1} Đơn vị: {2}", DateTime.Now.AddDays(-2).ToString("dd/MM/yyyy"), DateTime.Now.ToString("dd/MM/yyyy"), "Trung tâm quản lý chất lượng"), normalFont);
Info.Alignment = Element.ALIGN_LEFT;
Info.SpacingBefore = 20;
Info.SpacingAfter = 200;
PdfContentByte canvas = writer.DirectContent;
ColumnText ct = new ColumnText(canvas);
int side_of_the_page = 0;
ct.SetSimpleColumn(COLUMNS[side_of_the_page]);
int paragraphs = 0;
while (paragraphs < 28)
{
PdfPTable table = new PdfPTable(5);
table.AddCell("STT");
table.AddCell("Số Phách");
table.AddCell("Điểm bằng số");
table.AddCell("Điểm bằng chữ");
table.AddCell("Ghi chú");
for (int i = 0; i < 33; i++)
{
table.AddCell((i + 1).ToString());
table.AddCell("209292");
table.AddCell("4");
table.AddCell("Điểm bằng chữ");
table.AddCell("");
++paragraphs;
}
table.HeaderRows = 1;
//table.LockedWidth = true;
ct.AddElement(table);
//ct.AddElement(new Paragraph(String.Format("Paragraph {0}: {1}", , TEXT)));
while (ColumnText.HasMoreText(ct.Go()))
{
if (side_of_the_page == 0)
{
side_of_the_page = 1;
canvas.MoveTo(297.5f, 36);
canvas.LineTo(297.5f, 806);
canvas.Stroke();
}
else
{
side_of_the_page = 0;
doc.NewPage();
}
ct.SetSimpleColumn(COLUMNS[side_of_the_page]);
}
}
doc.Add(table1);
doc.Add(TitleReport);
doc.Add(Info);
【问题讨论】:
-
请出示关键代码。
-
尽可能多的堆栈溢出问题应该是有意义的,而不需要咨询外部资源。因此,我将您的代码复制到您的问题中。
-
谢谢。但我无法解决我的问题。如果你能解决它,请告诉我
-
好的,问题的原因是您混合了 iText 的自动布局(当您使用
doc.Add添加文档标题和标题时)和手动布局(当您使用 @ 添加内容表时987654327@)。 iText 的自动布局不考虑手动布局添加的任何内容。因此,您必须将通过自动布局添加的内容考虑到您的手动布局中;可能对所有内容使用手动布局会更容易。顺便说一句,我有点惊讶您在所有内容之后添加文档标题。这可以将您的标题推到后面的页面上。
标签: c# itext multiple-columns