cla*_*rkk 11 javascript jquery pdf.js
如何使PDF中的文本可选?
在这里尝试过.PDF写得很好,但没有文字选择
https://github.com/mozilla/pdf.js
https://github.com/mozilla/pdf.js/blob/master/web/text_layer_builder.css
https://github.com/mozilla/pdf.js/blob/master/web/text_layer_builder.js
'use strict';
PDFJS.getDocument('file.pdf').then(function(pdf){
var page_num = 1;
pdf.getPage(page_num).then(function(page){
var scale = 1.5;
var viewport = page.getViewport(scale);
var canvas = document.getElementById('the-canvas');
var context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
var canvasOffset = $(canvas).offset();
var $textLayerDiv = $('#text-layer').css({
height : viewport.height+'px',
width : viewport.width+'px',
top : canvasOffset.top,
left : canvasOffset.left
});
page.render({
canvasContext : context,
viewport : viewport
});
page.getTextContent().then(function(textContent){
var textLayer = new TextLayerBuilder({
textLayerDiv : $textLayerDiv.get(0),
pageIndex : page_num - 1,
viewport : viewport
});
textLayer.setTextContent(textContent);
textLayer.render();
});
});
});
<body>
<div>
<canvas id="the-canvas" style="border:1px solid black;"></canvas>
<div id="text-layer" class="textLayer"></div>
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
She*_*epy 14
您的JavaScript代码非常完美.您只需要包含Text Layer Builder所依赖的UI实用程序:
https://github.com/mozilla/pdf.js/blob/master/web/ui_utils.js
或者在HTML中:
<script src="https://raw.githubusercontent.com/mozilla/pdf.js/master/web/ui_utils.js"></script>
Run Code Online (Sandbox Code Playgroud)
如果您运行代码(没有ui_utils)并检查调试控制台,您将看到ReferenceError: CustomStyle is not defined.一个快速搜索在PDFjs的回购会告诉你它是在ui_utils.js定义.
这是我的最小但完整的代码供您参考.我在这里使用PDFjs的演示pdf .请注意,在生产中,您不应链接到raw.github.
<!DOCTYPE html><meta charset="utf-8">
<link rel="stylesheet" href="https://raw.githubusercontent.com/mozilla/pdf.js/master/web/text_layer_builder.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="https://raw.githubusercontent.com/mozilla/pdf.js/master/web/ui_utils.js"></script>
<script src="https://raw.githubusercontent.com/mozilla/pdf.js/master/web/text_layer_builder.js"></script>
<script src="https://mozilla.github.io/pdf.js/build/pdf.js"></script>
<body>
<div>
<canvas id="the-canvas" style="border:1px solid black;"></canvas>
<div id="text-layer" class="textLayer"></div>
</div>
<script>
'use strict';
PDFJS.getDocument('file.pdf').then(function(pdf){
var page_num = 1;
pdf.getPage(page_num).then(function(page){
var scale = 1.5;
var viewport = page.getViewport(scale);
var canvas = $('#the-canvas')[0];
var context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
var canvasOffset = $(canvas).offset();
var $textLayerDiv = $('#text-layer').css({
height : viewport.height+'px',
width : viewport.width+'px',
top : canvasOffset.top,
left : canvasOffset.left
});
page.render({
canvasContext : context,
viewport : viewport
});
page.getTextContent().then(function(textContent){
console.log( textContent );
var textLayer = new TextLayerBuilder({
textLayerDiv : $textLayerDiv.get(0),
pageIndex : page_num - 1,
viewport : viewport
});
textLayer.setTextContent(textContent);
textLayer.render();
});
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
在 pdf.js 版本 2.8.61 上,检查的答案不再起作用,因为 renderTextLayer() 已集成到 pdf.js,不再需要外部源,也不需要 jQuery。
以下代码将使 PDF 文本可选。它加载以下PDF文档作为示例,请替换为您自己的:
https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf
它主要使用两个 html 元素:
<canvas id="the-canvas"></canvas>
<div class="textLayer"></div>
Run Code Online (Sandbox Code Playgroud)
用于显示的不可选择文档的画布,用于可选文本的 .textLayer div。.textLayer div 上的文本都是透明的,所以不可见,它只提供选择效果。
<canvas id="the-canvas"></canvas>
<div class="textLayer"></div>
Run Code Online (Sandbox Code Playgroud)