我需要用pdfSearchManager以编程方式搜索pdf并突出显示文本。代码可以进行搜索,但不会突出显示。请看我的代码,并纠正我。
PdfSearchManager a = new PdfSearchManager(pdfRenderer1);
a.Reset();
a.MatchWholeWord = true;
a.HighlightAllMatches = true;
MessageBox.Show(a.Search(textBox1.Text).ToString());发布于 2019-05-29 22:17:50
正如我们在GitHub上看到的(如果这就是您正在使用的PdfSearchManager )
Search()是一个布尔值,因此它只返回true或false,因此它不会向您显示带有.ToString()的任何文本
Search():
/// <summary>
/// Searches for the specified text.
/// </summary>
/// <param name="text">The text to search.</param>
/// <returns>Whether any matches were found.</returns>它返回:是否找到任何匹配项
并且不是:与找到的匹配
如果你试图突出显示匹配,而不是像我一开始想的那样显示它们,那么你应该尝试使用a.UpdateHighlights() (我以前从未使用过PdfSearchManager,但它可能会起作用)
发布于 2019-05-29 23:29:55
来自PdfSearchManager源代码:
public bool Search(string text)
{
Renderer.Markers.Clear();
if (String.IsNullOrEmpty(text))
{
_matches = null;
_bounds = null;
}
else
{
_matches = Renderer.Document.Search(text, MatchCase, MatchWholeWord);
_bounds = GetAllBounds();
}
_offset = -1;
UpdateHighlights();
return _matches != null && _matches.Items.Count > 0;
}有两个私有方法UpdateHighlights和AddMatch:
private void UpdateHighlights()
{
Renderer.Markers.Clear();
if (_matches == null)
return;
if (_highlightAllMatches)
{
for (int i = 0; i < _matches.Items.Count; i++)
{
AddMatch(i, i == _offset);
}
}
else if (_offset != -1)
{
AddMatch(_offset, true);
}
}
private void AddMatch(int index, bool current)
{
foreach (var pdfBounds in _bounds[index])
{
var bounds = new RectangleF(
pdfBounds.Bounds.Left - 1,
pdfBounds.Bounds.Top + 1,
pdfBounds.Bounds.Width + 2,
pdfBounds.Bounds.Height - 2
);
var marker = new PdfMarker(
pdfBounds.Page,
bounds,
current ? CurrentMatchColor : MatchColor,
current ? CurrentMatchBorderColor : MatchBorderColor,
current ? CurrentMatchBorderWidth : MatchBorderWidth
);
Renderer.Markers.Add(marker);
}
}我认为搜索方法已经添加了搜索文本中的所有标记。现在,如何让它在pdfiumViewer中可见。
发布于 2019-06-05 18:59:28
原来我引用了错误的渲染器。
我之前的代码是:PdfSearchManager a = new PdfSearchManager(pdfRenderer1);,其中pdfRenderer1是我放在表单上的组件的名称
代码应该是:PdfSearchManager a = new PdfSearchManager(pdfViewer1.Renderer);
高亮显示搜索到的文本将按预期运行。
https://stackoverflow.com/questions/56362535
复制相似问题