gpt4 book ai didi

javascript - 在 pdf.js 查看器中呈现时,在 pdf 文档上按文本位置添加 HTML/CSS 覆盖

转载 作者:太空狗 更新时间:2023-10-29 12:25:14 37 4
gpt4 key购买 nike

我如何以编程方式:

  • 在 pdf.js 呈现的 PDF 文档上叠加 HTML/CSS 元素,以及
  • 控制在视口(viewport)中显示的文档部分

使用原生 PDF 坐标系中的位置?

例如,这里的目标是能够突出显示所有出现的短语或添加根据我已经从后端文档中解析出的文本位置定位的交互式设计元素。

举个具体的例子,如果知道短语“This is my Text”。位于我的 pdf 文档的第 4 页,定义此文本在 native pdf coordinate system 页面上位置的框是

bottom left corner = (0,0)
top right corner = (14, 5)

是否可以 1) 向下滚动到文档的该行以使其可见,以及 2) 在此位置上覆盖一个 div?

我看到这本质上就是它内置的“文本搜索”、“查找下一个”和“查找上一个”功能所做的,但是在解释代码时遇到了一些麻烦。

最佳答案

PDF.js 定义了所谓的 PageViewport它允许在 PDF 坐标和屏幕显示之间进行转换。要创建视口(viewport),请参阅 PDF 页面的 getViewport .将坐标转换为屏幕显示:var screenRect = viewport.convertToViewportRectangle([0, 0, 14, 5]); 标准化坐标并在 Canvas 上覆盖 div。

通用查看器的 API 尚未定义。但是,您可以使用查看器组件获取页面 View :var pageView = PDFViewerApplication.pdfViewer.getPageView(3);//获取页面 4 View 。 pageView 将具有 viewportdiv 容器。 (由于 API 尚未定义,名称和参数可能会更改)如果您正在使用查看器容器,请注意它们会在缩放/滚动期间定期清理——在 pagerendered 事件之后绘制您的内容。

滚动只是在当前 View 的screenRect区域显示pageView.div

var pageNumber = 4;
var pdfRect = [0,0,140,150];

var pageView = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1);
var screenRect = pageView.viewport.convertToViewportRectangle(pdfRect);

var x = Math.min(screenRect[0], screenRect[2]), width = Math.abs(screenRect[0] - screenRect[2]);
var y = Math.min(screenRect[1], screenRect[3]), height = Math.abs(screenRect[1] - screenRect[3]);

// note: needs to be done in the 'pagerendered' event
var overlayDiv = document.createElement('div');
overlayDiv.setAttribute('style', 'background-color: rgba(255,255,0,0.5);position:absolute;' +
'left:' + x + 'px;top:' + y + 'px;width:' + width + 'px;height:' + height + 'px;');
pageView.div.appendChild(overlayDiv);

// scroll
scrollIntoView(pageView.div, {top: y});

关于javascript - 在 pdf.js 查看器中呈现时,在 pdf 文档上按文本位置添加 HTML/CSS 覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27830725/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com