mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-19 14:48:08 +02:00
Adds cmyk jpg support. Treats the cmyk jpg as a regular stream.
This commit is contained in:
parent
234ec25351
commit
9bb2b881b0
8 changed files with 47 additions and 18 deletions
1
Makefile
1
Makefile
|
@ -33,6 +33,7 @@ PDF_JS_FILES = \
|
|||
pattern.js \
|
||||
stream.js \
|
||||
worker.js \
|
||||
../external/jpgjs/jpg.js \
|
||||
$(NULL)
|
||||
|
||||
# make server
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
<script type="text/javascript" src="../../src/pattern.js"></script>
|
||||
<script type="text/javascript" src="../../src/stream.js"></script>
|
||||
<script type="text/javascript" src="../../src/worker.js"></script>
|
||||
<script type="text/javascript" src="../../external/jpgjs/jpg.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
// Specify the main script used to create a new PDF.JS web worker.
|
||||
|
|
|
@ -546,7 +546,7 @@ var PDFDoc = (function pdfDoc() {
|
|||
switch (type) {
|
||||
case 'JpegStream':
|
||||
var IR = data[2];
|
||||
new JpegImage(id, IR, this.objs);
|
||||
new JpegImageLoader(id, IR, this.objs);
|
||||
break;
|
||||
case 'Font':
|
||||
var name = data[2];
|
||||
|
|
|
@ -179,7 +179,7 @@ var PartialEvaluator = (function partialEvaluator() {
|
|||
var w = dict.get('Width', 'W');
|
||||
var h = dict.get('Height', 'H');
|
||||
|
||||
if (image instanceof JpegStream) {
|
||||
if (image instanceof JpegStream && image.isNative) {
|
||||
var objId = 'img_' + uniquePrefix + (++self.objIdCounter);
|
||||
handler.send('obj', [objId, 'JpegStream', image.getIR()]);
|
||||
|
||||
|
|
12
src/image.js
12
src/image.js
|
@ -229,12 +229,12 @@ var PDFImage = (function pdfImage() {
|
|||
return constructor;
|
||||
})();
|
||||
|
||||
var JpegImage = (function jpegImage() {
|
||||
function JpegImage(objId, imageData, objs) {
|
||||
var JpegImageLoader = (function jpegImage() {
|
||||
function JpegImageLoader(objId, imageData, objs) {
|
||||
var src = 'data:image/jpeg;base64,' + window.btoa(imageData);
|
||||
|
||||
var img = new Image();
|
||||
img.onload = (function jpegImageOnload() {
|
||||
img.onload = (function jpegImageLoaderOnload() {
|
||||
this.loaded = true;
|
||||
|
||||
objs.resolve(objId, this);
|
||||
|
@ -246,12 +246,12 @@ var JpegImage = (function jpegImage() {
|
|||
this.domImage = img;
|
||||
}
|
||||
|
||||
JpegImage.prototype = {
|
||||
getImage: function jpegImageGetImage() {
|
||||
JpegImageLoader.prototype = {
|
||||
getImage: function jpegImageLoaderGetImage() {
|
||||
return this.domImage;
|
||||
}
|
||||
};
|
||||
|
||||
return JpegImage;
|
||||
return JpegImageLoader;
|
||||
})();
|
||||
|
||||
|
|
|
@ -793,20 +793,46 @@ var JpegStream = (function jpegStream() {
|
|||
// TODO: per poppler, some images may have 'junk' before that
|
||||
// need to be removed
|
||||
this.dict = dict;
|
||||
this.isNative = true;
|
||||
|
||||
if (isAdobeImage(bytes))
|
||||
bytes = fixAdobeImage(bytes);
|
||||
if (isAdobeImage(bytes)) {
|
||||
// when bug 674619 land, let's check if browser can do
|
||||
// normal cmyk and then we won't have to the following
|
||||
var cs = dict.get('ColorSpace');
|
||||
if (isName(cs) && cs.name === 'DeviceCMYK') {
|
||||
this.isNative = false;
|
||||
this.bytes = bytes;
|
||||
} else {
|
||||
bytes = fixAdobeImage(bytes);
|
||||
this.src = bytesToString(bytes);
|
||||
}
|
||||
} else {
|
||||
this.src = bytesToString(bytes);
|
||||
}
|
||||
|
||||
this.src = bytesToString(bytes);
|
||||
DecodeStream.call(this);
|
||||
}
|
||||
|
||||
constructor.prototype = {
|
||||
getIR: function jpegStreamGetIR() {
|
||||
return this.src;
|
||||
},
|
||||
getChar: function jpegStreamGetChar() {
|
||||
constructor.prototype = Object.create(DecodeStream.prototype);
|
||||
|
||||
constructor.prototype.ensureBuffer = function jpegStreamEnsureBuffer(req) {
|
||||
if (this.bufferLength)
|
||||
return;
|
||||
var jpegImage = new JpegImage();
|
||||
jpegImage.parse(this.bytes);
|
||||
var width = jpegImage.width;
|
||||
var height = jpegImage.height;
|
||||
var dataLength = width * height * 4;
|
||||
var data = new Uint8Array(dataLength);
|
||||
jpegImage.getData(data, width, height);
|
||||
this.buffer = data;
|
||||
this.bufferLength = data.length;
|
||||
};
|
||||
constructor.prototype.getIR = function jpegStreamGetIR() {
|
||||
return this.src;
|
||||
};
|
||||
constructor.prototype.getChar = function jpegStreamGetChar() {
|
||||
error('internal error: getChar is not valid on JpegStream');
|
||||
}
|
||||
};
|
||||
|
||||
return constructor;
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
<script type="text/javascript" src="/src/pattern.js"></script>
|
||||
<script type="text/javascript" src="/src/stream.js"></script>
|
||||
<script type="text/javascript" src="/src/worker.js"></script>
|
||||
<script type="text/javascript" src="/external/jpgjs/jpg.js"></script>
|
||||
<script type="text/javascript" src="driver.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<script type="text/javascript" src="../src/pattern.js"></script> <!-- PDFJSSCRIPT_REMOVE -->
|
||||
<script type="text/javascript" src="../src/stream.js"></script> <!-- PDFJSSCRIPT_REMOVE -->
|
||||
<script type="text/javascript" src="../src/worker.js"></script> <!-- PDFJSSCRIPT_REMOVE -->
|
||||
|
||||
<script type="text/javascript" src="../external/jpgjs/jpg.js"></script> <!-- PDFJSSCRIPT_REMOVE -->
|
||||
<script type="text/javascript">PDFJS.workerSrc = '../src/worker_loader.js';</script> <!-- PDFJSSCRIPT_REMOVE -->
|
||||
|
||||
<script type="text/javascript" src="viewer.js"></script>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue