J'essaie de lire le flux d'apparence d'une annotation PDF, en utilisant iTextSharp, et obtenir le texte du contenu du flux.Comment extraire le contenu du flux d'apparence lorsque les ressources ne sont pas dans le dictionnaire?
J'utilise le code suivant:
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
est extrait du dictionnaire de l'apparence et passé dans comme ceci:
PRStream value = (PRStream)appearancesDictionary.GetAsStream(key);
String text = ExtractAnnotationText(value);
Cela fonctionne généralement bien pour obtenir le texte d'apparence d'annotations , mais j'ai trouvé un exemple de FreeTextCallout où xObject
n'a pas une clé /Resources
, comme indiqué par son 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]
Dans ce cas, existe-t-il un autre moyen de construire un dictionnaire Resources
pour le passer à PdfContentStreamProcessor.ProcessContent()
? Ou même une manière différente d'obtenir le texte sans utiliser ProcessContent()
?
Probablement un fichier cassé; Le but de mon projet est de prendre les fichiers PDF qui ont été mal construits par Foxit et de les modifier pour qu'ils fonctionnent correctement lorsqu'ils sont rendus dans Adobe Reader. Dans ce cas, je devrai peut-être écrire un analyseur de texte d'apparence alternative. – sigil
* "incorrectement construit par Foxit" * - De quelle façon Foxit construit-il incorrectement pdfs? (Je ne l'ai pas encore utilisé sérieusement ... – mkl
S'il est confirmé que Foxit crée incorrectement des fichiers PDF, il peut être utile de leur envoyer un rapport de bogue. –