Merge pull request #8194 from Snuffleupagus/getTextContent-use-proper-handler

Use a proper `MessageHandler` for `PartialEvaluator.getTextContent` to avoid errors for fonts relying on built-in CMap files (PR 8064 follow-up)
This commit is contained in:
Yury Delendik 2017-03-25 17:04:03 -05:00 committed by GitHub
commit b7ba44b530
5 changed files with 22 additions and 21 deletions

View File

@ -310,14 +310,9 @@ var Page = (function PageClosure() {
}); });
}, },
extractTextContent: function Page_extractTextContent(task, extractTextContent: function Page_extractTextContent(handler, task,
normalizeWhitespace, normalizeWhitespace,
combineTextItems) { combineTextItems) {
var handler = {
on: function nullHandlerOn() {},
send: function nullHandlerSend() {}
};
var self = this; var self = this;
var pdfManager = this.pdfManager; var pdfManager = this.pdfManager;

View File

@ -906,7 +906,7 @@ var WorkerMessageHandler = {
startWorkerTask(task); startWorkerTask(task);
var pageNum = pageIndex + 1; var pageNum = pageIndex + 1;
var start = Date.now(); var start = Date.now();
return page.extractTextContent(task, normalizeWhitespace, return page.extractTextContent(handler, task, normalizeWhitespace,
combineTextItems).then( combineTextItems).then(
function(textContent) { function(textContent) {
finishWorkerTask(task); finishWorkerTask(task);

View File

@ -76,15 +76,17 @@ var DOMCMapReaderFactory = (function DOMCMapReaderFactoryClosure() {
DOMCMapReaderFactory.prototype = { DOMCMapReaderFactory.prototype = {
fetch: function(params) { fetch: function(params) {
if (!params.name) { var name = params.name;
if (!name) {
return Promise.reject(new Error('CMap name must be specified.')); return Promise.reject(new Error('CMap name must be specified.'));
} }
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
var url = this.baseUrl + params.name; var url = this.baseUrl + name + (this.isCompressed ? '.bcmap' : '');
var request = new XMLHttpRequest(); var request = new XMLHttpRequest();
request.open('GET', url, true);
if (this.isCompressed) { if (this.isCompressed) {
url += '.bcmap';
request.responseType = 'arraybuffer'; request.responseType = 'arraybuffer';
} }
request.onreadystatechange = function () { request.onreadystatechange = function () {
@ -105,12 +107,11 @@ var DOMCMapReaderFactory = (function DOMCMapReaderFactoryClosure() {
return; return;
} }
reject(new Error('Unable to load ' + reject(new Error('Unable to load ' +
(this.isCompressed ? 'binary' : '') + (this.isCompressed ? 'binary ' : '') +
' CMap at: ' + url)); 'CMap at: ' + url));
} }
}.bind(this); }.bind(this);
request.open('GET', url, true);
request.send(null); request.send(null);
}.bind(this)); }.bind(this));
}, },

View File

@ -2757,10 +2757,17 @@
"md5": "797093d67c4d4d4231ac6e1fb66bf6c3", "md5": "797093d67c4d4d4231ac6e1fb66bf6c3",
"rounds": 1, "rounds": 1,
"link": true, "link": true,
"firstPage": 1,
"lastPage": 1, "lastPage": 1,
"type": "eq" "type": "eq"
}, },
{ "id": "mao-text",
"file": "pdfs/mao.pdf",
"md5": "797093d67c4d4d4231ac6e1fb66bf6c3",
"rounds": 1,
"link": true,
"lastPage": 1,
"type": "text"
},
{ "id": "noembed-identity", { "id": "noembed-identity",
"file": "pdfs/noembed-identity.pdf", "file": "pdfs/noembed-identity.pdf",
"md5": "05d3803b6c22451e18cb60d8d8c75c0c", "md5": "05d3803b6c22451e18cb60d8d8c75c0c",

View File

@ -35,21 +35,19 @@ var NodeCMapReaderFactory = (function NodeCMapReaderFactoryClosure() {
NodeCMapReaderFactory.prototype = { NodeCMapReaderFactory.prototype = {
fetch: function(params) { fetch: function(params) {
if (!params.name) { var name = params.name;
if (!name) {
return Promise.reject(new Error('CMap name must be specified.')); return Promise.reject(new Error('CMap name must be specified.'));
} }
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
var url = this.baseUrl + params.name; var url = this.baseUrl + name + (this.isCompressed ? '.bcmap' : '');
var fs = require('fs'); var fs = require('fs');
if (this.isCompressed) {
url += '.bcmap';
}
fs.readFile(url, function (error, data) { fs.readFile(url, function (error, data) {
if (error || !data) { if (error || !data) {
reject(new Error('Unable to load ' + reject(new Error('Unable to load ' +
(this.isCompressed ? 'binary' : '') + (this.isCompressed ? 'binary ' : '') +
' CMap at: ' + url)); 'CMap at: ' + url));
return; return;
} }
resolve({ resolve({