Я новичок в IText7 и имел перекрывающийся заголовок и посмотрел их образец.Я создал нижний колонтитул, и теперь у меня есть перекрывающийся нижний колонтитул.
class Program
{
static string dest = @"HeaderSample.pdf";
public static void Main(string[] args)
{
CreatePdf(dest);
Console.Read();
}
public static void CreatePdf(String dest)
{
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
Document doc = new Document(pdfDoc, PageSize.LETTER);
TableHeaderEventHandler handler = new TableHeaderEventHandler(doc);
pdfDoc.AddEventHandler(PdfDocumentEvent.START_PAGE, handler);
doc.SetMargins(20 + handler.GetTableHeight(), 36, 36, 36);
TableFooterEventHandler FooterHandler = new TableFooterEventHandler(doc);
pdfDoc.AddEventHandler(PdfDocumentEvent.END_PAGE, FooterHandler);
for (int i = 0; i<150; i++)
{
doc.Add(new Paragraph("Hello World"));
}
doc.Add(new AreaBreak(iText.Layout.Properties.AreaBreakType.NEXT_PAGE));
Table table = new Table(1);
Cell contractor = new Cell().Add(new Paragraph("ANOTHER PARA."));
contractor.SetBorder(iText.Layout.Borders.Border.NO_BORDER);
table.AddCell(contractor);
doc.Add(table);
doc.Add(new AreaBreak(iText.Layout.Properties.AreaBreakType.NEXT_PAGE));
doc.Close();
}
}
public class TableHeaderEventHandler : IEventHandler
{
protected Table table;
protected float tableHeight;
protected Document doc;
public TableHeaderEventHandler(Document doc)
{
this.doc = doc;
table = new Table(1);
table.SetWidth(doc.GetPdfDocument().GetDefaultPageSize().GetRight() - doc.GetPdfDocument().GetDefaultPageSize().GetLeft() - doc.GetLeftMargin() - doc.GetRightMargin());
table.AddCell("Header row 1");
table.AddCell("Header row 2");
table.AddCell("Header row 3");
TableRenderer renderer = (TableRenderer)table.CreateRendererSubTree();
renderer.SetParent(new Document(new PdfDocument(new PdfWriter(new ByteArrayOutputStream()))).GetRenderer());
tableHeight = renderer.Layout(new LayoutContext(new LayoutArea(0, PageSize.LETTER))).GetOccupiedArea().GetBBox().GetHeight();
}
public void HandleEvent(Event eventi)
{
PdfDocumentEvent docEvent = (PdfDocumentEvent) eventi;
PdfDocument pdfDoc = docEvent.GetDocument();
PdfPage page = docEvent.GetPage();
PdfCanvas canvas = new PdfCanvas(page.NewContentStreamBefore(), page.GetResources(), pdfDoc);
Rectangle rect = new Rectangle(pdfDoc.GetDefaultPageSize().GetX() + doc.GetLeftMargin(),
pdfDoc.GetDefaultPageSize().GetTop() - doc.GetTopMargin(), 100, GetTableHeight());
new Canvas(canvas, pdfDoc, rect)
.Add(table);
}
public float GetTableHeight()
{
return tableHeight;
}
}
public class TableFooterEventHandler : IEventHandler
{
protected Table table;
protected float tableHeight;
protected Document doc;
public TableFooterEventHandler(Document doc)
{
this.doc = doc;
table = new Table(1);
table.SetWidth(doc.GetPdfDocument().GetDefaultPageSize().GetRight() - doc.GetPdfDocument().GetDefaultPageSize().GetLeft() - doc.GetLeftMargin() - doc.GetRightMargin());
table.AddCell("Footer row 1");
table.AddCell("Footer row 2");
table.AddCell("Footer row 3");
TableRenderer renderer = (TableRenderer)table.CreateRendererSubTree();
renderer.SetParent(new Document(new PdfDocument(new PdfWriter(new ByteArrayOutputStream()))).GetRenderer());
tableHeight = renderer.Layout(new LayoutContext(new LayoutArea(0, PageSize.LETTER))).GetOccupiedArea().GetBBox().GetHeight();
}
public void HandleEvent(Event eventi)
{
PdfDocumentEvent docEvent = (PdfDocumentEvent)eventi;
PdfDocument pdfDoc = docEvent.GetDocument();
PdfPage page = docEvent.GetPage();
PdfCanvas canvas = new PdfCanvas(page.NewContentStreamBefore(), page.GetResources(), pdfDoc);
Rectangle rect = new Rectangle(pdfDoc.GetDefaultPageSize().GetX() + doc.GetLeftMargin(),
pdfDoc.GetDefaultPageSize().GetBottom() - doc.GetBottomMargin(), 100, GetTableHeight() + 50);
new Canvas(canvas, pdfDoc, rect)
.Add(table);
}
public float GetTableHeight()
{
return tableHeight;
}
}
}
- Есть ли способ управления областью содержимого между верхним и нижним колонтитулом?
![enter image description here](https://i.stack.imgur.com/ULCs8.png)
- Не в приведенном выше примере кода, но мне также нужно передать значения переменных в верхний и нижний колонтитулы и отобразить их динамически.Я попробовал некоторый пример и передал число в заголовок, и если я не удаляю обработчики событий и не добавляю обработчики событий снова, значение перезаписывается.(значение 1 на следующей странице значение 2 перезаписывает 1, и вы видите 1 и 2, отображенные поверх него.)