使用itextsharp的页眉和页脚使用c#
我正在使用itextsharp使用.net web应用程序生成pdf。我已经使用nuget软件包安装了itextsharp的以下版本-版本5.5.10。我已经看过样品并冲洗过了 代码示例生成pdf,它正在工作。然而,我无法理解或得到页眉页脚已添加到pdf。下面是我正在使用的示例代码使用itextsharp的页眉和页脚使用c#,c#,itext,C#,Itext,我正在使用itextsharp使用.net web应用程序生成pdf。我已经使用nuget软件包安装了itextsharp的以下版本-版本5.5.10。我已经看过样品并冲洗过了 代码示例生成pdf,它正在工作。然而,我无法理解或得到页眉页脚已添加到pdf。下面是我正在使用的示例代码 public class Header : PdfPageEventHelper { protected Phrase header; public void setHeader(Phrase he
public class Header : PdfPageEventHelper
{
protected Phrase header;
public void setHeader(Phrase header)
{
this.header = header;
}
public void onEndPage(PdfWriter writer, Document document)
{
PdfContentByte canvas = writer.DirectContent;
ColumnText.ShowTextAligned(canvas, Element.ALIGN_RIGHT, header, 559, 806, 0);
}
}
Document pdfReport = null;
MemoryStream msReport = new MemoryStream();
PdfWriter pdfWriter = PdfWriter.GetInstance(pdfReport, msReport);
if (!string.IsNullOrEmpty(HeaderText))
{
Header objHeaderFooter = new Header();
//Here i need to assign the string HeaderText to Header. I dont know how to do it.
}
请帮助了解如何使用itextSharp分配HeaderText。大多数开发人员示例都是基于java的
但是我使用的是.net c#。您想在
if (!string.IsNullOrEmpty(HeaderText))
{
Header objHeaderFooter = new Header();
//Here i need to assign the string HeaderText to Header. I dont know how to do it.
}
假设HeaderText
为字符串,则可以使用Header
方法setHeader
:
objHeaderFooter.setHeader(new Phrase(HeaderText));
此外,您必须将objHeaderFooter
分配给PdfWriter
实例:
pdfWriter.PageEvent = objHeaderFooter;
因此:
此外,每当您在c#中重写一个方法时,相应地将其标记为override
。特别是在页面事件侦听器中,使用
public override void onEndPage(PdfWriter writer, Document document)
这很容易忘记,尤其是在移植java示例时,因为在java中,相应的标记@Override
是可选的
下面是op提供的示例代码
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment; filename=abc.pdf");
Response.Charset = "";
Response.BinaryWrite(getbinary());
Response.End();
public byte[] getbinary()
{
Document pdfReport = null;
pdfReport = new Document(PageSize.A4, 25, 25, 40, 25);
MemoryStream msReport = new MemoryStream();
PdfWriter pdfWriter = PdfWriter.GetInstance(pdfReport, msReport);
pdfReport.Open();
if (!string.IsNullOrEmpty("Header Text"))
{
Header objHeaderFooter = new Header();
objHeaderFooter.SetHeader(new Phrase("Header Text"));
pdfWriter.PageEvent = objHeaderFooter;
}
PdfPTable ptData1 = new PdfPTable(1);
ptData1.SpacingBefore = 8;
ptData1.DefaultCell.Padding = 1;
ptData1.WidthPercentage = 100;
ptData1.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
ptData1.DefaultCell.VerticalAlignment = Element.ALIGN_MIDDLE;
PdfPCell cell1 = new PdfPCell();
cell1.BorderWidth = 0.001F;
cell1.BackgroundColor = new BaseColor(250, 250, 250);
cell1.BorderColor = new BaseColor(100, 100, 100);
cell1.Phrase = new Phrase("Sample text");
ptData1.AddCell(cell1);
PdfPCell cell = new PdfPCell();
cell.BorderWidth = 0.001F;
cell.BackgroundColor = new BaseColor(200, 200, 200);
cell.BorderColor = new BaseColor(100, 100, 100);
cell.Phrase = new Phrase("test value");
ptData1.AddCell(cell);
pdfReport.Add(ptData1);
pdfReport.Close();
return msReport.ToArray();
}
public class Header : PdfPageEventHelper
{
protected Phrase header;
public void SetHeader(Phrase header)
{
this.header = header;
}
public void onEndPage(PdfWriter writer, Document document)
{
PdfContentByte canvas = writer.DirectContent;
ColumnText.ShowTextAligned(canvas, Element.ALIGN_RIGHT, header, 559, 806, 0);
}
}
也许这可以作为一种解决办法。添加标题作为另一个单元格值 下面是代码
if (!string.IsNullOrEmpty(HeaderText))
{
PdfPTable Header = new PdfPTable(1);
Header.SpacingBefore = 8;
Header.DefaultCell.Padding = 1;
Header.WidthPercentage = 100;
Header.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
Header.DefaultCell.VerticalAlignment = Element.ALIGN_MIDDLE;
PdfPCell cell1 = new PdfPCell();
cell1.BorderWidth = 0.001F;
cell1.BackgroundColor = new BaseColor(250, 250, 250);
cell1.BorderColor = new BaseColor(100, 100, 100);
cell1.Phrase = new Phrase(HeaderText, fontBold);
Header.AddCell(cell1);
pdfReport.Add(ptDataHeader);
}
复制品?解决方案看起来很复杂。我正在寻找一种更简单的方法,使用c#将页眉和页脚添加到pdf文件中。“解决方案很复杂”并不是拒绝它的理由,这可能重复了为什么要使用坐标
559806
?你确定那些是对的吗?您在回答的注释中告诉我们,标题没有显示,但如果559806
是页面可见区域之外的坐标,这将是非常正常的。我尝试过这样做。但在pdf中仍然看不到标题。有什么遗漏吗。或者它是特定于浏览器的。它不是特定于浏览器的。因此,缺少了一些东西。不幸的是,你的代码是“否”,所以我无法使用它进行检查。使用c#的简短示例将对我有所帮助,我目前只使用智能手机。“我以后会调查的。”贾加内什我想你误解了mkl(我希望你不是故意这样做的)。Mkl要求您提供一个示例,这意味着您需要提供一个示例,以便我们可以了解您做错了什么。网上有成百上千的例子。你为什么不试试这些例子呢?我很想结束你的问题,因为它已经被回答了很多次了,答案一点也不复杂!你的回答和你的问题有什么关系吗?您要求在文件中添加页眉和页脚,现在您考虑一个表来解决这个问题吗?我没有标记答案,并标记了我先前更新过的另一个表。下面这行怎么会有错误。它应该是公共覆盖void onnedpage(PdfWriter writer,Document)的,这确实非常重要。当你接受我的回答时,我在上面加了一句话。我想我没有真正研究标题
代码,因为问题集中在如何使用itextSharp分配HeaderText。
if (!string.IsNullOrEmpty(HeaderText))
{
PdfPTable Header = new PdfPTable(1);
Header.SpacingBefore = 8;
Header.DefaultCell.Padding = 1;
Header.WidthPercentage = 100;
Header.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
Header.DefaultCell.VerticalAlignment = Element.ALIGN_MIDDLE;
PdfPCell cell1 = new PdfPCell();
cell1.BorderWidth = 0.001F;
cell1.BackgroundColor = new BaseColor(250, 250, 250);
cell1.BorderColor = new BaseColor(100, 100, 100);
cell1.Phrase = new Phrase(HeaderText, fontBold);
Header.AddCell(cell1);
pdfReport.Add(ptDataHeader);
}