Ensure textLayers content is always fetched and set on the textLayer
This commit is contained in:
parent
7432e596a1
commit
32d14f4575
@ -1453,6 +1453,13 @@ var PageView = function pageView(container, pdfPage, id, scale,
|
|||||||
}, 0);
|
}, 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.getTextContent = function pageviewGetTextContent() {
|
||||||
|
if (!this.textContent) {
|
||||||
|
this.textContent = this.pdfPage.getTextContent();
|
||||||
|
}
|
||||||
|
return this.textContent;
|
||||||
|
};
|
||||||
|
|
||||||
this.draw = function pageviewDraw(callback) {
|
this.draw = function pageviewDraw(callback) {
|
||||||
if (this.renderingState !== RenderingStates.INITIAL)
|
if (this.renderingState !== RenderingStates.INITIAL)
|
||||||
error('Must be in new state before drawing');
|
error('Must be in new state before drawing');
|
||||||
@ -1487,22 +1494,6 @@ var PageView = function pageView(container, pdfPage, id, scale,
|
|||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
function pageViewDrawCallback(error) {
|
function pageViewDrawCallback(error) {
|
||||||
var visiblePages = PDFView.getVisiblePages();
|
|
||||||
var pageView = PDFView.getHighestPriority(visiblePages, PDFView.pages,
|
|
||||||
PDFView.pageViewScroll.down);
|
|
||||||
|
|
||||||
if (pageView === self) {
|
|
||||||
if (!self.textContent) {
|
|
||||||
self.textContent = {};
|
|
||||||
self.pdfPage.getTextContent().then(
|
|
||||||
function textContentResolved(textContent) {
|
|
||||||
self.textContent = textContent;
|
|
||||||
textLayer.setTextContent(textContent);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
self.renderingState = RenderingStates.FINISHED;
|
self.renderingState = RenderingStates.FINISHED;
|
||||||
|
|
||||||
if (self.loadingIconDiv) {
|
if (self.loadingIconDiv) {
|
||||||
@ -1549,6 +1540,14 @@ var PageView = function pageView(container, pdfPage, id, scale,
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (textLayer) {
|
||||||
|
this.getTextContent().then(
|
||||||
|
function textContentResolved(textContent) {
|
||||||
|
textLayer.setTextContent(textContent);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
setupAnnotations(this.pdfPage, this.viewport);
|
setupAnnotations(this.pdfPage, this.viewport);
|
||||||
div.setAttribute('data-loaded', true);
|
div.setAttribute('data-loaded', true);
|
||||||
};
|
};
|
||||||
@ -1841,13 +1840,18 @@ var CustomStyle = (function CustomStyleClosure() {
|
|||||||
var TextLayerBuilder = function textLayerBuilder(textLayerDiv) {
|
var TextLayerBuilder = function textLayerBuilder(textLayerDiv) {
|
||||||
var textLayerFrag = document.createDocumentFragment();
|
var textLayerFrag = document.createDocumentFragment();
|
||||||
this.textLayerDiv = textLayerDiv;
|
this.textLayerDiv = textLayerDiv;
|
||||||
|
this.layoutDone = false;
|
||||||
|
this.divContentDone = false;
|
||||||
|
|
||||||
this.beginLayout = function textLayerBuilderBeginLayout() {
|
this.beginLayout = function textLayerBuilderBeginLayout() {
|
||||||
this.textDivs = [];
|
this.textDivs = [];
|
||||||
this.textLayerQueue = [];
|
this.textLayerQueue = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
this.endLayout = function textLayerBuilderEndLayout() { };
|
this.endLayout = function textLayerBuilderEndLayout() {
|
||||||
|
this.layoutDone = true;
|
||||||
|
this.insertDivContent();
|
||||||
|
},
|
||||||
|
|
||||||
this.renderLayer = function textLayerBuilderRenderLayer() {
|
this.renderLayer = function textLayerBuilderRenderLayer() {
|
||||||
var self = this;
|
var self = this;
|
||||||
@ -1916,9 +1920,16 @@ var TextLayerBuilder = function textLayerBuilder(textLayerDiv) {
|
|||||||
this.textDivs.push(textDiv);
|
this.textDivs.push(textDiv);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.setTextContent = function textLayerBuilderSetTextContent(textContent) {
|
this.insertDivContent = function textLayerUpdateTextContent() {
|
||||||
// When calling this function, we assume rendering the textDivs has finished
|
// Only set the content of the divs once layout has finished, the content
|
||||||
|
// for the divs is available and content is not yet set on the divs.
|
||||||
|
if (!this.layoutDone || this.divContentDone || !this.textContent)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this.divContentDone = true;
|
||||||
|
|
||||||
var textDivs = this.textDivs;
|
var textDivs = this.textDivs;
|
||||||
|
var textContent = this.textContent;
|
||||||
|
|
||||||
for (var i = 0; i < textContent.length; i++) {
|
for (var i = 0; i < textContent.length; i++) {
|
||||||
var textDiv = textDivs[i];
|
var textDiv = textDivs[i];
|
||||||
@ -1930,6 +1941,11 @@ var TextLayerBuilder = function textLayerBuilder(textLayerDiv) {
|
|||||||
|
|
||||||
this.setupRenderLayoutTimer();
|
this.setupRenderLayoutTimer();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.setTextContent = function textLayerBuilderSetTextContent(textContent) {
|
||||||
|
this.textContent = textContent;
|
||||||
|
this.insertDivContent();
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', function webViewerLoad(evt) {
|
document.addEventListener('DOMContentLoaded', function webViewerLoad(evt) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user