Merge branch 'master' of https://github.com/andreasgal/pdf.js.git into charstoglyphs
Conflicts: fonts.js
This commit is contained in:
commit
40e0cb40a6
@ -1,4 +1,4 @@
|
|||||||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
52
fonts.js
52
fonts.js
@ -1,4 +1,4 @@
|
|||||||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
@ -434,7 +434,7 @@ var Font = (function Font() {
|
|||||||
|
|
||||||
// Use 'name' instead of 'fontName' here because the original
|
// Use 'name' instead of 'fontName' here because the original
|
||||||
// name ArialBlack for example will be replaced by Helvetica.
|
// name ArialBlack for example will be replaced by Helvetica.
|
||||||
this.black = (name.search(/Black/g) != -1)
|
this.black = (name.search(/Black/g) != -1);
|
||||||
|
|
||||||
this.loadedName = fontName.split('-')[0];
|
this.loadedName = fontName.split('-')[0];
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
@ -986,7 +986,7 @@ var Font = (function Font() {
|
|||||||
font.pos = (font.start ? font.start : 0) + header.offset;
|
font.pos = (font.start ? font.start : 0) + header.offset;
|
||||||
font.pos += header.length - 2;
|
font.pos += header.length - 2;
|
||||||
var numOfMetrics = int16(font.getBytes(2));
|
var numOfMetrics = int16(font.getBytes(2));
|
||||||
|
|
||||||
var numOfSidebearings = numGlyphs - numOfMetrics;
|
var numOfSidebearings = numGlyphs - numOfMetrics;
|
||||||
var numMissing = numOfSidebearings -
|
var numMissing = numOfSidebearings -
|
||||||
((hmtx.length - numOfMetrics * 4) >> 1);
|
((hmtx.length - numOfMetrics * 4) >> 1);
|
||||||
@ -1056,7 +1056,7 @@ var Font = (function Font() {
|
|||||||
|
|
||||||
// Ensure the [h/v]mtx tables contains the advance width and
|
// Ensure the [h/v]mtx tables contains the advance width and
|
||||||
// sidebearings information for numGlyphs in the maxp table
|
// sidebearings information for numGlyphs in the maxp table
|
||||||
font.pos = (font.start ? font.start : 0) + maxp.offset;
|
font.pos = (font.start || 0) + maxp.offset;
|
||||||
var version = int16(font.getBytes(4));
|
var version = int16(font.getBytes(4));
|
||||||
var numGlyphs = int16(font.getBytes(2));
|
var numGlyphs = int16(font.getBytes(2));
|
||||||
|
|
||||||
@ -1165,7 +1165,7 @@ var Font = (function Font() {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
};
|
}
|
||||||
|
|
||||||
// The offsets object holds at the same time a representation of where
|
// The offsets object holds at the same time a representation of where
|
||||||
// to write the table entry information about a table and another offset
|
// to write the table entry information about a table and another offset
|
||||||
@ -1347,7 +1347,7 @@ var Font = (function Font() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Enter the translated string into the cache
|
// Enter the translated string into the cache
|
||||||
return charsCache[chars] = glyphs;
|
return (charsCache[chars] = glyphs);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1380,7 +1380,7 @@ var Type1Parser = function() {
|
|||||||
r = ((value + r) * c1 + c2) & ((1 << 16) - 1);
|
r = ((value + r) * c1 + c2) & ((1 << 16) - 1);
|
||||||
}
|
}
|
||||||
return decryptedString.slice(discardNumber);
|
return decryptedString.slice(discardNumber);
|
||||||
};
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CharStrings are encoded following the the CharString Encoding sequence
|
* CharStrings are encoded following the the CharString Encoding sequence
|
||||||
@ -1583,7 +1583,7 @@ var Type1Parser = function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return { charstring: charstring, width: width, lsb: lsb };
|
return { charstring: charstring, width: width, lsb: lsb };
|
||||||
};
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns an object containing a Subrs array and a CharStrings
|
* Returns an object containing a Subrs array and a CharStrings
|
||||||
@ -1603,7 +1603,7 @@ var Type1Parser = function() {
|
|||||||
for (var i = 0; i < array.length; i++)
|
for (var i = 0; i < array.length; i++)
|
||||||
array[i] = parseFloat(array[i] || 0);
|
array[i] = parseFloat(array[i] || 0);
|
||||||
return array;
|
return array;
|
||||||
};
|
}
|
||||||
|
|
||||||
function readNumber(str, index) {
|
function readNumber(str, index) {
|
||||||
while (str[index] == ' ')
|
while (str[index] == ' ')
|
||||||
@ -1616,11 +1616,11 @@ var Type1Parser = function() {
|
|||||||
count++;
|
count++;
|
||||||
|
|
||||||
return parseFloat(str.substr(start, count) || 0);
|
return parseFloat(str.substr(start, count) || 0);
|
||||||
};
|
}
|
||||||
|
|
||||||
function isSeparator(c) {
|
function isSeparator(c) {
|
||||||
return c == ' ' || c == '\n' || c == '\x0d';
|
return c == ' ' || c == '\n' || c == '\x0d';
|
||||||
};
|
}
|
||||||
|
|
||||||
this.extractFontProgram = function t1_extractFontProgram(stream) {
|
this.extractFontProgram = function t1_extractFontProgram(stream) {
|
||||||
var eexec = decrypt(stream, kEexecEncryptionKey, 4);
|
var eexec = decrypt(stream, kEexecEncryptionKey, 4);
|
||||||
@ -1745,7 +1745,7 @@ var Type1Parser = function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return program;
|
return program;
|
||||||
},
|
};
|
||||||
|
|
||||||
this.extractFontHeader = function t1_extractFontHeader(stream, properties) {
|
this.extractFontHeader = function t1_extractFontHeader(stream, properties) {
|
||||||
var headerString = '';
|
var headerString = '';
|
||||||
@ -1797,7 +1797,8 @@ var Type1Parser = function() {
|
|||||||
if ('undefined' == typeof(properties.differences[index])) {
|
if ('undefined' == typeof(properties.differences[index])) {
|
||||||
var mapping = properties.encoding[index] || {};
|
var mapping = properties.encoding[index] || {};
|
||||||
mapping.unicode = GlyphsUnicode[glyph] || index;
|
mapping.unicode = GlyphsUnicode[glyph] || index;
|
||||||
properties.glyphs[glyph] = properties.encoding[index] = mapping;
|
properties.glyphs[glyph] = properties.encoding[index] =
|
||||||
|
mapping;
|
||||||
}
|
}
|
||||||
getToken(); // read the in 'put'
|
getToken(); // read the in 'put'
|
||||||
}
|
}
|
||||||
@ -2143,7 +2144,7 @@ CFF.prototype = {
|
|||||||
'globalSubrs': this.createCFFIndexHeader([]),
|
'globalSubrs': this.createCFFIndexHeader([]),
|
||||||
|
|
||||||
'charset': (function charset(self) {
|
'charset': (function charset(self) {
|
||||||
var charset = '\x00'; // Encoding
|
var charsetString = '\x00'; // Encoding
|
||||||
|
|
||||||
var count = glyphs.length;
|
var count = glyphs.length;
|
||||||
for (var i = 0; i < count; i++) {
|
for (var i = 0; i < count; i++) {
|
||||||
@ -2155,9 +2156,9 @@ CFF.prototype = {
|
|||||||
if (index == -1)
|
if (index == -1)
|
||||||
index = 0;
|
index = 0;
|
||||||
|
|
||||||
charset += String.fromCharCode(index >> 8, index & 0xff);
|
charsetString += String.fromCharCode(index >> 8, index & 0xff);
|
||||||
}
|
}
|
||||||
return charset;
|
return charsetString;
|
||||||
})(this),
|
})(this),
|
||||||
|
|
||||||
'charstrings': this.createCFFIndexHeader([[0x8B, 0x0E]].concat(glyphs),
|
'charstrings': this.createCFFIndexHeader([[0x8B, 0x0E]].concat(glyphs),
|
||||||
@ -2224,7 +2225,7 @@ var Type2CFF = (function() {
|
|||||||
this.properties = properties;
|
this.properties = properties;
|
||||||
|
|
||||||
this.data = this.parse();
|
this.data = this.parse();
|
||||||
};
|
}
|
||||||
|
|
||||||
constructor.prototype = {
|
constructor.prototype = {
|
||||||
parse: function cff_parse() {
|
parse: function cff_parse() {
|
||||||
@ -2447,7 +2448,7 @@ var Type2CFF = (function() {
|
|||||||
case 21:
|
case 21:
|
||||||
dict['nominalWidthX'] = value[0];
|
dict['nominalWidthX'] = value[0];
|
||||||
default:
|
default:
|
||||||
TODO('interpret top dict key');
|
TODO('interpret top dict key: ' + key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return dict;
|
return dict;
|
||||||
@ -2559,7 +2560,7 @@ var Type2CFF = (function() {
|
|||||||
error('Incorrect byte');
|
error('Incorrect byte');
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
};
|
}
|
||||||
|
|
||||||
function parseFloatOperand() {
|
function parseFloatOperand() {
|
||||||
var str = '';
|
var str = '';
|
||||||
@ -2581,7 +2582,7 @@ var Type2CFF = (function() {
|
|||||||
str += lookup[b2];
|
str += lookup[b2];
|
||||||
}
|
}
|
||||||
return parseFloat(str);
|
return parseFloat(str);
|
||||||
};
|
}
|
||||||
|
|
||||||
var operands = [];
|
var operands = [];
|
||||||
var entries = [];
|
var entries = [];
|
||||||
@ -2607,15 +2608,14 @@ var Type2CFF = (function() {
|
|||||||
parseIndex: function cff_parseIndex(pos) {
|
parseIndex: function cff_parseIndex(pos) {
|
||||||
var bytes = this.bytes;
|
var bytes = this.bytes;
|
||||||
var count = bytes[pos++] << 8 | bytes[pos++];
|
var count = bytes[pos++] << 8 | bytes[pos++];
|
||||||
if (count == 0) {
|
var offsets = [];
|
||||||
var offsets = [];
|
var end = pos;
|
||||||
var end = pos;
|
|
||||||
} else {
|
if (count != 0) {
|
||||||
var offsetSize = bytes[pos++];
|
var offsetSize = bytes[pos++];
|
||||||
// add 1 for offset to determine size of last object
|
// add 1 for offset to determine size of last object
|
||||||
var startPos = pos + ((count + 1) * offsetSize) - 1;
|
var startPos = pos + ((count + 1) * offsetSize) - 1;
|
||||||
|
|
||||||
var offsets = [];
|
|
||||||
for (var i = 0, ii = count + 1; i < ii; ++i) {
|
for (var i = 0, ii = count + 1; i < ii; ++i) {
|
||||||
var offset = 0;
|
var offset = 0;
|
||||||
for (var j = 0; j < offsetSize; ++j) {
|
for (var j = 0; j < offsetSize; ++j) {
|
||||||
@ -2624,7 +2624,7 @@ var Type2CFF = (function() {
|
|||||||
}
|
}
|
||||||
offsets.push(startPos + offset);
|
offsets.push(startPos + offset);
|
||||||
}
|
}
|
||||||
var end = offsets[count];
|
end = offsets[count];
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||||
|
|
||||||
var Metrics = {
|
var Metrics = {
|
||||||
'Courier': 600,
|
'Courier': 600,
|
||||||
'Courier-Bold': 600,
|
'Courier-Bold': 600,
|
||||||
|
124
pdf.js
124
pdf.js
@ -710,9 +710,9 @@ var PredictorStream = (function() {
|
|||||||
var bits = this.bits = params.get('BitsPerComponent') || 8;
|
var bits = this.bits = params.get('BitsPerComponent') || 8;
|
||||||
var columns = this.columns = params.get('Columns') || 1;
|
var columns = this.columns = params.get('Columns') || 1;
|
||||||
|
|
||||||
var pixBytes = this.pixBytes = (colors * bits + 7) >> 3;
|
this.pixBytes = (colors * bits + 7) >> 3;
|
||||||
// add an extra pixByte to represent the pixel left of column 0
|
// add an extra pixByte to represent the pixel left of column 0
|
||||||
var rowBytes = this.rowBytes = (columns * colors * bits + 7) >> 3;
|
this.rowBytes = (columns * colors * bits + 7) >> 3;
|
||||||
|
|
||||||
DecodeStream.call(this);
|
DecodeStream.call(this);
|
||||||
return this;
|
return this;
|
||||||
@ -722,7 +722,6 @@ var PredictorStream = (function() {
|
|||||||
|
|
||||||
constructor.prototype.readBlockTiff = function() {
|
constructor.prototype.readBlockTiff = function() {
|
||||||
var rowBytes = this.rowBytes;
|
var rowBytes = this.rowBytes;
|
||||||
var pixBytes = this.pixBytes;
|
|
||||||
|
|
||||||
var bufferLength = this.bufferLength;
|
var bufferLength = this.bufferLength;
|
||||||
var buffer = this.ensureBuffer(bufferLength + rowBytes);
|
var buffer = this.ensureBuffer(bufferLength + rowBytes);
|
||||||
@ -733,16 +732,18 @@ var PredictorStream = (function() {
|
|||||||
|
|
||||||
var rawBytes = this.stream.getBytes(rowBytes);
|
var rawBytes = this.stream.getBytes(rowBytes);
|
||||||
|
|
||||||
|
var inbuf = 0, outbuf = 0;
|
||||||
|
var inbits = 0, outbits = 0;
|
||||||
|
|
||||||
if (bits === 1) {
|
if (bits === 1) {
|
||||||
var inbuf = 0;
|
|
||||||
for (var i = 0; i < rowBytes; ++i) {
|
for (var i = 0; i < rowBytes; ++i) {
|
||||||
var c = rawBytes[i];
|
var c = rawBytes[i];
|
||||||
inBuf = (inBuf << 8) | c;
|
inbuf = (inbuf << 8) | c;
|
||||||
// bitwise addition is exclusive or
|
// bitwise addition is exclusive or
|
||||||
// first shift inBuf and then add
|
// first shift inbuf and then add
|
||||||
currentRow[i] = (c ^ (inBuf >> colors)) & 0xFF;
|
currentRow[i] = (c ^ (inbuf >> colors)) & 0xFF;
|
||||||
// truncate inBuf (assumes colors < 16)
|
// truncate inbuf (assumes colors < 16)
|
||||||
inBuf &= 0xFFFF;
|
inbuf &= 0xFFFF;
|
||||||
}
|
}
|
||||||
} else if (bits === 8) {
|
} else if (bits === 8) {
|
||||||
for (var i = 0; i < colors; ++i)
|
for (var i = 0; i < colors; ++i)
|
||||||
@ -752,8 +753,6 @@ var PredictorStream = (function() {
|
|||||||
} else {
|
} else {
|
||||||
var compArray = new Uint8Array(colors + 1);
|
var compArray = new Uint8Array(colors + 1);
|
||||||
var bitMask = (1 << bits) - 1;
|
var bitMask = (1 << bits) - 1;
|
||||||
var inbuf = 0, outbut = 0;
|
|
||||||
var inbits = 0, outbits = 0;
|
|
||||||
var j = 0, k = 0;
|
var j = 0, k = 0;
|
||||||
var columns = this.columns;
|
var columns = this.columns;
|
||||||
for (var i = 0; i < columns; ++i) {
|
for (var i = 0; i < columns; ++i) {
|
||||||
@ -877,8 +876,8 @@ var JpegStream = (function() {
|
|||||||
|
|
||||||
function fixYcckImage(bytes) {
|
function fixYcckImage(bytes) {
|
||||||
// Inserting 'EMBED' marker after JPEG signature
|
// Inserting 'EMBED' marker after JPEG signature
|
||||||
var embedMarker = new Uint8Array([0xFF, 0xEC, 0, 8,
|
var embedMarker = new Uint8Array([0xFF, 0xEC, 0, 8, 0x45, 0x4D, 0x42, 0x45,
|
||||||
0x45, 0x4D, 0x42, 0x45, 0x44, 0]);
|
0x44, 0]);
|
||||||
var newBytes = new Uint8Array(bytes.length + embedMarker.length);
|
var newBytes = new Uint8Array(bytes.length + embedMarker.length);
|
||||||
newBytes.set(bytes, embedMarker.length);
|
newBytes.set(bytes, embedMarker.length);
|
||||||
// copy JPEG header
|
// copy JPEG header
|
||||||
@ -1015,11 +1014,11 @@ var Ascii85Stream = (function() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var bufferLength = this.bufferLength;
|
var bufferLength = this.bufferLength, buffer;
|
||||||
|
|
||||||
// special code for z
|
// special code for z
|
||||||
if (c == zCode) {
|
if (c == zCode) {
|
||||||
var buffer = this.ensureBuffer(bufferLength + 4);
|
buffer = this.ensureBuffer(bufferLength + 4);
|
||||||
for (var i = 0; i < 4; ++i)
|
for (var i = 0; i < 4; ++i)
|
||||||
buffer[bufferLength + i] = 0;
|
buffer[bufferLength + i] = 0;
|
||||||
this.bufferLength += 4;
|
this.bufferLength += 4;
|
||||||
@ -1036,7 +1035,7 @@ var Ascii85Stream = (function() {
|
|||||||
if (!c || c == tildaCode)
|
if (!c || c == tildaCode)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
var buffer = this.ensureBuffer(bufferLength + i - 1);
|
buffer = this.ensureBuffer(bufferLength + i - 1);
|
||||||
this.bufferLength += i - 1;
|
this.bufferLength += i - 1;
|
||||||
|
|
||||||
// partial ending;
|
// partial ending;
|
||||||
@ -1874,7 +1873,7 @@ var CCITTFaxStream = (function() {
|
|||||||
for (var i = 0; i < 4; ++i) {
|
for (var i = 0; i < 4; ++i) {
|
||||||
code1 = this.lookBits(12);
|
code1 = this.lookBits(12);
|
||||||
if (code1 != 1)
|
if (code1 != 1)
|
||||||
warning('bad rtc code');
|
warn('bad rtc code: ' + code1);
|
||||||
this.eatBits(12);
|
this.eatBits(12);
|
||||||
if (this.encoding > 0) {
|
if (this.encoding > 0) {
|
||||||
this.lookBits(1);
|
this.lookBits(1);
|
||||||
@ -2013,7 +2012,7 @@ var CCITTFaxStream = (function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (var n = 11; n <= 12; ++n) {
|
for (var n = 11; n <= 12; ++n) {
|
||||||
code == this.lookBits(n);
|
code = this.lookBits(n);
|
||||||
if (code == EOF)
|
if (code == EOF)
|
||||||
return 1;
|
return 1;
|
||||||
if (n < 12)
|
if (n < 12)
|
||||||
@ -2437,11 +2436,6 @@ var Lexer = (function() {
|
|||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // fx
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // fx
|
||||||
];
|
];
|
||||||
|
|
||||||
var MIN_INT = (1 << 31) | 0;
|
|
||||||
var MAX_INT = (MIN_INT - 1) | 0;
|
|
||||||
var MIN_UINT = 0;
|
|
||||||
var MAX_UINT = ((1 << 30) * 4) - 1;
|
|
||||||
|
|
||||||
function ToHexDigit(ch) {
|
function ToHexDigit(ch) {
|
||||||
if (ch >= '0' && ch <= '9')
|
if (ch >= '0' && ch <= '9')
|
||||||
return ch.charCodeAt(0) - 48;
|
return ch.charCodeAt(0) - 48;
|
||||||
@ -3107,7 +3101,6 @@ var XRef = (function() {
|
|||||||
},
|
},
|
||||||
readXRefStream: function readXRefStream(stream) {
|
readXRefStream: function readXRefStream(stream) {
|
||||||
var streamParameters = stream.parameters;
|
var streamParameters = stream.parameters;
|
||||||
var length = streamParameters.get('Length');
|
|
||||||
var byteWidths = streamParameters.get('W');
|
var byteWidths = streamParameters.get('W');
|
||||||
var range = streamParameters.get('Index');
|
var range = streamParameters.get('Index');
|
||||||
if (!range)
|
if (!range)
|
||||||
@ -3356,7 +3349,7 @@ var Page = (function() {
|
|||||||
}
|
}
|
||||||
return shadow(this, 'rotate', rotate);
|
return shadow(this, 'rotate', rotate);
|
||||||
},
|
},
|
||||||
startRendering: function(canvasCtx, continuation, onerror) {
|
startRendering: function(canvasCtx, continuation) {
|
||||||
var self = this;
|
var self = this;
|
||||||
var stats = self.stats;
|
var stats = self.stats;
|
||||||
stats.compile = stats.fonts = stats.render = 0;
|
stats.compile = stats.fonts = stats.render = 0;
|
||||||
@ -3754,8 +3747,6 @@ var PDFDoc = (function() {
|
|||||||
return shadow(this, 'numPages', num);
|
return shadow(this, 'numPages', num);
|
||||||
},
|
},
|
||||||
getPage: function(n) {
|
getPage: function(n) {
|
||||||
var linearization = this.linearization;
|
|
||||||
// assert(!linearization, "linearized page access not implemented");
|
|
||||||
return this.catalog.getPage(n);
|
return this.catalog.getPage(n);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -4141,7 +4132,7 @@ var PartialEvaluator = (function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
constructor.prototype = {
|
constructor.prototype = {
|
||||||
eval: function(stream, xref, resources, fonts, images) {
|
evaluate: function(stream, xref, resources, fonts, images) {
|
||||||
resources = xref.fetchIfRef(resources) || new Dict();
|
resources = xref.fetchIfRef(resources) || new Dict();
|
||||||
var xobjs = xref.fetchIfRef(resources.get('XObject')) || new Dict();
|
var xobjs = xref.fetchIfRef(resources.get('XObject')) || new Dict();
|
||||||
var patterns = xref.fetchIfRef(resources.get('Pattern')) || new Dict();
|
var patterns = xref.fetchIfRef(resources.get('Pattern')) || new Dict();
|
||||||
@ -4165,8 +4156,9 @@ var PartialEvaluator = (function() {
|
|||||||
var dict = IsStream(pattern) ? pattern.dict : pattern;
|
var dict = IsStream(pattern) ? pattern.dict : pattern;
|
||||||
var typeNum = dict.get('PatternType');
|
var typeNum = dict.get('PatternType');
|
||||||
if (typeNum == 1) {
|
if (typeNum == 1) {
|
||||||
patternName.code = this.eval(pattern, xref,
|
patternName.code = this.evaluate(pattern, xref,
|
||||||
dict.get('Resources'), fonts);
|
dict.get('Resources'),
|
||||||
|
fonts);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4185,8 +4177,9 @@ var PartialEvaluator = (function() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if ('Form' == type.name) {
|
if ('Form' == type.name) {
|
||||||
args[0].code = this.eval(xobj, xref, xobj.dict.get('Resources'),
|
args[0].code = this.evaluate(xobj, xref,
|
||||||
fonts, images);
|
xobj.dict.get('Resources'), fonts,
|
||||||
|
images);
|
||||||
}
|
}
|
||||||
if (xobj instanceof JpegStream)
|
if (xobj instanceof JpegStream)
|
||||||
images.bind(xobj); // monitoring image load
|
images.bind(xobj); // monitoring image load
|
||||||
@ -4224,7 +4217,7 @@ var PartialEvaluator = (function() {
|
|||||||
},
|
},
|
||||||
|
|
||||||
extractEncoding: function(dict, xref, properties) {
|
extractEncoding: function(dict, xref, properties) {
|
||||||
var type = properties.type;
|
var type = properties.type, encoding;
|
||||||
if (properties.composite) {
|
if (properties.composite) {
|
||||||
if (type == 'CIDFontType2') {
|
if (type == 'CIDFontType2') {
|
||||||
var defaultWidth = xref.fetchIfRef(dict.get('DW')) || 1000;
|
var defaultWidth = xref.fetchIfRef(dict.get('DW')) || 1000;
|
||||||
@ -4261,7 +4254,7 @@ var PartialEvaluator = (function() {
|
|||||||
var glyphsData = glyphsStream.getBytes(0);
|
var glyphsData = glyphsStream.getBytes(0);
|
||||||
|
|
||||||
// Glyph ids are big-endian 2-byte values
|
// Glyph ids are big-endian 2-byte values
|
||||||
var encoding = properties.encoding;
|
encoding = properties.encoding;
|
||||||
|
|
||||||
// Set encoding 0 to later verify the font has an encoding
|
// Set encoding 0 to later verify the font has an encoding
|
||||||
encoding[0] = { unicode: 0, width: 0 };
|
encoding[0] = { unicode: 0, width: 0 };
|
||||||
@ -4278,7 +4271,7 @@ var PartialEvaluator = (function() {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
} else if (type == 'CIDFontType0') {
|
} else if (type == 'CIDFontType0') {
|
||||||
var encoding = xref.fetchIfRef(dict.get('Encoding'));
|
encoding = xref.fetchIfRef(dict.get('Encoding'));
|
||||||
if (IsName(encoding)) {
|
if (IsName(encoding)) {
|
||||||
// Encoding is a predefined CMap
|
// Encoding is a predefined CMap
|
||||||
if (encoding.name == 'Identity-H') {
|
if (encoding.name == 'Identity-H') {
|
||||||
@ -4299,7 +4292,7 @@ var PartialEvaluator = (function() {
|
|||||||
var map = properties.encoding;
|
var map = properties.encoding;
|
||||||
var baseEncoding = null;
|
var baseEncoding = null;
|
||||||
if (dict.has('Encoding')) {
|
if (dict.has('Encoding')) {
|
||||||
var encoding = xref.fetchIfRef(dict.get('Encoding'));
|
encoding = xref.fetchIfRef(dict.get('Encoding'));
|
||||||
if (IsDict(encoding)) {
|
if (IsDict(encoding)) {
|
||||||
var baseName = encoding.get('BaseEncoding');
|
var baseName = encoding.get('BaseEncoding');
|
||||||
if (baseName)
|
if (baseName)
|
||||||
@ -4685,7 +4678,7 @@ var CanvasGraphics = (function() {
|
|||||||
|
|
||||||
compile: function(stream, xref, resources, fonts, images) {
|
compile: function(stream, xref, resources, fonts, images) {
|
||||||
var pe = new PartialEvaluator();
|
var pe = new PartialEvaluator();
|
||||||
return pe.eval(stream, xref, resources, fonts, images);
|
return pe.evaluate(stream, xref, resources, fonts, images);
|
||||||
},
|
},
|
||||||
|
|
||||||
execute: function(code, xref, resources) {
|
execute: function(code, xref, resources) {
|
||||||
@ -4724,13 +4717,13 @@ var CanvasGraphics = (function() {
|
|||||||
this.ctx.mozDashOffset = dashPhase;
|
this.ctx.mozDashOffset = dashPhase;
|
||||||
},
|
},
|
||||||
setRenderingIntent: function(intent) {
|
setRenderingIntent: function(intent) {
|
||||||
TODO('set rendering intent');
|
TODO('set rendering intent: ' + intent);
|
||||||
},
|
},
|
||||||
setFlatness: function(flatness) {
|
setFlatness: function(flatness) {
|
||||||
TODO('set flatness');
|
TODO('set flatness: ' + flatness);
|
||||||
},
|
},
|
||||||
setGState: function(dictName) {
|
setGState: function(dictName) {
|
||||||
TODO('set graphics state from dict');
|
TODO('set graphics state from dict: ' + dictName);
|
||||||
},
|
},
|
||||||
save: function() {
|
save: function() {
|
||||||
this.ctx.save();
|
this.ctx.save();
|
||||||
@ -4925,10 +4918,10 @@ var CanvasGraphics = (function() {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
setTextRenderingMode: function(mode) {
|
setTextRenderingMode: function(mode) {
|
||||||
TODO('text rendering mode');
|
TODO('text rendering mode: ' + mode);
|
||||||
},
|
},
|
||||||
setTextRise: function(rise) {
|
setTextRise: function(rise) {
|
||||||
TODO('text rise');
|
TODO('text rise: ' + rise);
|
||||||
},
|
},
|
||||||
moveText: function(x, y) {
|
moveText: function(x, y) {
|
||||||
this.current.x = this.current.lineX += x;
|
this.current.x = this.current.lineX += x;
|
||||||
@ -5022,10 +5015,13 @@ var CanvasGraphics = (function() {
|
|||||||
|
|
||||||
// Type3 fonts
|
// Type3 fonts
|
||||||
setCharWidth: function(xWidth, yWidth) {
|
setCharWidth: function(xWidth, yWidth) {
|
||||||
TODO("type 3 fonts ('d0' operator)");
|
TODO('type 3 fonts ("d0" operator) xWidth: ' + xWidth + ' yWidth: ' +
|
||||||
|
yWidth);
|
||||||
},
|
},
|
||||||
setCharWidthAndBounds: function(xWidth, yWidth, llx, lly, urx, ury) {
|
setCharWidthAndBounds: function(xWidth, yWidth, llx, lly, urx, ury) {
|
||||||
TODO("type 3 fonts ('d1' operator)");
|
TODO('type 3 fonts ("d1" operator) xWidth: ' + xWidth + ' yWidth: ' +
|
||||||
|
yWidth + ' llx: ' + llx + ' lly: ' + lly + ' urx: ' + urx +
|
||||||
|
' ury ' + ury);
|
||||||
},
|
},
|
||||||
|
|
||||||
// Color
|
// Color
|
||||||
@ -5424,7 +5420,6 @@ var ColorSpace = (function() {
|
|||||||
var lookup = xref.fetchIfRef(cs[3]);
|
var lookup = xref.fetchIfRef(cs[3]);
|
||||||
return new IndexedCS(base, hiVal, lookup);
|
return new IndexedCS(base, hiVal, lookup);
|
||||||
case 'Separation':
|
case 'Separation':
|
||||||
var name = cs[1];
|
|
||||||
var alt = ColorSpace.parse(cs[2], xref, res);
|
var alt = ColorSpace.parse(cs[2], xref, res);
|
||||||
var tintFn = new PDFFunction(xref, xref.fetchIfRef(cs[3]));
|
var tintFn = new PDFFunction(xref, xref.fetchIfRef(cs[3]));
|
||||||
return new SeparationCS(alt, tintFn);
|
return new SeparationCS(alt, tintFn);
|
||||||
@ -5462,12 +5457,12 @@ var SeparationCS = (function() {
|
|||||||
var base = this.base;
|
var base = this.base;
|
||||||
var scale = 1 / ((1 << bits) - 1);
|
var scale = 1 / ((1 << bits) - 1);
|
||||||
|
|
||||||
var length = 3 * input.length;
|
var length = input.length;
|
||||||
var pos = 0;
|
var pos = 0;
|
||||||
|
|
||||||
var numComps = base.numComps;
|
var numComps = base.numComps;
|
||||||
var baseBuf = new Uint8Array(numComps * input.length);
|
var baseBuf = new Uint8Array(numComps * length);
|
||||||
for (var i = 0, ii = input.length; i < ii; ++i) {
|
for (var i = 0; i < length; ++i) {
|
||||||
var scaled = input[i] * scale;
|
var scaled = input[i] * scale;
|
||||||
var tinted = tintFn.func([scaled]);
|
var tinted = tintFn.func([scaled]);
|
||||||
for (var j = 0; j < numComps; ++j)
|
for (var j = 0; j < numComps; ++j)
|
||||||
@ -5773,8 +5768,6 @@ var DummyShading = (function() {
|
|||||||
var RadialAxialShading = (function() {
|
var RadialAxialShading = (function() {
|
||||||
function constructor(dict, matrix, xref, res, ctx) {
|
function constructor(dict, matrix, xref, res, ctx) {
|
||||||
this.matrix = matrix;
|
this.matrix = matrix;
|
||||||
var bbox = dict.get('BBox');
|
|
||||||
var background = dict.get('Background');
|
|
||||||
this.coordsArr = dict.get('Coords');
|
this.coordsArr = dict.get('Coords');
|
||||||
this.shadingType = dict.get('ShadingType');
|
this.shadingType = dict.get('ShadingType');
|
||||||
this.type = 'Pattern';
|
this.type = 'Pattern';
|
||||||
@ -5832,15 +5825,17 @@ var RadialAxialShading = (function() {
|
|||||||
getPattern: function() {
|
getPattern: function() {
|
||||||
var coordsArr = this.coordsArr;
|
var coordsArr = this.coordsArr;
|
||||||
var type = this.shadingType;
|
var type = this.shadingType;
|
||||||
|
var p0, p1, r0, r1;
|
||||||
if (type == 2) {
|
if (type == 2) {
|
||||||
var p0 = [coordsArr[0], coordsArr[1]];
|
p0 = [coordsArr[0], coordsArr[1]];
|
||||||
var p1 = [coordsArr[2], coordsArr[3]];
|
p1 = [coordsArr[2], coordsArr[3]];
|
||||||
} else if (type == 3) {
|
} else if (type == 3) {
|
||||||
var p0 = [coordsArr[0], coordsArr[1]];
|
p0 = [coordsArr[0], coordsArr[1]];
|
||||||
var p1 = [coordsArr[3], coordsArr[4]];
|
p1 = [coordsArr[3], coordsArr[4]];
|
||||||
var r0 = coordsArr[2], r1 = coordsArr[5];
|
r0 = coordsArr[2];
|
||||||
|
r1 = coordsArr[5];
|
||||||
} else {
|
} else {
|
||||||
error();
|
error('getPattern type unknown: ' + type);
|
||||||
}
|
}
|
||||||
|
|
||||||
var matrix = this.matrix;
|
var matrix = this.matrix;
|
||||||
@ -5863,11 +5858,11 @@ var RadialAxialShading = (function() {
|
|||||||
p1 = Util.applyTransform(p1, userMatrix);
|
p1 = Util.applyTransform(p1, userMatrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
var colorStops = this.colorStops;
|
var colorStops = this.colorStops, grad;
|
||||||
if (type == 2)
|
if (type == 2)
|
||||||
var grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]);
|
grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]);
|
||||||
else if (type == 3)
|
else if (type == 3)
|
||||||
var grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1);
|
grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1);
|
||||||
|
|
||||||
for (var i = 0, ii = colorStops.length; i < ii; ++i) {
|
for (var i = 0, ii = colorStops.length; i < ii; ++i) {
|
||||||
var c = colorStops[i];
|
var c = colorStops[i];
|
||||||
@ -6058,6 +6053,7 @@ var PDFImage = (function() {
|
|||||||
var bufferPos = 0;
|
var bufferPos = 0;
|
||||||
var output = bpc <= 8 ? new Uint8Array(length) :
|
var output = bpc <= 8 ? new Uint8Array(length) :
|
||||||
bpc <= 16 ? new Uint16Array(length) : new Uint32Array(length);
|
bpc <= 16 ? new Uint16Array(length) : new Uint32Array(length);
|
||||||
|
var rowComps = width * numComps;
|
||||||
|
|
||||||
if (bpc == 1) {
|
if (bpc == 1) {
|
||||||
var valueZero = 0, valueOne = 1;
|
var valueZero = 0, valueOne = 1;
|
||||||
@ -6065,7 +6061,6 @@ var PDFImage = (function() {
|
|||||||
valueZero = decodeMap[0] ? 1 : 0;
|
valueZero = decodeMap[0] ? 1 : 0;
|
||||||
valueOne = decodeMap[1] ? 1 : 0;
|
valueOne = decodeMap[1] ? 1 : 0;
|
||||||
}
|
}
|
||||||
var rowComps = width * numComps;
|
|
||||||
var mask = 0;
|
var mask = 0;
|
||||||
var buf = 0;
|
var buf = 0;
|
||||||
|
|
||||||
@ -6087,8 +6082,7 @@ var PDFImage = (function() {
|
|||||||
} else {
|
} else {
|
||||||
if (decodeMap != null)
|
if (decodeMap != null)
|
||||||
TODO('interpolate component values');
|
TODO('interpolate component values');
|
||||||
var rowComps = width * numComps;
|
var bits = 0, buf = 0;
|
||||||
var bits, buf;
|
|
||||||
for (var i = 0, ii = length; i < ii; ++i) {
|
for (var i = 0, ii = length; i < ii; ++i) {
|
||||||
if (i % rowComps == 0) {
|
if (i % rowComps == 0) {
|
||||||
buf = 0;
|
buf = 0;
|
||||||
@ -6293,14 +6287,14 @@ var PDFFunction = (function() {
|
|||||||
floor *= outputSize;
|
floor *= outputSize;
|
||||||
ceil *= outputSize;
|
ceil *= outputSize;
|
||||||
|
|
||||||
var output = [];
|
var output = [], v = 0;
|
||||||
for (var i = 0; i < outputSize; ++i) {
|
for (var i = 0; i < outputSize; ++i) {
|
||||||
if (ceil == floor) {
|
if (ceil == floor) {
|
||||||
var v = samples[ceil + i];
|
v = samples[ceil + i];
|
||||||
} else {
|
} else {
|
||||||
var low = samples[floor + i];
|
var low = samples[floor + i];
|
||||||
var high = samples[ceil + i];
|
var high = samples[ceil + i];
|
||||||
var v = low * scale + high * (1 - scale);
|
v = low * scale + high * (1 - scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
var i2 = i * 2;
|
var i2 = i * 2;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||||
|
|
||||||
// Checking if the typed arrays are supported
|
// Checking if the typed arrays are supported
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
Loading…
Reference in New Issue
Block a user