如果内联图像解析器恰好遇到图像数据的第一个字节是空白字符的内嵌图像,则看起来内联图像解析器可能“丢失它的位置”。代码将与任何其他第一个字节值一起正常工作。我在文本解析过程中遇到了这个问题。
在开发分支(4e7d3be18f70cc7516d62266ba1508b53219f227)并在InlineImageUtils.cs中发布5.5.11时,ParseInlineImageSamples调用ParseInlineImageDictionary。 ParseInlineImageDictionary使用'ID'标记后面的空格。缺少空格将导致抛出IOException(在内嵌图像中ID之后找到“意外字符”+ + ch +“)。
但是,在ParseUnfilteredSamples中执行的后续代码正在尝试再次处理空白。事实上,评论表明代码打算处理他'ID'标签和图像数据之间的空白格式错误。如上所述,我相信如果出现这种格式错误的内嵌图像,就会抛出异常。无论解析器此时指向图像数据的第一个字符。
如果幸运的话,图像数据的第一个字节是0或非空白,那么该功能将恰好正常执行。如果图像数据的第一个字节是空白,那么图像数据的第一个字节就会丢失,你读取'EI'标签后的1个字节,只找到'I'然后抛出异常InlineImageParseException(“结束后未找到EI)图像数据“)。
到目前为止对我有用的修复方法是删除
int shouldBeWhiteSpace = tokeniser.Read(); // skip next character (which better be a whitespace character - I suppose we could check for this)
并删除
if (!PRTokeniser.IsWhitespace(shouldBeWhiteSpace) || shouldBeWhiteSpace == 0){ // tokeniser treats 0 as whitespace, but for our purposes, we shouldn't)
bytes[0] = (byte)shouldBeWhiteSpace;
startIndex++;
}
我在解析带有十进制12(换页)的pdf作为内嵌图像数据的第一个字符时遇到了问题。
可能会解释itext-gettextfrompage-exception-with-inline-image
请注意,在使用SimpleTextExtractionStrategy的方法iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage期间遇到此错误。我本身并没有尝试处理任何图像。
我目前无法运行nunit测试,因此无法在此时修复自己。