C# pdf压模,尝试使用itext在pdf文档上添加页码时pdfEventHandler不工作

C# pdf压模,尝试使用itext在pdf文档上添加页码时pdfEventHandler不工作,c#,asp.net-mvc-5,itext,C#,Asp.net Mvc 5,Itext,我正在使用itext生成pdf文档,但我正在尝试使用现有的解决方案将页码添加到正在生成的pdf文档中,但它们似乎都不适合我 我试过用类似的东西 using (MemoryStream stream = new MemoryStream()) { PdfReader reader = new PdfReader(bytes); using (PdfStamper stamper = new PdfStamper(reader, stream)) { in

我正在使用itext生成pdf文档,但我正在尝试使用现有的解决方案将页码添加到正在生成的pdf文档中,但它们似乎都不适合我

我试过用类似的东西

 using (MemoryStream stream = new MemoryStream())
 {
    PdfReader reader = new PdfReader(bytes);
    using (PdfStamper stamper = new PdfStamper(reader, stream))
    {
        int pages = reader.NumberOfPages;
        for (int i = 1; i <= pages; i++)
.NumberOfPages和.GetPageSize上有错误

我还尝试创建一个单独的PageEventHandler类,但问题仍然存在

现在,我可以生成pdf,但我想添加页码,我有一个类似

 private MemoryStream MakeDocument(Application application)
    {
    MemoryStream ms = new MemoryStream();
    PdfWriter writer = new PdfWriter(ms);
    PdfDocument pdfDocument = new PdfDocument(writer);

        using (var document = new Document(pdfDocument))
        {
            var sections = new List<IDocumentSection>
            {
                new Header(),  
                new Projects(application.Projects),                
                //Footer
            };

            foreach (var section in sections)
                section.AddTo(document);

        Rectangle pageSize;
        PdfCanvas canvas;
        int n = pdfDocument.GetNumberOfPages();
        for (int i = 1; i <= n; i++)
        {
            PdfPage page = pdfDocument.GetPage(i);
            pageSize = page.GetPageSize();
            canvas = new PdfCanvas(page);
            canvas.BeginText()                    
       .SetFontAndSize(PdfFontFactory.CreateFont(FontConstants.HELVETICA), 7)
                .MoveText(pageSize.GetWidth() / 2 - 7, 10)
                .ShowText(i.ToString())
                .ShowText(" of ")
                .ShowText(n.ToString())
                .EndText();
        }
   }
   return ms;
但它在抱怨GetPageSize
对象引用未设置为对象的实例。即使我将页面大小设置为A4,它也会在canvas=new PdfCanvas(page)时开始抱怨

您似乎正在使用iText 7。或者更确切地说,当我看到:

PdfWriter writer = new PdfWriter(ms);
PdfDocument pdfDocument = new PdfDocument(writer);
Document document = new Document(pdfDocument);
PdfStamper
类是一个iText 5类。它不存在于iText 7中。请参阅。你可能想要这样的东西:

MemoryStream stream = new MemoryStream();
PdfWriter writer = new PdfWriter(stream);
PdfReader reader = new PdfReader(bytes);
PdfDocument pdfDoc = new PdfDocument(reader, writer);
Document document = new Document(pdfDoc);
Rectangle pageSize;
PdfCanvas canvas;
int n = pdfDoc.GetNumberOfPages();
for (int i = 1; i <= n; i++) {
    PdfPage page = pdfDoc.GetPage(i);
    pageSize = page.GetPageSize();
    canvas = new PdfCanvas(page);
    // draw page numbers on the canvas
}
pdfDoc.close();
MemoryStream stream=newmemoryStream();
PdfWriter writer=新的PdfWriter(流);
PdfReader reader=新PdfReader(字节);
PdfDocument pdfDoc=新PdfDocument(读写器);
文件=新文件(pdfDoc);
矩形页面大小;
PdfCanvas帆布;
int n=pdfDoc.GetNumberOfPages();

对于(int i=1;我是的,你是对的,我正在使用itext7。我在添加页码方面仍然有一些困难。你读过跳转开始教程吗?添加页眉、添加页脚、添加水印……这些都在教程中解释。你能详细说明你不明白的地方吗?我已经修改了我的问题,如果你能提出更多建议的话。是的,我确实读过,但问题是他们使用了两个单独的文件。这不是问题。但我想在文档中添加更多的节。因此我无法使用固定文档,它基本上是在pageSize=page.GetPageSize();当它抱怨时会发出什么声音?我不知道你是否意识到这一点,但你不是很有帮助。这就好像你不想得到帮助一样。检查。那里有一个方法
GetPageSize()
,那么你抱怨什么呢?你确定你使用的是正确的
矩形类吗?
PdfWriter writer = new PdfWriter(ms);
PdfDocument pdfDocument = new PdfDocument(writer);
Document document = new Document(pdfDocument);
MemoryStream stream = new MemoryStream();
PdfWriter writer = new PdfWriter(stream);
PdfReader reader = new PdfReader(bytes);
PdfDocument pdfDoc = new PdfDocument(reader, writer);
Document document = new Document(pdfDoc);
Rectangle pageSize;
PdfCanvas canvas;
int n = pdfDoc.GetNumberOfPages();
for (int i = 1; i <= n; i++) {
    PdfPage page = pdfDoc.GetPage(i);
    pageSize = page.GetPageSize();
    canvas = new PdfCanvas(page);
    // draw page numbers on the canvas
}
pdfDoc.close();