在使用pdf.js呈现pdf时,如何重新设置单词?

时间:2013-09-04 18:27:36

标签: javascript pdf pdf.js

当我使用pdf.js运行pdf时,我希望能够重新设置一些单词(例如高亮)这可能吗?

1 个答案:

答案 0 :(得分:2)

是的,可以在使用PDF.js

时突出显示单词

由于页面包含

  • 画布(用于渲染的内容)
  • HTMLDivElement(对于未呈现的文本内容)

您可以使用后者来选择文本元素。

有权访问浏览器中的Selection API,您可以通过document.getSelection()进行选择。

以下代码演示了如果所选文本没有(内部)跨越多个HTMLElements,如何执行此操作:

var s = document.getSelection();

var oldstr = s.anchorNode.textContent;
var textBeforeSelection = oldstr.substr(0, s.anchorOffset);
var textInsideSelection = oldstr.substr(s.anchorOffset, s.focusOffset - s.anchorOffset);
var textAfterSelection  = oldstr.substr(s.focusOffset, oldstr.length - s.focusOffset);

foo.anchorNode.parentElement.innerHTML
  = textBeforeSelection 
  + "<span class='highlight'>" 
  + textInsideSelection 
  + "</span>" 
  + textAfterSelection;

对于跨越多个(内部)HTMLElements的选择,您可能能够通过连续调用s.anchorNodenextSibling开始遍历DOM,直到达到{{1} }}

我说可能,因为元素可以按照与视图中不同的顺序放置在文档中。

假设s.focusNode不是s.anchorNode

  • s.focusNode将从0突出显示为s.anchorNode
  • s.anchorOffsets.focusNode到节点结束和
  • 它们之间的所有节点都可以完全突出显示

这对于文本节点起作用(或者至少可能起作用) - 通过用突出显示跨度围绕每个非文本节点,可以将该想法扩展到非文本节点。