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

如何在ASP.NET C#中检测上传PDF文件是否存在指定文本

在ASP.NET C#中正确读取PDF文本并判断是否包含指定内容

直接用StreamReader读取PDF文件会出现乱码,原因是PDF不是纯文本格式——它是包含字体、布局、二进制结构的复合文档,强行按UTF-8文本流解析必然导致乱码。

要正确读取PDF中的文本并判断是否包含指定内容,需要使用专门的PDF处理库,以下是两种常用方案:

方案1:使用iTextSharp(适用于.NET Framework)

  1. 先通过NuGet安装iTextSharp包:
    Install-Package iTextSharp
    
  2. 读取PDF文本并判断的代码示例:
    using iTextSharp.text.pdf;
    using iTextSharp.text.pdf.parser;
    
    // 获取上传文件的字节数组
    byte[] pdfBytes = this.docUploadField.FileBytes;
    string targetText = "需要查找的目标文本";
    bool hasTargetText = false;
    
    using (MemoryStream ms = new MemoryStream(pdfBytes))
    {
        using (PdfReader reader = new PdfReader(ms))
        {
            // 遍历PDF的每一页
            for (int pageNum = 1; pageNum <= reader.NumberOfPages; pageNum++)
            {
                // 提取当前页的文本内容
                string pageContent = PdfTextExtractor.GetTextFromPage(reader, pageNum);
                // 判断是否包含目标文本(可添加StringComparison参数忽略大小写)
                if (pageContent.Contains(targetText, StringComparison.OrdinalIgnoreCase))
                {
                    hasTargetText = true;
                    break; // 找到后直接退出循环,提升效率
                }
            }
        }
    }
    
    // 根据结果执行后续逻辑
    if (hasTargetText)
    {
        // PDF中存在目标文本
    }
    else
    {
        // PDF中不存在目标文本
    }
    

方案2:使用iText7(适用于.NET Core/.NET 5+)

  1. 通过NuGet安装iText7包:
    Install-Package itext7
    
  2. 对应代码示例:
    using iText.Kernel.Pdf;
    using iText.Kernel.Pdf.Canvas.Parser;
    using iText.Kernel.Pdf.Canvas.Parser.Listener;
    
    byte[] pdfBytes = this.docUploadField.FileBytes;
    string targetText = "需要查找的目标文本";
    bool hasTargetText = false;
    
    using (MemoryStream ms = new MemoryStream(pdfBytes))
    {
        using (PdfDocument pdfDoc = new PdfDocument(new PdfReader(ms)))
        {
            for (int pageNum = 1; pageNum <= pdfDoc.GetNumberOfPages(); pageNum++)
            {
                // 创建文本提取策略
                ITextExtractionStrategy extractionStrategy = new SimpleTextExtractionStrategy();
                // 提取当前页文本
                string pageContent = PdfTextExtractor.GetTextFromPage(pdfDoc.GetPage(pageNum), extractionStrategy);
                if (pageContent.Contains(targetText, StringComparison.OrdinalIgnoreCase))
                {
                    hasTargetText = true;
                    break;
                }
            }
        }
    }
    
    // 后续逻辑处理
    

注意事项

  • 如果PDF是扫描生成的图片型PDF,上述方法无法提取文本,需要结合OCR工具(如Tesseract)先识别图片中的文本,再进行判断。
  • 部分PDF的文本可能存在换行、空格或特殊格式,判断时可根据实际情况对提取的文本做预处理(如去除多余空格、换行符)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 07:41:24