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

