如何实现ctrl点击行为,以复制文本从嵌入pdf在web应用程序
How to implement ctrl click behavior to copy text from an embedded pdf in a webapp?
我有一个web应用程序实现以下行为的要求:
在浏览器中显示带有嵌入式PDF对象的web表单打开后,用户需要能够使用ctrl + 鼠标单击选择文档中的文本,然后将所选文本复制到显示嵌入式PDF对象的同一web表单中的输入字段中。
是否有API(最好是开源的)实现这种行为?我是否可以使用JSP、JSF、PrimeFaces、Javascript或HTML5等技术来满足这一需求?我该如何做到这一点?
在本例中,我将使用
- PDF.js
- JSF 2.2(什么版本并不重要,但最好是2.x)
- PrimeFaces(用于inputField或textArea) * 可选
步骤:
- 下载并集成PDF.js
- 按CTRL注册事件
下载并集成PDF.js
下载PDF.js,下载完成后解压缩,您会看到以下文件夹层次
.
├── LICENSE
├── build
│ ├── pdf.js
│ └── pdf.worker.js
└── web
├── cmaps/
├── compatibility.js
├── compressed.tracemonkey-pldi-09.pdf
├── debugger.js
├── images/
├── l10n.js
├── locale/
├── viewer.css
├── viewer.html
└── viewer.js
假设您有一个JSF项目,在webapp
中有一个resources
文件夹,将以下文件从web文件夹(从解压缩文件)复制到resources
中,其中它们看起来像这样:
├── css
│ └── viewer.css (web/viewer.css)
├── images
│ └── pdfjs
│ ├── ** All the images inside (web/images)
└── js
└── pdfjs
├── compatibility.js (web/compatibility.js)
├── l10n.js (web/l10n.js)
├── pdf.js (web/pdf.js)
├── pdf.worker.js (web/pdf.worker.js)
└── viewer.js (web/viewer.js)
编辑viewer.css以解析所有所需的图像,将每个url
替换为
"#{resource['images/pdfjs/correspondingImageName']}"
这是一个完全解析的viewer.css
创建内容为viewer.html
的xhtml文件(web/viewer.html from zip),它将表示查看器标记,我将查看器与所有html 5标记一起使用的原因是能够选择文本,而不像画布示例
这是一个完整复制到viewer. xhtml中的viewer.html
示例
注意,最后我按以下顺序包含了这些库:
<h:outputScript name="js/pdfjs/compatibility.js" target="head" />
<h:outputScript name="js/pdfjs/l10n.js" target="head" />
<h:outputScript name="js/pdfjs/pdf.js" target="head" />
<h:outputScript name="js/pdfjs/viewer.js" target="head" />
要使PDF.js
运行,您需要指定两件事,pdf.worder.js
的位置和pdfURL
(参见viewer. xhtml)
<script>
var DEFAULT_URL = "#{pdfURL}"; //pdf should be hosted on your domain name (ajaxly loaded)
PDFJS.workerSrc = "#{resource['js/pdfjs/pdf.worker.js']}";
</script>
按CTRL注册事件
定义inputText
或inputTextArea
<p:inputTextarea id="inputTextArea" />
现在注册一个keydown或其他合适的事件,例如:
$('.pdfZone').keydown(function(event) {
if (event.which == "17"){ // CTRL key
$('#inputTextArea').text(window.getSelection().toString())
}
});
.pdfZone
是pdf viewer
的div
容器
你可以在github[1][2]上找到一个完整的例子,是一个在线的演示。
注意:我没有使用CTRL + Click,因为在我的Mac OSX中会触发右键单击,无论如何你可以改变事件处理。
建议使用CTRL + Click(但演示将只使用CTRL)
$('.pdfZone').on('mouseup',function(e) {
if (e.ctrlKey) {
$('#inputTextArea').text(window.getSelection().toString());
}
});
- 如何将键入的文本从一个输入类型的文本复制到另一个
- Meteor中的文本复制
- 使用SeleniumWebdriver将文本复制到文件时出现编译错误的解决方案
- JavaScript 自动将文本复制到剪贴板
- 将标签文本复制到输入
- 自动建议输入,防止将文本复制到其他输入文本字段
- JavaScript 将文本复制到剪贴板 HTML5 和 Jquery
- 如何在Javascript中将文本复制到剪贴板
- 使用AngularJS将元素文本复制到title属性的干净方法
- Javascript onClick函数-将文本复制到输入值
- ZeroClipboard-将文本复制到剪贴板不起作用
- 如何通过自定义上下文菜单将文本复制到剪贴板(不带flash/加载项)
- 如何从Google Chrome扩展将HTML格式的文本复制到剪贴板
- ZeroClipBoard-将文本复制到剪贴板
- 使用javascript将文本复制到剪贴板
- 将跨度文本复制到表单中的文本字段中
- 单击一个元素:将其文本复制到输入字段
- 将具有相同类的文本复制到剪贴板
- 通过多选将单元格文本复制到剪贴板
- 从网站复制文本,附加链接与文本复制