Asp.net “开始”页面仅生成第一页的页眉
我有以下web开发代码:Asp.net “开始”页面仅生成第一页的页眉,asp.net,.net,itext7,Asp.net,.net,Itext7,我有以下web开发代码: protected internal class MyEventHandler : iText.Kernel.Events.IEventHandler { public virtual void HandleEvent(iText.Kernel.Events.Event @event) { iText.Kernel.Events.PdfDocumentEvent docEvent = (iText.Ker
protected internal class MyEventHandler : iText.Kernel.Events.IEventHandler
{
public virtual void HandleEvent(iText.Kernel.Events.Event @event)
{
iText.Kernel.Events.PdfDocumentEvent docEvent =
(iText.Kernel.Events.PdfDocumentEvent)@event;
PdfDocument pdfDoc = docEvent.GetDocument();
}
public void onStartPage(
iText.Kernel.Pdf.PdfWriter writer, iText.Layout.Document document)
{
// paragragrap for start pages
…
}
}
以及其他为页面添加更多内容的代码。
它只生成第一页的标题。您混合了来自不同iText版本的事件处理 在iText 5中,您通常通过扩展
PdfPageEventHelper
来实现IPdfPageEvent
,在这里您有单独的方法,如
void OnStartPage(PdfWriter writer, Document document)
void OnEndPage(PdfWriter writer, Document document)
等等
在iText 7中,您实现了只有一个方法的IEventHandler
void HandleEvent(Event @event)
您可以仅为一种事件类型注册事件处理程序,从而在HandleEvent
中知道正确的事件已到达,或者根据事件类型(@event.GetEventType()
)确定获得的事件类型并执行相应的代码
更改页面旋转的事件侦听器示例
例如,在事件处理程序中,仅为页面开始注册
C07E01_EventHandlers.PageRotationEventHandler eventHandler = new PageRotationEventHandler();
pdf.AddEventHandler(PdfDocumentEvent.START_PAGE, eventHandler);
在其事件处理方法中,会相应地进行操作
public virtual void HandleEvent(Event @event) {
PdfDocumentEvent docEvent = (PdfDocumentEvent)@event;
docEvent.GetPage().Put(PdfName.Rotate, this.rotation);
}
完整示例类:
public class C07E01_EventHandlers {
public const String DEST = "../../../results/chapter07/jekyll_hyde_page_orientation.pdf";
public static readonly PdfNumber PORTRAIT = new PdfNumber(0);
public static readonly PdfNumber LANDSCAPE = new PdfNumber(90);
public static readonly PdfNumber INVERTEDPORTRAIT = new PdfNumber(180);
public static readonly PdfNumber SEASCAPE = new PdfNumber(270);
public static void Main(String[] args) {
FileInfo file = new FileInfo(DEST);
file.Directory.Create();
new C07E01_EventHandlers().CreatePdf(DEST);
}
public virtual void CreatePdf(String dest) {
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
pdf.GetCatalog().SetPageLayout(PdfName.TwoColumnLeft);
C07E01_EventHandlers.PageRotationEventHandler eventHandler = new PageRotationEventHandler();
pdf.AddEventHandler(PdfDocumentEvent.START_PAGE, eventHandler);
Document document = new Document(pdf, PageSize.A8);
document.Add(new Paragraph("Dr. Jekyll"));
eventHandler.SetRotation(INVERTEDPORTRAIT);
document.Add(new AreaBreak());
document.Add(new Paragraph("Mr. Hyde"));
eventHandler.SetRotation(LANDSCAPE);
document.Add(new AreaBreak());
document.Add(new Paragraph("Dr. Jekyll"));
eventHandler.SetRotation(SEASCAPE);
document.Add(new AreaBreak());
document.Add(new Paragraph("Mr. Hyde"));
document.Close();
}
protected internal class PageRotationEventHandler : IEventHandler {
protected internal PdfNumber rotation = C07E01_EventHandlers.PORTRAIT;
public virtual void SetRotation(PdfNumber orientation) {
this.rotation = orientation;
}
public virtual void HandleEvent(Event @event) {
PdfDocumentEvent docEvent = (PdfDocumentEvent)@event;
docEvent.GetPage().Put(PdfName.Rotate, this.rotation);
}
internal PageRotationEventHandler() {
}
}
}
添加页眉和页脚的页面侦听器示例
在评论中,您要求提供页眉示例,而不是页面旋转示例。例如,在第3章()示例中,事件侦听器用于添加背景、水印、页眉和页脚:
public class C03E03_UFO {
internal static PdfFont helvetica = null;
internal static PdfFont helveticaBold = null;
public static void Main(String[] args) {
helvetica = PdfFontFactory.CreateFont(StandardFonts.HELVETICA);
helveticaBold = PdfFontFactory.CreateFont(StandardFonts.HELVETICA_BOLD);
...
}
protected internal virtual void CreatePdf(String dest) {
//Initialize PDF document
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
pdf.AddEventHandler(PdfDocumentEvent.END_PAGE, new C03E03_UFO.MyEventHandler(this));
...
}
...
protected internal class MyEventHandler : IEventHandler {
public virtual void HandleEvent(Event @event) {
PdfDocumentEvent docEvent = (PdfDocumentEvent)@event;
PdfDocument pdfDoc = docEvent.GetDocument();
PdfPage page = docEvent.GetPage();
int pageNumber = pdfDoc.GetPageNumber(page);
Rectangle pageSize = page.GetPageSize();
PdfCanvas pdfCanvas = new PdfCanvas(page.NewContentStreamBefore(), page.GetResources(), pdfDoc);
//Set background
Color limeColor = new DeviceCmyk(0.208f, 0, 0.584f, 0);
Color blueColor = new DeviceCmyk(0.445f, 0.0546f, 0, 0.0667f);
pdfCanvas.SaveState()
.SetFillColor(pageNumber % 2 == 1 ? limeColor : blueColor)
.Rectangle(pageSize.GetLeft(), pageSize.GetBottom(), pageSize.GetWidth(), pageSize.GetHeight())
.Fill()
.RestoreState();
//Add header and footer
pdfCanvas.BeginText()
.SetFontAndSize(C03E03_UFO.helvetica, 9)
.MoveText(pageSize.GetWidth() / 2 - 60, pageSize.GetTop() - 20)
.ShowText("THE TRUTH IS OUT THERE")
.MoveText(60, -pageSize.GetTop() + 30)
.ShowText(pageNumber.ToString())
.EndText();
//Add watermark
iText.Layout.Canvas canvas = new iText.Layout.Canvas(pdfCanvas, pdfDoc, page.GetPageSize());
canvas.SetFontColor(ColorConstants.WHITE);
canvas.SetProperty(Property.FONT_SIZE, UnitValue.CreatePointValue(60));
canvas.SetProperty(Property.FONT, C03E03_UFO.helveticaBold);
canvas.ShowTextAligned(new Paragraph("CONFIDENTIAL"), 298, 421, pdfDoc.GetPageNumber(page), TextAlignment.
CENTER, VerticalAlignment.MIDDLE, 45);
pdfCanvas.Release();
}
internal MyEventHandler(C03E03_UFO _enclosing) {
this._enclosing = _enclosing;
}
private readonly C03E03_UFO _enclosing;
}
}
严格来说,该示例侦听的是
PdfDocumentEvent.END\u PAGE
,而不是PdfDocumentEvent.START\u PAGE
。不过,这种差异不会造成太大的伤害。在无状态编程(即asp.net)中,像C07E01\u EventHandlers这样的东西并不存在。请,你能为页眉而不是一页写一个例子吗。Avipublic virtual void HandleEvent(Event@Event){PdfDocumentEvent docEvent=(PdfDocumentEvent)@Event;docEvent.GetPage().Put(PdfName.Rotate,this.rotation);}如果要添加段落,则此操作无效。请帮忙。
public class C03E03_UFO {
internal static PdfFont helvetica = null;
internal static PdfFont helveticaBold = null;
public static void Main(String[] args) {
helvetica = PdfFontFactory.CreateFont(StandardFonts.HELVETICA);
helveticaBold = PdfFontFactory.CreateFont(StandardFonts.HELVETICA_BOLD);
...
}
protected internal virtual void CreatePdf(String dest) {
//Initialize PDF document
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
pdf.AddEventHandler(PdfDocumentEvent.END_PAGE, new C03E03_UFO.MyEventHandler(this));
...
}
...
protected internal class MyEventHandler : IEventHandler {
public virtual void HandleEvent(Event @event) {
PdfDocumentEvent docEvent = (PdfDocumentEvent)@event;
PdfDocument pdfDoc = docEvent.GetDocument();
PdfPage page = docEvent.GetPage();
int pageNumber = pdfDoc.GetPageNumber(page);
Rectangle pageSize = page.GetPageSize();
PdfCanvas pdfCanvas = new PdfCanvas(page.NewContentStreamBefore(), page.GetResources(), pdfDoc);
//Set background
Color limeColor = new DeviceCmyk(0.208f, 0, 0.584f, 0);
Color blueColor = new DeviceCmyk(0.445f, 0.0546f, 0, 0.0667f);
pdfCanvas.SaveState()
.SetFillColor(pageNumber % 2 == 1 ? limeColor : blueColor)
.Rectangle(pageSize.GetLeft(), pageSize.GetBottom(), pageSize.GetWidth(), pageSize.GetHeight())
.Fill()
.RestoreState();
//Add header and footer
pdfCanvas.BeginText()
.SetFontAndSize(C03E03_UFO.helvetica, 9)
.MoveText(pageSize.GetWidth() / 2 - 60, pageSize.GetTop() - 20)
.ShowText("THE TRUTH IS OUT THERE")
.MoveText(60, -pageSize.GetTop() + 30)
.ShowText(pageNumber.ToString())
.EndText();
//Add watermark
iText.Layout.Canvas canvas = new iText.Layout.Canvas(pdfCanvas, pdfDoc, page.GetPageSize());
canvas.SetFontColor(ColorConstants.WHITE);
canvas.SetProperty(Property.FONT_SIZE, UnitValue.CreatePointValue(60));
canvas.SetProperty(Property.FONT, C03E03_UFO.helveticaBold);
canvas.ShowTextAligned(new Paragraph("CONFIDENTIAL"), 298, 421, pdfDoc.GetPageNumber(page), TextAlignment.
CENTER, VerticalAlignment.MIDDLE, 45);
pdfCanvas.Release();
}
internal MyEventHandler(C03E03_UFO _enclosing) {
this._enclosing = _enclosing;
}
private readonly C03E03_UFO _enclosing;
}
}