我正在将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的内部异常:
好的,我通过将PDFBox的一些.dll文件复制到我的bin文件夹解决了上一个问题。但现在我收到了这个错误:expected ='/'actual ='.'-- 1 org.pdfbox.io.PushBackInputStream@283d742
使用PDFBox还有其他选择吗?有什么其他可靠的库我可以用来从pdf文件中提取文本。
答案 0 :(得分:2)
看起来你错过了一些PDFBox库。你需要:
阅读此主题Read from a PDF file using C#。您可以在本主题的评论中找到类似问题的讨论。
答案 1 :(得分:1)
我发现DLL文件的版本是罪魁祸首。 转到http://www.netlikon.de/docs/PDFBox-0.7.2/bin/?C=M;O=A并下载以下文件:
然后将它们复制到Visual Studio项目的根目录中。右键单击项目并添加引用,找到所有3并添加它们。
最后,这是我用来将PDF解析为Text
的代码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
答案 2 :(得分:-1)
有类似的问题,但不是 C++,而是 VisualBasic/VisualStudio;缺少的 dll 是“commons-logging.dll”;将此 dll 添加到 bin 目录后,一切正常,找到