提取颜色时出错

时间:2013-06-25 12:33:45

标签: c# asp.net pdf itextsharp

使用iTextSharp从PDF中提取颜色时出现此错误:

int r = renderInfo.GetColorNonStroke().R;
int g = renderInfo.GetColorNonStroke().G;
int b = renderInfo.GetColorNonStroke().B;

错误讯息:

  

对象引用未设置为对象的实例。   描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。

异常详情:

  

System.NullReferenceException:未将对象引用设置为对象的实例。

1 个答案:

答案 0 :(得分:2)

由于GetColorNonStroke不是原始iTextSharp TextRenderInfo,的方法,我假设您使用的是根据@ChrisHaas博客条目Getting color information from iTextSharp’s TextRenderInfo and ITextExtractionStrategy修补的版本。

GraphicsState的成员colorStrokecolorNonStroke(其值分别由TextRenderInfo方法GetColorStrokeGetColorNonStroke返回用null.

初始化

因此,只要在设置描边或非描边颜色之前没有显式命令,相应的TextRenderInfo方法GetColorStrokeGetColorNonStroke将返回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文件,所以我无法测试它。希望这可以帮助你!