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的启动时间)