Я пытаюсь прочитать внешний вид аннотации PDF с помощью iTextSharp и получить текст содержимого из потока.
Я использую следующий код:
public String ExtractAnnotationText(PdfStream xObject)
{
PdfDictionary resources = xObject.GetAsDict(PdfName.RESOURCES);
ITextExtractionStrategy strategy = new LocationTextExtractionStrategy();
PdfContentStreamProcessor processor = new PdfContentStreamProcessor(strategy);
byte[] contentByteArray = ContentByteUtils.GetContentBytesFromContentObject(xObject);
processor.ProcessContent(contentByteArray, resources);
return strategy.GetResultantText();
}
xObject
извлекается из словаря внешнего вида и передается следующим образом:
PRStream value = (PRStream)appearancesDictionary.GetAsStream(key);
String text = ExtractAnnotationText(value);
Это обычно хорошо работает для получения текста внешнего вида из аннотаций, но я нашел пример FreeTextCallout, где xObject
не имеет ключа /Resources
, как показано его hashMap:
[/Type, /XObject]
[/Subtype, /Form]
[/FormType, 1]
[/Length, 71]
[/Matrix, [1, 0, 0, 1, -28.7103, -643.893]]
[/BBox, [28.7103, 643.893, 597.85, 751.068]]
[/Filter, /FlateDecode]
В этом случае есть ли другой способ создать словарь Resources
для перехода к PdfContentStreamProcessor.ProcessContent()
? Или даже другой способ получить текст без использования ProcessContent()
?