Извлечение текста из файла PDF - PullRequest
1 голос
/ 15 ноября 2009

Я использую PDFBox для проекта C # .NET. и я получаю «TypeInitializationException» (инициализатор типа для «java.lang.Throwable» вызвал исключение.) при выполнении следующего блока кода:

  FileStream stream = new FileStream(@"C:\1.pdf",FileMode.Open);

  //retrieve the pdf bytes from the stream.
  byte[] pdfbytes=new byte[65000];

  stream.Read(pdfbytes, 0, 65000);

 //get the pdf file bytes.
 allbytes = pdfbytes;

 //create a stream from the file bytes.
 java.io.InputStream ins = new java.io.ByteArrayInputStream(allbytes);
 string txt;

 //load the doc
 PDDocument doc = PDDocument.load(ins);
 PDFTextStripper stripper = new PDFTextStripper();

 //retrieve the pdf doc's text
 txt = stripper.getText(doc);
 doc.close();

исключение возникает при 3-м операторе:

PDDocument doc = PDDocument.load(ins);

Что я могу сделать, чтобы решить эту проблему?

Это трассировка стека:

           at java.lang.Throwable.__<map>(Exception , Boolean )
   at org.pdfbox.pdfparser.PDFParser.parse()
   at org.pdfbox.pdmodel.PDDocument.load(InputStream input, RandomAccess scratchFile)
   at org.pdfbox.pdmodel.PDDocument.load(InputStream input)
   at At.At.ExtractTextFromPDF(InputStream fileStream) in
 C:\Users\Administrator\Documents\Visual Studio 2008\Projects\AtProject\Att\At.cs:line 61

Внутреннее исключение InnerException:

  • InnerException {"Не удалось загрузить файл или сборку" IKVM.Runtime, Версия = 0.30.0.0, Культура = нейтральная, PublicKeyToken = 13235d27fcbfff58 'или одна из ее зависимостей. Система не может найти указанный файл. ":" IKVM. Время выполнения, версия = 0.30.0.0, культура = нейтральная, PublicKeyToken = 13235d27fcbfff58 "} System.Exception {System.IO.FileNotFoundException}

ОК, я решил предыдущую проблему, скопировав некоторые DLL-файлы PDFBox в папку bin. но теперь я получаю эту ошибку: ожидается = '/' actual = '.'-- 1 org.pdfbox.io.PushBackInputStream@283d742

Есть ли альтернативы использованию PDFBox? Есть ли какая-либо другая надежная библиотека, которую я могу использовать для извлечения текста из файлов PDF.

Ответы [ 2 ]

2 голосов
/ 16 ноября 2009

Похоже, вам не хватает библиотеки для PDFBox. Вам нужно:

  • IKVM.GNU.Classpath.dll
  • PDFBox-X.X.X.dll
  • FontBox-X.X.X-dev.dll
  • IKVM.Runtime.dll

Прочитать эту тему Чтение из файла PDF с использованием C # . Вы можете найти обсуждение аналогичной проблемы в комментариях к этой теме.

1 голос
/ 31 января 2012

Я обнаружил, что версии файлов DLL были виновниками. Перейдите на http://www.netlikon.de/docs/PDFBox-0.7.2/bin/?C=M;O=A и загрузите следующие файлы:

  • IKVM.Runtime.dll
  • IKVM.GNU.Classpath.dll
  • PDFBox-0.7.2.dll

Затем скопируйте их в корень вашего проекта Visual Studio. Щелкните правой кнопкой мыши проект и добавьте ссылку, найдите все 3 и добавьте их.

Наконец, вот код, который я использовал для разбора PDF в текст

C #

private static string TransformPdfToText(string SourceFile)
{
string content = "";
PDDocument doc = new PDDocument();
PDFTextStripper stripper = new PDFTextStripper();
doc.close();
doc = PDDocument.load(SourceFile);

try
{
content = stripper.getText(doc);
doc.close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
doc.close();
}
return content;
}

Visual Basic

Private Function parseUsingPDFBox(ByVal filename As String) As String
    LogFile(" Attempting to parse file: " & filename)
    Dim doc As PDDocument = New PDDocument()
    Dim stripper As PDFTextStripper = New PDFTextStripper()
    doc.close()
    doc = PDDocument.load(filename)

    Dim content As String = "empty"
    Try
        content = stripper.getText(doc)
        doc.close()
    Catch ex As Exception
         LogFile(" Error parsing file: " & filename & vbcrlf & ex.Message)
    Finally
        doc.close()
    End Try
    Return content
End Function
...