iTextsharp -在每个页面的顶部重复一个html表格
本文关键字:html 一个 表格 顶部 iTextsharp | 更新日期: 2023-09-27 18:03:37
我计划使用iTextsharp创建一个发票,在我的发票中,它由3部分组成
- 页面顶部的表格(包括所有供应商信息)
- gridview (item of purchase)
- 签字部分(仅在发票最后一页)
PdfPTable table = new PdfPTable(gv.Columns.Count);
table.AddCell(new PdfPCell(new Phrase(cellText, fontH1)));
...
...
//create PDF document
Document pdfDoc = new Document(PageSize.A4, -30, -30, 15f, 15f);
PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
pdfDoc.Add(table);
pdfDoc.Close();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;" + "filename=GridViewExport.pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Write(pdfDoc);
Response.End();
但是我不知道如何在每个页面上插入表。我计划使用html表,因为它有很多东西需要控制,如不同的供应商,地址,显示/隐藏或取消图像。请帮助。
你的问题以前已经问过了。参见如何在页面中添加HTML页眉和页脚?在官方文档中,或者看看如何在页面中添加HTML页眉和页脚?StackOverflow。
Roman Sidorov的答案是错误的,因为Roman假设您正在从代码中触发NewPage()
。这并不总是正确的。向Document
添加一个表,该表跨越多个页面。这意味着ittext在内部触发NewPage()
函数。
您可以通过使用页面事件向创建的每个页面添加内容。在执行NewPage()
操作之前触发OnEndPage()
事件。这是当您向当前页面添加额外内容时。OnStartPage()
事件在执行NewPage()
操作后立即触发。禁止在OnStartPage()
事件中添加内容。查看iTextSharp -页眉和页脚
这是一个用Java实现页面事件的例子:
public class HeaderFooter extends PdfPageEventHelper {
protected ElementList header;
protected ElementList footer;
public HeaderFooter() throws IOException {
header = XMLWorkerHelper.parseToElementList(HEADER, null);
footer = XMLWorkerHelper.parseToElementList(FOOTER, null);
}
@Override
public void onEndPage(PdfWriter writer, Document document) {
try {
ColumnText ct = new ColumnText(writer.getDirectContent());
ct.setSimpleColumn(new Rectangle(36, 832, 559, 810));
for (Element e : header) {
ct.addElement(e);
}
ct.go();
ct.setSimpleColumn(new Rectangle(36, 10, 559, 32));
for (Element e : footer) {
ct.addElement(e);
}
ct.go();
} catch (DocumentException de) {
throw new ExceptionConverter(de);
}
}
}
您可以轻松地将其移植到c#。我用这个答案是因为它是对一个问题的真实答案。但是:为什么要在HTML中定义页眉(或页脚)呢?这说不通,对吧?
为什么不创建一个PdfPTable
并将其添加到页面事件中的每个页面中呢?这是在回答问题的解释如何添加表作为标题?在官方文档的页面事件部分还有许多其他示例。