【发布时间】:2010-12-02 06:30:51
【问题描述】:
我想要一个 PdfPCell 类的单元格表,每个单元格都有一个小标题、主字符串和小页脚。我找不到插入它们的方法,因为不允许将 HeaderandFooter 元素添加到单元格中,一个段落会覆盖另一个段落,依此类推。有什么想法吗?
提前致谢
【问题讨论】:
标签: c# java pdf pdf-generation itextsharp
我想要一个 PdfPCell 类的单元格表,每个单元格都有一个小标题、主字符串和小页脚。我找不到插入它们的方法,因为不允许将 HeaderandFooter 元素添加到单元格中,一个段落会覆盖另一个段落,依此类推。有什么想法吗?
提前致谢
【问题讨论】:
标签: c# java pdf pdf-generation itextsharp
您可以使用嵌套表。
插入一个 1x1 的表格,而不是 PdfPCell,该表格带有一个很小的页眉和一个很小的页脚。
编辑:
让我们忘记 iTextSharp 的表格页脚和页眉功能,因为它在表格跨越多个页面并且您重复页脚和页眉时很有用。在我们的例子中,页眉和页脚将属于仅包含 3 个单元格的内部表格,因此我们对所有单元格都使用 PdfPCell。
然后主函数是GetHFCell,它将返回一个包含自定义标题单元格(高度、字体、文本、..)、自定义页脚单元格和包含主文本的中间单元格的 PdfPTable。
每当我们想向主表添加一个单元格时,都会调用此函数(GeneratePDF 中的如何使用此函数的示例)。
private static PdfPTable GetHFCell(string header, string footer, string text)
{
PdfPTable pdft;
PdfPCell hc;
PdfPCell fc;
pdft = new PdfPTable(1);
pdft.WidthPercentage = 100f;
pdft.DefaultCell.Border = 0;
hc = new PdfPCell(new Phrase(header));
hc.Top = 0f;
hc.FixedHeight = 7f;
hc.HorizontalAlignment = 1;
hc.BackgroundColor = iTextSharp.text.Color.ORANGE;
((Chunk)(hc.Phrase[0])).Font = new iTextSharp.text.Font(((Chunk)(hc.Phrase[0])).Font.Family, 5f);
fc = new PdfPCell(new Phrase(footer));
hc.Top = 0f;
fc.FixedHeight = 7f;
hc.HorizontalAlignment = 1;
fc.BackgroundColor = iTextSharp.text.Color.YELLOW;
((Chunk)(fc.Phrase[0])).Font = new iTextSharp.text.Font(((Chunk)(fc.Phrase[0])).Font.Family, 5f);
pdft.AddCell(hc);
pdft.AddCell(text);
pdft.AddCell(fc);
return pdft;
}
public void GeneratePDF()
{
Document document = new Document();
try
{
PdfWriter.GetInstance(document, new FileStream("File1.pdf", FileMode.Create));
document.Open();
PdfPTable table = new PdfPTable(5);
table.DefaultCell.Padding = 0;
table.DefaultCell.BorderWidth = 2f;
for (int j = 1; j < 6; j++)
{
for (int i = 1; i < 6; i++)
{
//calling GetHFCell
table.AddCell(
GetHFCell("header " + ((int)(i + 5 * (j - 1))).ToString(),
"footer " + ((int)(i + 5 * (j - 1))).ToString(),
"z" + j.ToString() + i.ToString()));
}
}
document.Add(table);
}
catch (DocumentException de)
{
//...
}
catch (IOException ioe)
{
//...
}
document.Close();
}
【讨论】: