【问题标题】:How to highlight synctex output values on ng2-pdf-viewer如何在 ng2-pdf-viewer 上突出显示 synctex 输出值
【发布时间】:2020-04-11 15:09:04
【问题描述】:

我有一个用于 tex 编译和 pdf 输出的 angular 6 应用程序。 Ace 编辑器用于创建 tex 文件。它可以使用 pdflatex 实时编译。使用 ng2-pdf-viewer 显示输出 pdf。为了实现synctex(编辑器内容和pdf之间的同步),我使用“synctex view”命令进行前向搜索,它返回一些输出值,例如h、v、x、y、宽度、高度。我需要在 ng2-pdf-viewer 中强调这些要点。我在 pdf 查看器中找到了一个画布标签,我创建并附加了一个具有相同高度和宽度的新画布,并且能够在 pdf 上绘制形状。但是我无法准确地绘制出点的位置。有没有人对此有任何想法,这个 synctex 输出点如何工作以及我们如何使用画布绘制功能突出显示 pdf。

【问题讨论】:

    标签: javascript angular ace-editor ng2-pdfjs-viewer


    【解决方案1】:

    经过数小时的研究,我在 ng2-pdf-viewer 中找到了 synctex highlight 的解决方案。 我们可以创建一个 div 元素并根据这些值调整其顶部、左侧、宽度和高度,而不是在画布上绘制同步输出值。在此之前,我们需要重新计算相对于我们的 pdf-viewer 的值。

    “synctex view”命令的结果返回 v、h、width、height、页码值。 然后解析如下。

    var pageno     = parseInt(datas['pageNum']);
    //i'm using ng2-pdf-viewer, ViewChild('pdfviewer');
    var pageView   = this.pdfviewer.pdfViewer._pages[pageno - 1];
    //datas - array returning from server contains synctex output values
    var left       = parseInt(datas['h']);
    var top        = parseInt(datas['v']);
    var width      = parseInt(datas['width']);
    var height     = parseInt(datas['height']);
    //recalculating top value
        top        = pageView.viewport.viewBox[3] - top;
    var valueArray = [left,top,left + width,top + height];
    let rect       = pageView.viewport.convertToViewportRectangle(valueArray);
        rect       = pdfjs.Util.normalizeRect(rect);
    var x          = Math.min(rect[0], rect[2]), width = Math.abs(rect[0] - rect[2]);
    var y          = Math.min(rect[1], rect[3]), height = Math.abs(rect[1] - rect[3])
    const element  = document.createElement('div');
          element.setAttribute("class", "overlay-div-synctex");
          element.style.left     = x + 'px';
          element.style.top      = y + 'px';
          element.style.width    = width + 'px';
          element.style.height   = height + 'px';
          element.style.position = 'absolute';
          element.style.backgroundColor = 'rgba(255,255,0,0.5)';
          //jquery is used here, replace it with javascript
          $('*[data-page-number="'+pageno+'"]').append(element);
          this.pdfviewer.pdfViewer._scrollIntoView({
              pageDiv: pageView.div
          });
    

    如果您的 synctex 命令返回多个 h,v.. 值,则循环并附加突出显示元素。

    希望对你有帮助。

    【讨论】:

    • 嗨,@yadu,你能添加这个的 html 文件吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 2021-12-27
    • 2018-03-26
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    相关资源
    最近更新 更多