欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-19 23:36:28
如何解析pdf文件在.net中从pdf文件里提取文本的几种主要方法有: 1、microsoft 的 ifilter 接口 和 adobe 的 ifilter 实现; 2...

如何解析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的启动时间)

上一篇:

下一篇: