首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pdfIum pdfSearchManager突出显示

使用pdfIum pdfSearchManager突出显示
EN

Stack Overflow用户
提问于 2019-05-29 22:08:33
回答 3查看 526关注 0票数 0

我需要用pdfSearchManager以编程方式搜索pdf并突出显示文本。代码可以进行搜索,但不会突出显示。请看我的代码,并纠正我。

代码语言:javascript
复制
PdfSearchManager a = new PdfSearchManager(pdfRenderer1);
a.Reset();
a.MatchWholeWord = true;
a.HighlightAllMatches = true;
MessageBox.Show(a.Search(textBox1.Text).ToString());
EN

回答 3

Stack Overflow用户

发布于 2019-05-29 22:17:50

正如我们在GitHub上看到的(如果这就是您正在使用的PdfSearchManager )

Search()是一个布尔值,因此它只返回truefalse,因此它不会向您显示带有.ToString()的任何文本

Search():

代码语言:javascript
复制
/// <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,但它可能会起作用)

票数 0
EN

Stack Overflow用户

发布于 2019-05-29 23:29:55

来自PdfSearchManager源代码:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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中可见。

票数 0
EN

Stack Overflow用户

发布于 2019-06-05 18:59:28

原来我引用了错误的渲染器。

我之前的代码是:PdfSearchManager a = new PdfSearchManager(pdfRenderer1);,其中pdfRenderer1是我放在表单上的组件的名称

代码应该是:PdfSearchManager a = new PdfSearchManager(pdfViewer1.Renderer);

高亮显示搜索到的文本将按预期运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56362535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档