#c# #asp.net #itext7
#c# #asp.net #itext7
Вопрос:
Я не могу добавить номера страниц в header
свой PDF-документ, используя iText7
и C#
. …
это учебное пособие https://kb.itextpdf.com/home/it7kb/examples/page-numbers-and-pdf-a
ошибка возникает в этих строках, когда я добавляю в свой код эту часть после закрытия документа
int n = pdfDoc.GetNumberOfPages();
for (int i = 1; i <= n; i )
{
doc.ShowTextAligned(new Paragraph(String
.Format("page " i " of " n))
.SetFontSize(8)
.SetMarginLeft(20),
559, 806, i, TextAlignment.RIGHT,
VerticalAlignment.MIDDLE, 0);
}
Я не знаю почему, но это происходит, когда я вставляю новую страницу в PDF-документ
document.Add(new AreaBreak());
Как решить эту проблему?
Мой код выглядит следующим образом.
private class TableHeaderEventHandler : IEventHandler
{
private Table table;
private float tableHeight;
private Document doc;
public TableHeaderEventHandler(Document doc)
{
this.doc = doc;
InitTable();
TableRenderer renderer = (TableRenderer)table.CreateRendererSubTree();
renderer.SetParent(new DocumentRenderer(doc));
LayoutResult result = renderer.Layout(new LayoutContext(new LayoutArea(0, PageSize.A4)));
tableHeight = result.GetOccupiedArea().GetBBox().GetHeight();
}
public void HandleEvent(Event currentEvent)
{
PdfDocumentEvent docEvent = (PdfDocumentEvent)currentEvent;
PdfDocument pdfDoc = docEvent.GetDocument();
PdfPage page = docEvent.GetPage();
int pageNum = docEvent.GetDocument().GetPageNumber(page);
PdfCanvas canvas = new PdfCanvas(page.NewContentStreamBefore(), page.GetResources(), pdfDoc);
PageSize pageSize = pdfDoc.GetDefaultPageSize();
float coordX = pageSize.GetX() doc.GetLeftMargin();
float coordY = pageSize.GetTop() - doc.GetTopMargin();
float width = pageSize.GetWidth() - doc.GetRightMargin() - doc.GetLeftMargin();
float height = GetTableHeight();
Rectangle rect = new Rectangle(coordX, coordY, width, height);
new Canvas(canvas, rect)
.Add(table)
.Close();
int n = pdfDoc.GetNumberOfPages();
for (int i = 1; i <= n; i )
{
doc.ShowTextAligned(new Paragraph(String
.Format("page " i " of " n))
.SetFontSize(8)
.SetMarginLeft(20),
559, 806, i, TextAlignment.RIGHT,
VerticalAlignment.MIDDLE, 0);
}
}
public float GetTableHeight()
{
return tableHeight;
}
private void InitTable()
{
Paragraph newline = new Paragraph(new Text("n"));
table = new Table(1).UseAllAvailableWidth();
Image img = new Image(ImageDataFactory
.Create(@"C:\Users\admin\source\repos\newpdf2\newpdf2\img\logo.png"))
.SetTextAlignment(TextAlignment.CENTER);
img.ScaleToFit(150, 150);
table.AddCell(img).SetBorder(Border.NO_BORDER);
}
}
Комментарии:
1. Что именно происходит? Вы говорите, что возникает ошибка. Какая ошибка? С помощью какой трассировки стека? И как вы регистрируете свой
TableHeaderEventHandler
?2. @mkl спасибо за ответ, решаемый с помощью iText KB