提取颜色时出错

本文关键字:出错 颜色 提取 | 更新日期: 2023-09-27 18:20:00

使用iTextSharp从PDF中提取颜色时,我收到了以下错误:

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

错误消息:

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

异常详细信息:

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

提取颜色时出错

由于GetColorNonStroke不是原始iTextSharp TextRenderInfo,的方法,我假设您使用的是根据@ChrisHaas的博客条目"从iTextSharp's TextRenderInfo和ITextExtractionStrategy获取颜色信息"修补的版本。

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

因此,只要之前没有明确的命令来设置频闪或非频闪颜色,则相应的TextRenderInfo方法GetColorStrokeGetColorNonStroke将返回null.

因此,无论何时使用renderInfo.GetColorNonStroke(),,在访问其成员之前,请检查其是否为null如果颜色为null,,则假定为默认颜色。

此外,@ChrisHaas对iTextSharp解析功能的颜色扩展使用了不同类型的颜色对象:GrayColor, BaseColor,CMYKColor.。根据您的要求,您可能需要测试返回给您的颜色类型。

在特殊颜色的情况下,Chris Haas甚至写道:

SCNSCN本身就是RGB、CMYK或灰色以外的所有其他颜色的集合。在命中其中一个之前,您应该首先找到一个CS运算符,该运算符的第一个也是唯一一个操作数是要使用的实际颜色空间。有很多选项,包括DeviceRGB、DeviceCMYK、Pattern、Lab、DeviceN等。您可以在2008 PDF规范第8.6.8节(第171页)的表74中找到这些选项。我的代码实际上并不完全正确,我不应该将CSCS推送到SetStrongGeneral方法,而是应该做一些进一步的处理。不幸的是,我当时拥有的PDF样本都没有这套,所以我无法测试它。希望这能帮助你!