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 を保存して再度開いた後に、注釈が黒または青 (double 型の値) に設定されている場合、注釈の色を取得できないことです。
色が等しいかどうかを確認するには (特定の色でハイライトを取得して 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;
}
}
しかし、注釈の色は常に double ではなく整数値を返すため、黒と青が機能しないのです... また、pdf を再度開くのではなく、すぐに抽出が行われた場合、問題はなく、色は完全に機能しています
これはどのように解決できますか?