我想使用 pdf.js 在 Backbone.js/Marionette View 中呈现 PDF,但 PDFJS 未在 pdf.worker.js 中定义。然而,它是在主干 View 本身中定义的,也可以通过控制台访问。
这是 View 的代码:
module.exports = PDFView = Marionette.ItemView.extend({
template: require('../../../templates/pdf_frame.hbs'),
onRender: function(){
var PDF_PATH = '../../pdf/websummitpitch.pdf';
var PAGE_NUMBER = 1;
var PAGE_SCALE = 1.5;
var SVG_NS = 'http://www.w3.org/2000/svg';
if (PDFJS) {
console.log("PDFJS is loaded in Backbone View");
} else {
console.log("PDFJS is NOT loaded in Backbone View");
}
PDFJS.workerSrc = "/js/pdf.worker.js";
console.log("workerSrc is set to ", PDFJS.workerSrc);
// Loading document and page text content
PDFJS.getDocument({url: PDF_PATH}).then(function (pdfDocument) {
console.log("get document");
pdfDocument.getPage(PAGE_NUMBER).then(function (page) {
console.log("get page");
var viewport = page.getViewport(PAGE_SCALE);
page.getTextContent().then(function (textContent) {
// building SVG and adding that to the DOM
var svg = this.buildSVG(viewport, textContent);
// render svg in <canvas id="render"> in template
document.getElementById('render').appendChild(svg);
});
});
});
},
buildSVG: function(viewport, textContent) {
// Building SVG with size of the viewport (for simplicity)
var svg = document.createElementNS(SVG_NS, 'svg:svg');
svg.setAttribute('width', viewport.width + 'px');
svg.setAttribute('height', viewport.height + 'px');
// items are transformed to have 1px font size
svg.setAttribute('font-size', 1);
// processing all items
textContent.items.forEach(function (textItem) {
// we have to take in account viewport transform, which incudes scale,
// rotation and Y-axis flip, and not forgetting to flip text.
var tx = PDFJS.Util.transform(
PDFJS.Util.transform(viewport.transform, textItem.transform),
[1, 0, 0, -1, 0, 0]);
var style = textContent.styles[textItem.fontName];
// adding text element
var text = document.createElementNS(SVG_NS, 'svg:text');
text.setAttribute('transform', 'matrix(' + tx.join(' ') + ')');
text.setAttribute('font-family', style.fontFamily);
text.textContent = textItem.str;
svg.appendChild(text);
});
return svg;
}
});
这是控制台输出: 蓝色是控制台输入,因此可以通过控制台访问 PDFJS。
这是引用错误发生的地方(在 pdf.worker.js 中):
PDFJS.version = '1.0.233';
这是最开始的几行之一,其中设置了版本号。但是 PDFJS 似乎未定义。
这是我的问题:
为什么没有定义?我应该如何解决这个问题?
最佳答案
我让 pdf 查看器开始工作。而不是使用:
PDFJS.workerSrc = "/js/pdf.worker.js";
我只是像这样禁用了 worker :
PDFJS.disableWorker = true;
现在它神奇地起作用了。虽然不知道为什么。
关于javascript - PDFJS 未在 pdf.worker.js (Backbone+Marionette+pdf.js) 中定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24912734/