You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core中iText PDF的GetNumberOfPages等方法无法调用问题

解决iText7中PdfReader不存在GetNumberOfPages和GetPage方法的CS1061错误

你遇到的问题根源是iText7的API设计和旧版iText5完全不同——你写的代码是iText5的用法,但实际引用的是iText7的包,所以会出现找不到方法的编译错误。

在iText7中,PdfReader只是负责读取PDF的底层组件,页数获取、页面操作这些核心功能都移到了PdfDocument类中。下面是修正后的代码:

using iText.Kernel.Pdf;
using System.IO;
using System.Collections.Generic;

List<byte[]> chunks = new List<byte[]>();

using (MemoryStream pdfStream = new MemoryStream(pdfBytes))
{                
    // 把PdfReader绑定到PdfDocument(读取模式)
    using (PdfReader pdfReader = new PdfReader(pdfStream))
    using (PdfDocument sourceDoc = new PdfDocument(pdfReader))
    {
        int pageCount = sourceDoc.GetNumberOfPages();

        for (int i = 1; i <= pageCount; i++)
        {
            using (MemoryStream chunkStream = new MemoryStream())
            {
                using (PdfWriter pdfWriter = new PdfWriter(chunkStream))
                using (PdfDocument targetDoc = new PdfDocument(pdfWriter))
                {
                    // 从源文档获取页面并复制到目标文档
                    sourceDoc.GetPage(i).CopyTo(targetDoc);
                    // 确保文档写入完成
                    targetDoc.Close();
                }
                chunks.Add(chunkStream.ToArray());
            }
        }
    }
}

关键修改点:

  • 必须将PdfReader关联到PdfDocument实例,所有页面相关操作都通过PdfDocument执行
  • 用sourceDoc.GetNumberOfPages()替代原pdfReader.GetNumberOfPages()
  • 用sourceDoc.GetPage(i)替代原pdfReader.GetPage(i)
  • 复制页面时直接调用CopyTo(targetDoc)即可,无需额外嵌套写法

额外注意事项:

  • 清理项目中旧版的iText包(比如iTextSharp、itext),只保留iText7的核心包(NuGet包名:itext7)
  • 确保代码顶部引入了正确的命名空间:using iText.Kernel.Pdf;

内容的提问来源于stack exchange,提问作者gaurav sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 16:40:08