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
相关产品推荐
相关产品推荐

