如何为.Net构建PDFBox

Sha*_*arb 9 .net c# java lucene visual-studio

我见过从pdf文件中提取文本的示例,这些文件使用ITextSharp或PDFBox.PDFBox似乎是提取文本最"可靠"的方法,但它需要许多额外的步骤.

我尝试使用此处的说明构建dll ,但我不知道如何正确构建.Net所需的文件.

我很丢失,有人可以一步一步提供"在你的.Net应用程序中包含PDFBox"吗?

Sha*_*arb 23

我终于开始工作了.我已经概述了我采用的步骤以获得一个有效的例子.我希望有人觉得这很有帮助.

下载Java JDK
下载IKVM 0.42.0.6
下载PDFBox 1.6.0-src.zip

蚂蚁手册是有益的.

我重命名了Ant和PDFBox文件夹以缩短其名称并将它们移动到我的C:驱动器中

您必须设置环境变量.(Windows 7)右键单击"我的电脑" - >"属性" - >"高级系统设置" - >"环境变量"

我使用了下面的设置,但是根据您安装Java的位置以及放置Ant和PDF Box文件夹的位置,您的设置会有所不同.

Variable    Value
ANT_HOME    C:\apache-ant\
JAVA_HOME   C:\Program Files (x86)\Java\jdk1.7.0_01
Path        ;C:\apache-ant\bin\     (Append semi-colon and path)

完成上述操作后,在命令窗口中键入"ant",如果一切设置正确,您应该得到"build.xml不存在!"消息.

编辑"pdfbox-1.6.0\pdfbox"文件夹中的build.xml文件.找到具有"您的IKVM文件夹路径"替换"."的行.

我将IKVM移到了"C:\ IKVM",所以我看起来像:

打开命令窗口并cd到"C:\ pdfbox-1.6.0\pdfbox"并输入"ant"

......然后奇迹发生了.

现在,pdfbox文件夹中应该存在一堆新文件夹.所需的dll位于bin文件夹中.我不知道为什么,但我得到了一个"-SNAPSHOT"和我所有文件的结尾(pdfbox-1.6.0-SNAPSHOT.dll).

IKVM.GNU.Classpath(也称为IKVM.OpenJDK.Classpath)不再存在,它从0.40版本开始就模块化了.它现在以几个IKVM.OpenJDK dll的形式提供.你只需要其中一些.

在Visual Studio C#中创建一个新项目

将这些文件从pdfBox bin文件夹复制到Visual C#项目bin文件夹的bin文件夹:

pdfbox-1.6.0-SNAPSHOT.dll
fontbox-1.6.0-SNAPSHOT.dll
commons-logging.dll

将这些文件从ikvm bin文件夹复制到Visual C#项目bin文件夹的bin文件夹:

IKVM.OpenJDK.Core.dll
IKVM.OpenJDK.SwingAWT.dll
IKVM.OpenJDK.Text.dll
IKVM.OpenJDK.Util.dll
IKVM.Runtime.dll

将引用添加到上面的IKVM dll并构建项目.

添加对pdfbox dll的引用并再次构建项目.

您现在可以编写一些代码了.下面的简单示例从输入pdf生成了一个很好的文本文件.

using System;
using System.IO;

using org.apache.pdfbox.pdmodel;
using org.apache.pdfbox.util;

namespace testPDF
{
class Program
{
    static void Main()
    {
        PDFtoText pdf = new PDFtoText();

        string pdfText = pdf.parsePDF(@"C:\Sample.pdf");

        using (StreamWriter writer = new StreamWriter(@"C:\Sample.txt"))
        { writer.Write(pdfText); }

    }

    class PDFtoText
    {
        public string parsePDF(string filepath)
        {
            PDDocument document = PDDocument.load(filepath);
            PDFTextStripper stripper = new PDFTextStripper();
            return stripper.getText(document);
        }

    }
}

}
Run Code Online (Sandbox Code Playgroud)