我正在尝试阅读pdf并获取其中的文字。使用Nugget iTextSharp -LGPL v4.1.5。 (我不允许使用ITextsharp v5.5.13,这会让生活变得困难)
Observable<List<BaseClass>> b = Observable.just(Collections.emptyList());
Observable<List<SubClass>> s = Observable.just(Collections.emptyList());
observableListMethod(b);
observableListMethod(s);
获取例外
System.InvalidCastException:无法转换类型为&#39; iTextSharp.text.pdf.PdfArray&#39;的对象输入&#39; iTextSharp.text.pdf.PRIndirectReference&#39;。
请建议如何处理PdfArray对象(内容中的多个流)
答案 0 :(得分:0)
我不太熟悉c#,但java代码应该很容易转移到c# 我会这样做:
private byte[] getTextFromPage(PdfReader pdfReader, int page){
PdfDictionary cpage = pdfReader.GetPageN(page);
PdfObject content = cpage.get(PdfName.CONTENTS);
return getContent(content);
}
private byte[] getContent(PdfObject content) throws IOException {
byte[] result=null;
switch (content.type()){
case PdfObject.INDIRECT:
PRIndirectReference ref = (PRIndirectReference) content;
PdfObject directObject = PdfReader.getPdfObject(ref);
result = getContent(directObject);
break;
case PdfObject.ARRAY:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfArray cArray = (PdfArray) content;
for(Object object : cArray.getArrayList()) {
baos.write(getContent((PdfObject) object));
}
result = baos.toByteArray();
break;
case PdfObject.STREAM:
PRStream stream = (PRStream) PdfReader.getPdfObject(content);
result = PdfReader.getStreamBytes(stream);
break;
default:
throw new IllegalStateException("Unsupported content type");
}
return result;
}
但这只是检索文本的一小步。你需要整个操作员处理,引导,间距,缩放,字体处理等。所以从头开始写它是一项重大任务......