当前位置: 首页 > news >正文

C# 提取 PDF 文档中的文本

C# .Net 使用 IText7 从PDF文件中提取出所有文本内容

【文 / 张赐荣】

首先在 Nuget 包管理器中,安装"itext7" 和 "itext7.font-asian"。
如果不安装 "itext7.font-asian" PDF 文件中有非Unicode编码的字符,将会抛出运行时异常:iText.IO.Exceptions.IOException:找不到 CMap iText.IO.Font.Cmap.UniGB-UTF16-H。安装好了这两个组件之后,使用以下代码,从PDF文件中提取出所有的文本。

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas.Parser;
using iText.Kernel.Pdf.Canvas.Parser.Listener;
using iText.Layout;
using iText.Layout.Element;

namespace ConsoleApplication
{
public static class PDFTextExtractor
{
public static string ExtractText(string pdfFilePath)
{
//创建一个PdfReader对象,用来读取pdf文件
PdfReader pdfReader = new PdfReader(pdfFilePath);
//创建一个PdfDocument对象,用于操作pdf文档
PdfDocument pdfDocument = new PdfDocument(pdfReader);
//创建一个StringBuilder对象,来存储提取的文本
StringBuilder textBuilder = new StringBuilder();
//获取pdf文档的总页数
int pageCount = pdfDocument.GetNumberOfPages();
//遍历每一页
for (int i = 1; i <= pageCount; i++)
{
//获取当前页的PdfPage对象
PdfPage pdfPage = pdfDocument.GetPage(i);
//创建一个ITextExtractionStrategy对象,用于指定提取文本的策略
ITextExtractionStrategy strategy = new LocationTextExtractionStrategy();
//使用PdfTextExtractor类的GetTextFromPage方法,根据指定的策略提取当前页的文本
string pageText = PdfTextExtractor.GetTextFromPage(pdfPage, strategy);
//将提取的文本追加到StringBuilder对象中
textBuilder.Append(pageText);
}
//关闭PdfDocument对象
pdfDocument.Close();
//返回StringBuilder对象中的字符串
return textBuilder.ToString();
}
}
}
 

http://www.lryc.cn/news/58796.html

相关文章:

  • mac如何升级node版本、切换node版本
  • 一位大专学历的女程序员要求月薪25K,学历重要吗?来看看面试过程
  • ESP32驱动1.28寸GC9A01播放视频(一、视频分辨率的调整和视频格式的转换)
  • epoll的LT模式(水平触发)和ET模式(边沿触发)
  • Java基础面试20题
  • Java面向对象封装
  • 队列实现图书信息管理(C语言)
  • Java开发 - 读写分离初体验
  • 图文详解CAN Log文件 - ASC文件格式
  • 网络编程套接字(一)
  • Mysql数据库存储过程
  • 当我开始学习人工智能:人工智能的学派及研究目标
  • Html5钢琴块游戏制作与分享(音游可玩)
  • MySQL数据库——数据库设计概念和数据库设计步骤
  • 【云原生】Kubernetes(k8s)之Pod概念和使用
  • 数组(九)-- LC[316][321][402] 去除重复字母
  • ubuntu下Thrift安装
  • 读懂AUTOSAR :DiagnosticLogAndTrace DLT(四)-- API解析
  • 【LeetCode】剑指 Offer 56. 数组中数字出现的次数 p275 -- Java Version
  • Zookeeper集群 + Fafka集群
  • 全国青少年电子信息智能创新大赛(复赛)python·模拟四卷
  • Redis - 介绍与使用场景
  • Spark SQL实战(07)-Data Sources
  • Django DRF - 权限Permissions
  • 二叉树(OJ)
  • mysql中增删改成的练习
  • 谈一谈Java的ThreadLocal
  • 边缘检测与阈值分割
  • QQ空间无敌装逼,复制下面的任一代码粘贴即可出现意想不到的图案。
  • 必看!总结5种JavaScript异步解决方案