如何在 Javascript 中获取 pdf 中选定的文本?

2023-12-09

我正在编写一个 Chrome 扩展来操作 pdf 文件,所以我想获取 pdf 中选定的文本。我怎样才能做到这一点。

像这样的东西:

enter image description here


您可以使用内部未记录的命令内置 PDF 查看器。

以下是内容脚本的示例:

function getPdfSelectedText() {
  return new Promise(resolve => {
    window.addEventListener('message', function onMessage(e) {
      if (e.origin === 'chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai' &&
          e.data && e.data.type === 'getSelectedTextReply') {
        window.removeEventListener('message', onMessage);
        resolve(e.data.selectedText);
      }
    });
    // runs code in page context to access postMessage of the embedded plugin
    const script = document.createElement('script');
    if (chrome.runtime.getManifest().manifest_version > 2) {
      script.src = chrome.runtime.getURL('query-pdf.js');
    } else {
      script.textContent = `(${() => {
        document.querySelector('embed').postMessage({type: 'getSelectedText'}, '*');
      }})()`;
    }
    document.documentElement.appendChild(script);
    script.remove();
  });
}

chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
  if (msg === 'getPdfSelection') {
    getPdfSelectedText().then(sendResponse);
    return true;
  }
});

此示例假设您从弹出窗口或后台脚本发送消息:

chrome.tabs.query({active: true, currentWindow: true}, ([tab]) => {
  chrome.tabs.sendMessage(tab.id, 'getPdfSelection', sel => {
    // do something
  });
});

也可以看看如何打开正确的开发工具控制台来查看扩展脚本的输出?

Manifest V3 扩展也需要这个:

  • manifest.json 应该公开 query-pdf.js

      "web_accessible_resources": [{
        "resources": ["query-pdf.js"],
        "matches": ["<all_urls>"],
        "use_dynamic_url": true
      }]
    
  • 查询-pdf.js

    document.querySelector('embed').postMessage({type: 'getSelectedText'}, '*')
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Javascript 中获取 pdf 中选定的文本? 的相关文章

  • Javascript 函数查找数字的倍数

    创建一个名为的函数multiplesOf 它将接受两个参数 第一个参数是数字数组 第二个参数是数字 该函数应返回一个新数组 该数组由参数数组中的每个数字组成 该数字是参数数字的倍数 So multiplesOf 5 6 7 8 9 10 3
  • 在 contenteditable div 中选择范围

    我有一个contenteditablediv 和其中的一些段落 这是我的代码 div style border solid 1px black width 300px height 300px div Hello world div div
  • Javascript Promise“then”始终运行,即使 Promise 未能执行

    我希望当调用第二个 then 时不执行第三个 then 但是 即使 Promise 被拒绝 调用第二个 then 并且代码返回 rejected 然后返回 undefined 它仍然调用第三个 then 如何不运行第三个 then 这样 未
  • 如何修改每个JSON对象javascript

    我想修改里面的每个 JSON 值cooldown object cooldown user 1 This user2 0 This 在 Javascript 中使用 for 语句 我研究了好几个小时 只找到了内部的 blocks Edit
  • Chrome 中的性能问题

    我目前正在从事一个相对较大的项目 使用 AngularJs 构建 应用程序的一部分是一个表单 您可以向其中添加任意数量的页面 不幸的是 添加了很多不必要的垃圾 即表示表单模型的对象可能会变得非常大 在某些时候 Chrome 基本上无法处理它
  • 如何使用javascript将大图像转换为十六进制?

    如果我尝试将图像转换为十六进制 无论我使用哪个函数 我都会收到此错误消息 该图像的大小为 7 MB 19812 毫秒 清理 1401 2 1455 0 gt 1401 2 1455 0 MB 9 9 0 ms 自上次 GC 以来 8 3 m
  • 摩卡 - Chai Karma“套件未定义”

    我对 jscript tdd 很陌生 遇到了问题 希望有人能告诉我我在做什么 在浏览器中运行测试 通过 HTML 文件 一切正常 通过节点和业力运行它们我得到以下异常 我想在 node js 主机的 karma 中使用 Mocha 和 Ch
  • 图像无法在带有 DOM 的 IE 中加载:控制台中的 7009 错误(无法解码)

    当在 IE 中的单个页面上加载许多图像时 在 IE11 中重现 其中一些图像开始加载失败 并在控制台中出现类似以下警告的内容 DOM7009 无法解码 URL 处的图像 某些唯一的 url 当我查看网络流量时 似乎确实从服务器收到了每个图像
  • 使用 dc.js 按条形值对条形图中的条形进行排序(排序)

    如何通过维度的计算值而不是维度本身的名称对 dc js 示例中的 x 轴 维度 进行排序 例如 请考虑序数条形图的 dc js 示例 https github com dc js dc js blob master web examples
  • 隐藏 Div 的父级

    我只是想隐藏父divcomments section div class content content green div div div 我试过这个 document getElementById comments section pa
  • 防止 iOS 键盘在 cordova 3.5 中滚动页面

    我正在使用 Cordova 3 5 和 jQuery mobile 构建 iOS 应用程序 我在大部分应用程序中禁用了滚动功能 但是 当我选择输入字段时 iOS 键盘会打开并向上滚动页面 我不想要这个功能 由于输入足够高 键盘不会覆盖它 我
  • 刷新页面时保存用户的选择

    我目前有一个页面显示不同团队的数据 我有一些数据 用户可以单击使其处于 打开 或 关闭 状态 并为每个数据显示不同的图标 它基本上就像一个清单 只是没有物理复选框 我想记住哪些 复选框 已被选中 即使在用户刷新页面或关闭浏览器并稍后返回之后
  • DataTables row.add 到特定索引

    我正在替换这样的行项目 var targetRow entity row dataTable targetRow closest table dataTable DataTable dataTable row targetRow remov
  • 将 UMD Javascript 模块导入浏览器

    你好 我正在对 RxJS 进行一些研究 我可以通过在浏览器中引用它来使用该库 如下所示 它使用全局对象命名空间变量 Rx 导入 我可以制作可观察的东西并做所有有趣的事情 当我将 src 更改为指向最新的 UMD 文件时 一切都会崩溃 如下所
  • 有没有办法在 onclick 触发时禁用 iPad/iPhone 上的闪烁/闪烁?

    所以我有一个有 onclick 事件的区域 在常规浏览器上单击时 它不会显示任何视觉变化 但在 iPad iPhone 上单击时 它会闪烁 闪烁 有什么办法可以阻止它在 iPad iPhone 上执行此操作吗 这是一个与我正在做的类似的示例
  • Vuejs 2:去抖动不适用于手表选项

    当我在 VueJs 中反跳此函数时 如果我提供毫秒数作为原语 它就可以正常工作 但是 如果我将其提供为对 prop 的引用 它会忽略它 这是道具的缩写版本 props debounce type Number default 500 这是不
  • 对于只触及我的工作表的 Google 表格脚本,收到“此应用程序未经验证”

    我正在编写一个 Google Sheets 脚本 我只想访问与 gs 文件关联的同一电子表格中的数据 似乎我应该有权在自己的电子表格中运行脚本 但是每当我运行一个函数时 我都会得到一个This app isn t verified信息 我该
  • 在 Shopify 商店中嵌入 Vue 组件

    在产品页面中 我尝试显示自定义 Vue 组件 为简洁起见 该组件根据给定的产品 ID 显示 Firebase 数据库中的一些信息 我最初尝试将其制作为 Shopify 应用程序 以便我可以访问他们的 API 我实现了 OAuth 并且可以检
  • 带参数的事件监听器

    我想将参数传递给 JavaScript 中的事件侦听器 我已经找到了解决方案 但我无法理解它们为什么或如何工作以及为什么其他解决方案不起作用 我有 C C 背景 但是 Javascript 函数的执行有很大不同 您能否帮助我理解以下示例如何
  • JavaScript 相对路径

    在第一个 html 文件中 我使用了一个变量类别链接 var categoryLinks Career prospects http localhost Landa DirectManagers 511 HelenaChechik Dim0

随机推荐

  • 如何在直方图中绘制字典中的键和值

    我需要用以下字典绘制直方图 x 5 289 8 341 1 1565 4 655 2 1337 9 226 7 399 3 967 6 405 我需要首先将键从 1 到 9 排序 然后将这些值绘制在直方图中 显示最大概率为 1 0 我已经尝
  • 垂直旋转 JTextField

    我见过很多询问如何以任意角度旋转 JLabel 或图像的问题 我需要做的就是将文本字段旋转 90 度 但我还没有找到专门针对该角度的更简单的方法 我以为我正确复制了答案 但我的文本字段没有旋转 这是我正在做的 SSCCE import ja
  • 如何判断进程是否在用户界面进程中?

    如何从进程中获取它是 UI 用户界面 进程还是非 ui 进程的信息 我所说的 UI 进程是指 Finder Dock 系统 UI 服务器或任何其他具有 UI 界面且由 Window Server 使用的 Mac 应用程序 我想从 Proce
  • 尝试发送 Android 图像时应用程序崩溃

    我在尝试将图像从我的应用程序发送到服务器时遇到问题 我知道它在哪里崩溃 这些是我的文件 RestClient java package edu gvsu cis masl camerademo import android util Log
  • 嵌套跨度上未禁用 CSS 直通

    CSS ol margin 0 30px li margin 15px 0 li done text decoration line through li done span text decoration none background
  • 使用“$CI_JOB_TOKEN”“包含”私有项目文件

    到目前为止我得到的是 可以通过以下方式进行身份验证Personal Access Token and include外部 CI 脚本 但更简洁的方法是使用 CI JOB TOKEN因为它更安全 更受限制 我正在研究是否可以通过这种方式完成
  • 多个 dropzone.js - 单页

    不是在单个 dropzone 元素上上传多个文件 是否可以在单个页面上拥有多个 dropzone 元素 当有多个元素时 选择对话框后似乎 dropzone 甚至不会触发 每个元素都初始化了自己的 dropzone 使用 dropzone 的
  • 为什么 jest.spyOn() 有时不能在 Vue 组件的方法上工作?

    我看到该方法作为事件处理程序所做的更改 但是jest spyOn wrapper vm methodName 在主要情况下无法接听电话 但在某些测试中它以某种方式起作用 我怀疑可能会重新渲染 也许是因为options论证中mount 调用
  • maven 和 jboss 模块

    我是 Maven 和 jboss 的新手 所以我试图从它们之间的合作中受益 我在 Eclipse 中有一个 Maven 项目 该项目有许多依赖项 在运行时我想将它们作为 jboss 的模块提供 否则我的 EAR 将非常大 我还使用 Nexu
  • 如何在 MVC 3 中关闭客户端验证?

    我有一个客户端验证框架 我更喜欢使用它 而不是 ASP NET MVC 3 附带的现有框架 有谁知道如何在 MVC 3 中禁用它 我已经尝试过以下方法 HtmlHelper ClientValidationEnabled false Htm
  • 如何根据用户区域设置 Dygraphs 图例中的日期和时间格式

    我有一个图表 显示设备随时间的功率输出 我想格式化图例 以便它以当前用户所在位置的样式显示时间戳 例如 在美国 它会显示MM DD YY h m s am pm 并且在欧盟会显示DD MM YYYY HH MM SS ETC 目前 它是默认
  • 无法显示 HTML + SVG

    我以前用过JEditorPane 但只能显示HTML 不能显示SVG 嵌套SVG HTML也不能完整显示 然后我用JSVGCanvas 但只能显示SVG 不能显示HTML 有什么办法可以解决这个问题吗 配置JEditorPane使用JSVG
  • 我无法将 ComboBox 停靠在 TableLayoutPanel 单元格中

    请看下图 我想对接一个组合框我的 TableLayoutPanel 的单元格中的控件 组合框Dock属性设置为Fill和Anchor财产给上 下 左 右 TL DR 这是预期的行为 对于ComboBox环境Dock to Fill没有填满容
  • Spring @RequestMapping“不包含”正则表达式

    我有这个请求映射 RequestMapping value route to destination from departure html method RequestMethod GET RequestMethod HEAD 我想添加
  • C++ 中没有定义的类声明

    我对 C 没有太多经验 我对 Qt 文档中的以下几行有疑问 http qt project org doc qt 4 8 mainwindows application mainwindow h html 顶部注释后的第 4 6 行 cla
  • 如何显示 HTTP 401 基本身份验证对话框

    I am new to web development I have Android application that hosts some web pages using HTTPServer I am using Netty to de
  • python setup.py install 忽略 install_requires

    我无法使用安装本地软件包setup py 这是项目结构 my project lib local1 local1 1 0 whl index html local2 local2 1 0 whl index html setup py se
  • 如何使 HTML 有序列表的文本居中而不是数字标签居中

    我正在为页面创建一个小部件 以相反的顺序列出步骤 我计划用一个ol并设置value个人的属性li标签强制编号ol被逆转 到目前为止 一切都很好 然而 我有一个设计难题 我不确定可以用 css 解决 有了这个标记 是否可以将文本居中但保持标签
  • core-plot iOS 反转 Y 轴

    我想使用 core plot 来显示水深图 实时更新 但我不知道如何反转 Y 轴 以便 X 轴 代表时域 位于顶部我的 UIView 和 Y 轴以正值向底部增长 EDIT 如果我能像这样画轴那就更好了 X轴是时间 Y 轴从 0 到 X X
  • 如何在 Javascript 中获取 pdf 中选定的文本?

    我正在编写一个 Chrome 扩展来操作 pdf 文件 所以我想获取 pdf 中选定的文本 我怎样才能做到这一点 像这样的东西 您可以使用内部未记录的命令内置 PDF 查看器 以下是内容脚本的示例 function getPdfSelect