ItextSharp:如何使用ItextSharp设置动态标题。C#Net
我正在创建3页的PDF,所有3页都应该有3个不同的标题。我在文档中遇到了一个例子,但是下面的代码不起作用ItextSharp:如何使用ItextSharp设置动态标题。C#Net,c#,itext,C#,Itext,我正在创建3页的PDF,所有3页都应该有3个不同的标题。我在文档中遇到了一个例子,但是下面的代码不起作用 public class ReportPdfHeaderFooter : PdfPageEventHelper { public void SetHeader(string header) { this._header = header; } public override void OnEnd
public class ReportPdfHeaderFooter : PdfPageEventHelper
{
public void SetHeader(string header)
{
this._header = header;
}
public override void OnEndPage(PdfWriter writer, Document document)
{
base.OnEndPage(writer, document);
PdfPTable table = new PdfPTable(1);
table.AddCell(title);
footer.WriteSelectedRows(0, -1, Pdf.MarginLeft, document.Bottom, writer.DirectContent);
}
}
public CreatePdf()
{
private Document _doc;
private MemoryStream _memStream;
private PdfWriter _pdfWriter;
this._doc = new Document();
this._memStream = new MemoryStream();
this._pdfWriter = PdfWriter.GetInstance(this._doc, _memStream);
var reportPdfHeaderFooter = new ReportPdfHeaderFooter();
_pdfWriter.PageEvent = headerFooter;
reportPdfHeaderFooter.SetHeader("Header 1");
_doc.Open();
reportPdfHeaderFooter.SetHeader("Header 2");
_doc.NewPage();
_doc.Close();
}
我已经完全完成了文档中提到的任何操作,但仍然在这两个页面中获得标题2。尽管看起来您的思路正确,但对于上面的
ReportPdfHeaderFooter
类来说,一定是一个坏的复制/粘贴,它不会按原样编译
这里有一个简单的工作示例来帮助您开始
首先是PdfPageEventHelper
实现:
public class PageEventHeader : PdfPageEventHelper
{
public string HeaderText { get; set; }
public override void OnEndPage(PdfWriter writer, Document document)
{
float cellHeight = document.TopMargin;
Rectangle page = document.PageSize;
PdfPTable table = new PdfPTable(1) { TotalWidth = page.Width };
table.AddCell(new PdfPCell(new Phrase(HeaderText))
{
Border = PdfPCell.NO_BORDER,
FixedHeight = cellHeight,
HorizontalAlignment = Element.ALIGN_CENTER
});
table.WriteSelectedRows(
0, -1, 0,
page.Height - cellHeight + table.TotalHeight,
writer.DirectContent
);
}
}
第二,测试PDF文件创建:
using (var stream = new MemoryStream())
{
var header = new PageEventHeader();
using (Document document = new Document())
{
var writer = PdfWriter.GetInstance(document, stream);
document.Open();
writer.PageEvent = header;
header.HeaderText = "Header 0";
document.Add(new Phrase("Header 0"));
document.NewPage();
header.HeaderText = "Header 1";
document.Add(new Phrase("Header 1"));
}
File.WriteAllBytes(OUTPUT_FILE, stream.ToArray());
}
谢谢,我还是没有得到两个头球。两个页面都显示标题1@ManishMakkad-不知道该说什么。我总是在给出答案之前测试代码。上面的代码在每页上正确设置了不同的标题文本。您可能希望使用您正在使用的确切代码编辑您的问题。同样,您提供的代码示例不完整,因为它无法编译。例如,
ReportPdfHeaderFooter.OnEndPage()
有一个名为footer
的变量,该变量从未声明/定义过。我发布了一半的代码片段,我发现了问题,谢谢:)