【发布时间】:2015-03-20 01:05:18
【问题描述】:
pdf.js 似乎是一个强大但糟糕的文档工具。你们中的任何人都知道如何使用它创建缩放功能吗?我尝试了一些东西,但它没有按预期工作。这是一个小提琴:http://jsfiddle.net/oeaLzavn/2/
这是代码:
HTML:
<div>
<canvas id="the-canvas" style="border:1px solid black"></canvas>
</div>
CSS:
canvas{
width: 500px;
/* overflow: scroll; //didn't help */
}
javascript:
//jQuery and pdf.js needed
$(document).ready(function () {
var url = "http://cdn.mozilla.net/pdfjs/tracemonkey.pdf";
var pdfDoc = null,
pageNum = 1,
scale = 0.8,
canvas = document.getElementById('the-canvas'),
ctx = canvas.getContext('2d');
function renderPage(num, scale) {
// Using promise to fetch the page
pdfDoc.getPage(num).then(function (page) {
var viewport = page.getViewport(scale);
canvas.height = viewport.height;
canvas.width = viewport.width;
// Render PDF page into canvas context
var renderContext = {
canvasContext: ctx,
viewport: viewport
};
page.render(renderContext);
});
}
PDFJS.getDocument(url).then(function getPdfHelloWorld(_pdfDoc) {
pdfDoc = _pdfDoc;
renderPage(pageNum, scale);
});
if (canvas.addEventListener) {
// IE9, Chrome, Safari, Opera
canvas.addEventListener("mousewheel", MouseWheelHandler, false);
// Firefox
canvas.addEventListener("DOMMouseScroll", MouseWheelHandler, false);
}
// IE 6/7/8
else canvas.attachEvent("onmousewheel", MouseWheelHandler);
function MouseWheelHandler(e) {
var e = window.event || e;
console.log(e);
var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));
console.log(delta);
if (delta == 1) {
scale = scale + 0.2;
}
else {
scale = scale - 0.2;
}
renderPage(pageNum, scale);
}
});
缩放参数是否错误?或者它只是一个CSS的东西?有什么想法吗?
【问题讨论】:
-
您到底看到了什么问题?页面首次加载时 pdf 是否正确呈现?
-
首先我对您的评论感到困惑,但后来我检查了 chrome 中的小提琴。甚至没有在那里加载渲染的 pdf ......但是 localhost 脚本可以。但是,如果您使用 firefox 作为小提琴,您会发现问题。渲染的 pdf 加载,但在画布上使用鼠标滚轮时,内容不会变大。相反,来自其他页面的文本将显示在当前页面上。很奇怪。
-
是的,这也让我感到困惑 :) 原来需要将 pdf.js 外部资源引用从 raw.github.com... 更改为 rawgithub.com...
-
啊,谢谢,我更新了小提琴并编辑了上面的链接。
标签: javascript pdf zooming pdfjs