C#处理PDF:深度解析从零开始实现读取PDF文档中的文本和图片
创始人
2024-12-27 19:07:24
0次

第1章:准备工作

1.1 环境配置与依赖引入

  • 安装.NET SDK:确保已安装最新版本的.NET SDK,可在Microsoft官网下载安装。

  • 创建项目:使用Visual Studio或CLI工具(如dotnet new console -n PDFReader)创建一个新的C#控制台应用程序。

  • 添加NuGet包:为项目添加PDF处理库的依赖。这里以流行的iTextSharp和ImageSharp库为例:

     Bash 
    dotnet add package iTextSharp --version 5.5.13 dotnet add package SixLabors.ImageSharp --version 2.0.0

第2章:读取PDF文档中的文本

2.1 iTextSharp库简介

iTextSharp是基于iText库的.NET版本,提供了全面的PDF文档操作功能,包括读取、创建、编辑和转换PDF文档。我们将使用iTextSharp来读取PDF中的文本内容。

2.2 读取文本代码示例

 

Csharp

using System; using System.Collections.Generic; using System.IO; using iTextSharp.text.pdf; using iTextSharp.text.pdf.parser;  namespace PDFReader {     class Program     {         static void Main(string[] args)         {             string filePath = @"C:\path\to\your\pdf\file.pdf";             var textExtractor = new PdfTextExtractor(filePath);             string extractedText = textExtractor.ExtractText();             Console.WriteLine(extractedText);         }     }      ///      /// Helper class for extracting text from a PDF file.     ///      public class PdfTextExtractor     {         private readonly string _filePath;          public PdfTextExtractor(string filePath)         {             _filePath = filePath ?? throw new ArgumentNullException(nameof(filePath));         }          public string ExtractText()         {             using (var reader = new PdfReader(_filePath))             {                 var sb = new StringBuilder();                  for (int i = 1; i <= reader.NumberOfPages; i++)                 {                     var strategy = new SimpleTextExtractionStrategy();                     sb.Append(PdfTextExtractor.ExtractTextFromPage(reader, i, strategy));                 }                  return sb.ToString();             }         }          private static string ExtractTextFromPage(PdfReader reader, int pageNumber, ITextExtractionStrategy strategy)         {             var currentText = iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(reader, pageNumber, strategy);             return currentText.Trim();         }     } }

第3章:读取PDF文档中的图片

3.1 ImageSharp库简介

ImageSharp是一个跨平台的.NET图像处理库,支持多种图像格式的读写和操作。我们将使用ImageSharp来读取PDF文档中的图片。

3.2 读取图片代码示例

 

Csharp

using System; using System.Collections.Generic; using System.Drawing.Imaging; using System.IO; using iTextSharp.text.pdf; using SixLabors.ImageSharp; using SixLabors.ImageSharp.Formats.Png; using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing;  namespace PDFReader {     class Program     {         static void Main(string[] args)         {             string filePath = @"C:\path\to\your\pdf\file.pdf";             var imageExtractor = new PdfImageExtractor(filePath);             List> images = imageExtractor.ExtractImages();             foreach (var image in images)             {                 image.SaveAsPng($"output_{Guid.NewGuid()}.png");             }         }     }      ///      /// Helper class for extracting images from a PDF file.     ///      public class PdfImageExtractor     {         private readonly string _filePath;          public PdfImageExtractor(string filePath)         {             _filePath = filePath ?? throw new ArgumentNullException(nameof(filePath));         }          public List> ExtractImages()         {             var images = new List>();              using (var reader = new PdfReader(_filePath))             {                 for (int i = 1; i <= reader.NumberOfPages; i++)                 {                     images.AddRange(ExtractImagesFromPage(reader, i));                 }             }              return images;         }          private IEnumerable> ExtractImagesFromPage(PdfReader reader, int pageNumber)         {             var resources = reader.GetPageResources(pageNumber);             var xObjects = resources.GetResourceDictionary(PdfName.XObject);              foreach (var entry in xObjects.EntrySet())             {                 PdfObject obj = xObjects.GetDirectObject(entry.Key);                 if (obj.IsIndirect())                 {                     PdfDictionary xObjDict = (PdfDictionary)obj;                     PdfName subtype = xObjDict.GetAsName(PdfName.Subtype);                      if (PdfName.Image.Equals(subtype))                     {                         byte[] imageData = PdfReader.GetStreamBytesRaw((PRStream)xObjDict);                         using var ms = new MemoryStream(imageData);                         var image = Image.Load(ms);                         yield return image;                     }                 }             }         }     } }

第4章:性能优化与最佳实践

  • 批量读取与处理:对于大文件或包含大量图片的PDF,考虑分批次读取和处理,避免一次性加载所有数据导致内存溢出。
  • 异步处理:利用C#的异步编程模型(async/await),将I/O密集型操作异步化,提高程序响应速度。
  • 错误处理与重试机制:对可能出现的文件读取错误、PDF解析异常等进行捕获和适当处理,必要时实现重试机制以增强程序健壮性。

至此,我们已经完成了从零开始使用C#处理PDF文档,深度解析了如何使用iTextSharp和ImageSharp库实现读取PDF中的文本和图片的全流程。提供的代码示例和详细注释旨在帮助您快速理解和应用这些技术,为您的项目提供有效的PDF处理能力。

相关内容

热门资讯

玩家必备科普透视挂!祺友互娱透... 玩家必备科普透视挂!祺友互娱透视挂多功能AIapp,祺友互娱都是有透视挂app1、下载好祺友互娱透视...
2024教程外挂!闲逸斗地主外... 2024教程外挂!闲逸斗地主外挂多功能AI方法,闲逸斗地主本来是有外挂方法1、让任何用户在无需闲逸斗...
玩家必看科普外挂!久久互娱外挂... 玩家必看科普外挂!久久互娱外挂多功能AI插件,久久互娱一直是有外挂插件1、久久互娱免费辅助多个强度级...
重大推荐开挂!新老夫子开挂多功... 重大推荐开挂!新老夫子开挂多功能AI技巧,新老夫子好像有开挂技巧1、让任何用户在无需新老夫子安装教程...
分享认知透视挂!君悦来透视挂多... 分享认知透视挂!君悦来透视挂多功能AI工具,君悦来确实真的是有透视挂工具1、起透看视 君悦来辅助软件...
专业讨论外挂!微乐广西麻将外挂... 专业讨论外挂!微乐广西麻将外挂多功能AI软件,微乐广西麻将其实存在有外挂软件亲,关键说明,微乐广西麻...
盘点一款作弊器!玄龙大厅作弊器... 盘点一款作弊器!玄龙大厅作弊器多功能AI工具,玄龙大厅竟然真的有作弊器工具1、实时玄龙大厅透视辅助更...
每日必看辅助!MG棋牌辅助多功... 每日必看辅助!MG棋牌辅助多功能AI教程,MG棋牌切实真的有辅助教程1、进入到MG棋牌是否有挂之后,...
玩家必备科普开挂!南京麻将开挂... 玩家必备科普开挂!南京麻将开挂多功能AI软件,南京麻将确实存在有开挂软件1、该软件可以轻松地帮助玩家...
专业讨论外挂!欢乐茶馆外挂多功... 专业讨论外挂!欢乐茶馆外挂多功能AIapp,欢乐茶馆真是是真的有外挂app欢乐茶馆破解侠是真的助透视...