使用iTextSharp从PDF中提取颜色时出现此错误:
int r = renderInfo.GetColorNonStroke().R;
int g = renderInfo.GetColorNonStroke().G;
int b = renderInfo.GetColorNonStroke().B;
错误讯息:
对象引用未设置为对象的实例。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。
异常详情:
System.NullReferenceException:未将对象引用设置为对象的实例。
答案 0 :(得分:2)
由于GetColorNonStroke
不是原始iTextSharp TextRenderInfo,
的方法,我假设您使用的是根据@ChrisHaas博客条目Getting color information from iTextSharp’s TextRenderInfo and ITextExtractionStrategy修补的版本。
GraphicsState
的成员colorStroke
和colorNonStroke
(其值分别由TextRenderInfo
方法GetColorStroke
和GetColorNonStroke
返回用null.
因此,只要在设置描边或非描边颜色之前没有显式命令,相应的TextRenderInfo
方法GetColorStroke
或GetColorNonStroke
将返回null.
因此,无论何时使用renderInfo.GetColorNonStroke(),
,在访问其成员之前都会检查null
。如果颜色为null,
则采用默认值。
此外,@ ChrisHaas的iTextSharp解析功能的颜色扩展使用不同种类的颜色对象:GrayColor, BaseColor,
和CMYKColor.
根据您的要求,您可能需要测试返回给您的颜色类型。 / p>
如果是特殊颜色,Chris Haas even writes:
SCN 和 scn 本身就是其他所有非RGB,CMYK或灰色的替代品。在点击其中一个之前,你应该首先找到一个 CS 运算符,其第一个和唯一的操作数是要使用的实际颜色空间。这里有很多选项,包括DeviceRGB,DeviceCMYK,Pattern,Lab,DeviceN等。您可以在2008 PDF规范8.6.8(第171页)的表74中找到这些选项。我的代码实际上并不完全正确,我不应该将 CS 和 cs 推送到 SetStrokingGeneral 方法,而应该进行一些进一步的处理。不幸的是,我当时没有一个样本PDF文件,所以我无法测试它。希望这可以帮助你!