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

ASP.NET WebForms如何提取多格式文件文本并显示在TextBox中

多格式文件纯文本提取方案(ASP.NET WebForms)

问题核心

StreamReader仅适用于纯文本类文件(如txt),doc、pdf属于二进制结构化文件,直接按文本编码读取必然乱码,必须针对不同格式使用专门的解析库提取文本。

1. TXT文件:自动识别编码解决乱码

txt文件乱码多因编码不匹配,可通过StreamReader的自动编码检测功能处理:

protected string ReadTxtFile(Stream stream)
{
    using (var reader = new StreamReader(stream, true)) // 第二个参数设为true,自动检测文件BOM识别编码
    {
        return reader.ReadToEnd();
    }
}

2. DOC/DOCX文件:用专门的文档解析库

方案一:OpenXML SDK(仅支持DOCX,原生免费)

先安装NuGet包DocumentFormat.OpenXml,再编写解析代码:

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;

protected string ReadDocxFile(Stream stream)
{
    StringBuilder text = new StringBuilder();
    using (WordprocessingDocument doc = WordprocessingDocument.Open(stream, false))
    {
        Body body = doc.MainDocumentPart.Document.Body;
        foreach (Paragraph para in body.Descendants<Paragraph>())
        {
            text.AppendLine(para.InnerText);
        }
    }
    return text.ToString();
}

方案二:NPOI(支持DOC和DOCX)

安装NuGet包NPOI、NPOI.OOXML,兼容新旧Word格式:

using NPOI.HWPF.UserModel;
using NPOI.XWPF.UserModel;

protected string ReadDocOrDocxFile(Stream stream, string fileExtension)
{
    StringBuilder text = new StringBuilder();
    if (fileExtension.Equals(".docx", StringComparison.OrdinalIgnoreCase))
    {
        using (XWPFDocument doc = new XWPFDocument(stream))
        {
            foreach (var para in doc.Paragraphs)
            {
                text.AppendLine(para.Text);
            }
        }
    }
    else if (fileExtension.Equals(".doc", StringComparison.OrdinalIgnoreCase))
    {
        using (HWPFDocument doc = new HWPFDocument(stream))
        {
            text.Append(doc.Text);
        }
    }
    return text.ToString();
}

3. PDF文件:用PDF文本提取库

安装NuGet包iTextSharp,提取PDF中的纯文本:

using iTextSharp.text.pdf;
using iTextSharp.text.pdf.parser;

protected string ReadPdfFile(Stream stream)
{
    StringBuilder text = new StringBuilder();
    using (PdfReader reader = new PdfReader(stream))
    {
        for (int pageNum = 1; pageNum <= reader.NumberOfPages; pageNum++)
        {
            text.AppendLine(PdfTextExtractor.GetTextFromPage(reader, pageNum));
        }
    }
    return text.ToString();
}

4. 整合所有格式的上传处理逻辑

修改点击事件,根据文件扩展名分发处理:

protected void UploadText_Click(object sender, EventArgs e)
{
    if (!FileUpload1.HasFile) return;

    string fileExtension = Path.GetExtension(FileUpload1.FileName);
    string extractedText = string.Empty;

    using (Stream fileStream = FileUpload1.FileContent)
    {
        switch (fileExtension.ToLower())
        {
            case ".txt":
                extractedText = ReadTxtFile(fileStream);
                break;
            case ".doc":
            case ".docx":
                extractedText = ReadDocOrDocxFile(fileStream, fileExtension);
                break;
            case ".pdf":
                extractedText = ReadPdfFile(fileStream);
                break;
            default:
                extractedText = "不支持的文件格式";
                break;
        }
    }

    TextBox1.Text = extractedText;
}

注意事项

  • 确保安装的NuGet包版本适配你的.NET Framework版本(WebForms通常基于.NET Framework)。
  • 大文件处理时建议添加异步逻辑,避免阻塞请求。
  • 若PDF是扫描件(图片转PDF),无法直接提取文本,需额外集成OCR工具(如Tesseract)处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:37:16