我正在尝试在 pdf 文档之后重用高亮注释的颜色,并且它的高亮已被保存。
我添加注释并以这种方式分配颜色:
if (isCustomColor)
{
ColorPt color = markingColors[m_editColor];
hightlightAnnot.SetColor(color,3);
hightlightAnnot.RefreshAppearance();
}
pdftron.PDF.Page page = doc.GetPage(selectionPageNum);
TextExtractor txtExtractor = new TextExtractor();
txtExtractor.Begin(page, hightlightAnnot.GetRect());
hightlightAnnot.SetContents(txtExtractor.GetAsText());
doc.Lock();
page.AnnotPushBack(hightlightAnnot);
doc.Unlock();
markingscolors 是我在构造函数中添加的带有颜色的字典:
markingColors.Add(MarkingColor.black, new ColorPt(113 / 255.0, 113 / 255.0, 113 / 255.0));
markingColors.Add(MarkingColor.yellow, new ColorPt(1, 1, 0));
markingColors.Add(MarkingColor.red, new ColorPt(1, 0, 0));
markingColors.Add(MarkingColor.green, new ColorPt(0, 1, 0));
markingColors.Add(MarkingColor.blue, new ColorPt(45/255.0, 126/255.0, 205/255.0));
问题是,如果在保存并重新打开 pdf 后将注释设置为黑色或蓝色(双类型值),我将无法检索注释的颜色。
检查颜色是否相等(获取具有特定颜色的高光以将它们导出到 rtf 文档并根据 rtf 文档中的颜色添加缩进):
private bool ColorsEqual(ColorPt color1, ColorPt color2)
{
if (color1.Get(0) != color2.Get(0))
{
return false;
}
if (color1.Get(1) != color2.Get(1))
{
return false;
}
if (color1.Get(2) != color2.Get(2))
{
return false;
}
return true;
}
我这样称呼它:
foreach (MarkingColor color in colors)
{
if (ColorsEqual(annotation.GetColorAsRGB(), markingColors[color]))
{
int indentation = indentations[color];
for (int j = 1; j <= indentation; j++)
{
text += " ";
}
text += annotation.GetContents();
break;
}
}
但是注释的颜色总是返回一个整数值而不是双精度值,这就是黑色和蓝色不起作用的原因......此外,如果立即完成提取而不是重新打开 pdf,则没有问题并且颜色工作完美
如何解决?