【问题标题】:error while extracting color提取颜色时出错
【发布时间】:2013-06-26 15:04:49
【问题描述】:

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

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

错误信息:

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

异常详情:

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

【问题讨论】:

  • 要么 renderInfo 为空,要么 GetColorNonStroke 为空。
  • 消息告诉您,您尝试访问的对象之一是null
  • 在到达这些行之前检查调试器,并验证 renderInfo 不为空
  • 渲染信息不为空。 pdf 文本字体颜色为黑色。我在几个 pdf 字体颜色为黑色并采用 r g b 值有 #000000 之前进行了测试,但在此它没有询问,我得到了错误。你能帮忙吗?还有其他事情吗?应该包括任何其他的东西。或者我的代码找不到任何颜色。提前谢谢你
  • 黑色也可能是灰度为 0 的灰色。为什么你认为它是 RGB?

标签: c# asp.net pdf itextsharp


【解决方案1】:

由于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. 根据您的要求,您可能想要测试返回给您的颜色类型。

如遇特殊颜色,Chris Haas even writes:

SCNscn 本身就是 RGB、CMYK 或灰色以外的一切的统称。在点击这两个中的一个之前,您实际上应该首先找到一个 CS 运算符,其第一个也是唯一的操作数是要使用的实际颜色空间。这有很多选项,包括 DeviceRGB、DeviceCMYK、Pattern、Lab、DeviceN 等。您可以在 2008 PDF 规范第 8.6.8 节(第 171 页)的表 74 中找到这些选项。我的代码实际上并不完全正确,我不应该将 CScs 推送到 SetStrokingGeneral 方法,而应该做一些进一步的处理。不幸的是,我当时拥有的所有示例 PDF 都没有此设置,因此我无法对其进行测试。希望这对您有所帮助!

【讨论】:

  • 谢谢@mkl,我忘了我什至写了那篇文章!
  • @ChrisHaas Google 是你的朋友 ;) 实际上,我最初对解析器类中应该有颜色感到惊讶,所以我进行了调查。 ..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-27
  • 2016-08-14
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 2013-07-15
相关资源
最近更新 更多