热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

c#实现将pdf转文本的示例分享

这篇文章主要介绍了c#实现将pdf转文本的示例,需要的朋友可以参考下

如何解析PDF文件

在.NET中从PDF文件里提取文本的几种主要方法有:

1、Microsoft 的 IFilter 接口 和 Adobe 的 IFilter 实现;

2、iTextSharp;

3、PDFBox。

不幸的是这些 PDF 解析方案都不完美。我们将在下面讨论这些方法。

Adobe PDF IFilter

为了使用 IFilter 接口来解析 PDF 文件,你需要:

Windows 2000 或者后续版本

Adobe Acrobat 或 Reader 7.0.5+ (或单独的 Adobe PDF IFilter [adobe.com])

IFilter COM 封装类 [dotlucene.net]

样例代码:

代码如下:

using IFilter;
public static string ExtractTextFromPdf(string path) {
  return DefaultParser.Extract(path);
}

缺点:

使用了不可靠的 COM 互操作来处理 IFilter 接口 (并且组合 IFilter COM、 Adobe PDF IFilter 特别麻烦)。

需要在目标系统上单独安装 Adobe IFilter。如果你需要对其它人发布可索引的解决方案,会很痛苦。

iTextSharp
iTextSharp(http://sourceforge.net/projects/itextsharp/) 是一个 Java 的PDF 操作库iText(http://itextpdf.com/) 的.NET输出。它主要着眼于编辑PDF而不是阅读,但它当然也支持从PDF中提取文本(尽管有点大材小用)。

例程:

代码如下:

using iTextSharp.text.pdf;
using iTextSharp.text.pdf.parser; 
public static string ExtractTextFromPdf(string path)
{
  using (PdfReader reader = new PdfReader(path))
  {
    StringBuilder text = new StringBuilder();

    for (int i = 1; i <= reader.NumberOfPages; i++)
    {
        text.Append(PdfTextExtractor.GetTextFromPage(reader, i));
    }

    return text.ToString();
  }
}

信用证: 成员号 10364982

缺点:

需要许可证(如果你不喜欢 AGPL许可证 的话)

PDFBox

PDFBox是另一个Java PDF类库。它同时也可以与原来的Java Lucene一同使用(参见LucenePDFDocument)。

幸运的是,PDFBox有一个使用IKVM.NET开发的.NET版本 (只需访问PDFBox下载页)。

在.NET中使用PDFBox需要引用:

IKVM.OpenJDK.Core.dll

IKVM.OpenJDK.SwingAWT.dll

pdfbox-1.8.4.dll

并将下列文件复制到bin文件夹下:

commons-logging.dll

fontbox-1.8.4.dll

IKVM.OpenJDK.Util.dll

IKVM.Runtime.dll

使用PDFBox解析PDF十分简单:

代码如下:

using org.apache.pdfbox.pdmodel;
using org.apache.pdfbox.util; 
private static string ExtractTextFromPdf(string path)
{
  PDDocument doc = null;
  try {
    doc = PDDocument.load(path)
    PDFTextStripper stripper = new PDFTextStripper();
    return stripper.getText(doc);
  }
  finally {
    if (doc != null) {
      doc.close();
    }
  }
}

编译后的大小加起来差不多有18MB:

IKVM.OpenJDK.Core.dll (4 MB)

IKVM.OpenJDK.SwingAWT.dll (6 MB)

pdfbox-1.8.4.dll (4 MB)

commons-logging.dll (82 kB)

fontbox-1.8.4.dll (180 kB)

IKVM.OpenJDK.Util.dll (2 MB)

IKVM.Runtime.dll (1 MB)

速度还可以:解析U.S. Copyright Act PDF (5.1 MB)文件用了13秒。

感谢bobrien100提供的改进建议。

缺点:

IKVM.NET依赖 (18 MB)

速度(尤其是IKVM.NET的启动时间)


推荐阅读
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.xmlbeans.SchemaType 类的 getBaseEnumType() 方法,提供了多个代码示例,并解释了其在不同场景下的使用方法。 ... [详细]
  • 本文介绍如何在Java项目中使用Log4j库进行日志记录。我们将详细说明Log4j库的引入、配置及简单应用,帮助开发者快速上手。 ... [详细]
  • 本文详细介绍了如何在ECharts中使用线性渐变色,通过echarts.graphic.LinearGradient方法实现。文章不仅提供了完整的代码示例,还解释了各个参数的具体含义及其应用场景。 ... [详细]
  • 本文详细介绍了如何解决MyBatis中常见的BindingException错误,提供了多种排查和修复方法,确保Mapper接口与XML文件的正确配置。 ... [详细]
  • 本文详细介绍了Linux系统中init进程的作用及其启动过程,解释了运行级别的概念,并提供了调整服务启动顺序的具体步骤和实例。通过了解这些内容,用户可以更好地管理系统的启动流程和服务配置。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 探讨了小型企业在构建安全网络和软件时所面临的挑战和机遇。本文介绍了如何通过合理的方法和工具,确保小型企业能够有效提升其软件的安全性,从而保护客户数据并增强市场竞争力。 ... [详细]
author-avatar
书友55218170
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有