如何使用iTextSharp创建PDF模板

问题描述 投票:-1回答:1

我的任务是创建一个包含多个页面和多个表格的PDF模板。下面是我编写的用于创建表的代码。我不知道如何创建该表的模板。当我更改pageSize.GetLeft(40), pageSize.GetBottom(200)的值时,模板中没有任何效果。

Rectangle pageSize = document.PageSize;

Department = "Town Development Department";
WebSite = "www.cmdachennai.gov.in";
VersionNumber = "1.0.77";

Phrase cc = new Phrase("This is report", H2);
Paragraph hp = new Paragraph();
hp.Add(cc);

Phrase c1 = new Phrase("Check List Report", H5);

Phrase c2 = new Phrase("Report Generated On : ", H3);
Phrase c3 = new Phrase(DateTime.Now.ToString("dd-MM-yyyy"), H3);

Phrase c5 = new Phrase("Version Number : ", H3);
Phrase c6 = new Phrase(VersionNumber, H3);

//Phrase c7 = new Phrase("Version Number : ", H3);

Paragraph hp4 = new Paragraph();
hp4.Add(c5);
hp4.Add(c6);

Paragraph hp1 = new Paragraph();
hp1.Add(c2);
hp1.Add(c3);


hp.Alignment = 1;
PdfPTable tblTopHeading = new PdfPTable(1);
tblTopHeading.WidthPercentage = 100;
PdfPCell Topcell = new PdfPCell();
Topcell.AddElement(hp);
Topcell.HorizontalAlignment = 1;
Topcell.BorderWidthBottom = 0f;
Topcell.BorderWidthLeft = 0f;
Topcell.BorderWidthRight = 0f;
Topcell.BorderWidthTop = 0f;

tblTopHeading.AddCell(Topcell);
document.Add(tblTopHeading);

Paragraph hp2 = new Paragraph(Department, H4);
Paragraph hp3 = new Paragraph(WebSite, H4);
Phrase c = new Phrase("\n", H4);
PdfPTable tblHeading = new PdfPTable(new float[] { 100f, 60f });
tblHeading.WidthPercentage = 100;
PdfPCell cell_1 = new PdfPCell();
PdfPCell cell_2 = new PdfPCell();

Paragraph hp5 = new Paragraph();
hp5.Add(c1);
//hp5.Add(c2);

cell_1.AddElement(hp5);

hp1.Alignment = 2;
hp2.Alignment = 2;
hp3.Alignment = 2;
hp4.Alignment = 2;

cell_2.AddElement(hp1);
cell_2.AddElement(hp4);

cell_1.BorderWidthBottom = 0f;
cell_1.BorderWidthLeft = 0f;
cell_1.BorderWidthRight = 0f;
cell_1.BorderWidthTop = 0f;
cell_2.BorderWidthBottom = 0f;
cell_2.BorderWidthLeft = 0f;
cell_2.BorderWidthRight = 0f;
cell_2.BorderWidthTop = 0f;

tblHeading.AddCell(cell_1);
tblHeading.AddCell(cell_2);
document.Add(tblHeading);

cb.AddTemplate(template, pageSize.GetLeft(40), pageSize.GetBottom(200));

c# itext
1个回答
0
投票

事实证明,您添加到cb的模板(这里可能是cb可能是]

cb.AddTemplate(template, pageSize.GetLeft(40), pageSize.GetBottom(200));

为空:

变量声明PdfTemplate template;,并且在OnOpenDocument方法中,template = cb.CreateTemplate(300, 800);是创建模板

您只需创建它,然后添加它。因此,在不同位置添加该模板不会造成任何差异,这并不奇怪,因为有效地看不到空模板。

现在问

您能解释一下如何将表格放在pdftemplate中,因为现在我只是创建模板

PdfTemplate源自PdfContentByte,并且要将结构化内容(ParagraphPdfPTable,...)添加到PdfContentByte,请使用ColumnText类,例如像这样:

using (FileStream output = new FileStream(@"TemplateWithTable.pdf", FileMode.Create, FileAccess.Write))
using (Document document = new Document(PageSize.A4))
{
    PdfWriter writer = PdfWriter.GetInstance(document, output);
    document.Open();

    PdfPTable table = new PdfPTable(2);
    table.AddCell("Test");
    table.AddCell("Table");

    PdfContentByte canvas = writer.DirectContent;
    PdfTemplate template = canvas.CreateTemplate(300, 800);
    Rectangle pageSize = document.PageSize;
    canvas.AddTemplate(template, pageSize.GetLeft(40), pageSize.GetBottom(200));

    ColumnText ct = new ColumnText(template);
    ct.SetSimpleColumn(new Rectangle(100, 100, 300, 600));
    ct.AddElement(table);
    ct.Go();

    document.Close();
}
© www.soinside.com 2019 - 2024. All rights reserved.