Merge remote branch 'upstream/master'
This commit is contained in:
commit
0c091ca855
4
pdf.js
4
pdf.js
@ -5480,8 +5480,8 @@ var DeviceGrayCS = (function() {
|
||||
},
|
||||
getRgbBuffer: function graycs_getRgbBuffer(input, bits) {
|
||||
var scale = 255 / ((1 << bits) - 1);
|
||||
var length = input.length * 3;
|
||||
var rgbBuf = new Uint8Array(length);
|
||||
var length = input.length;
|
||||
var rgbBuf = new Uint8Array(length * 3);
|
||||
for (var i = 0, j = 0; i < length; ++i) {
|
||||
var c = (scale * input[i]) | 0;
|
||||
rgbBuf[j++] = c;
|
||||
|
@ -126,14 +126,15 @@ class PDFTestHandler(BaseHTTPRequestHandler):
|
||||
self.wfile.write("<html><body><h1>PDFs of " + path + "</h1>\n")
|
||||
for filename in os.listdir(location):
|
||||
if filename.lower().endswith('.pdf'):
|
||||
self.wfile.write("<a href='/web/viewer.html?file=" + path + filename + "' target=pdf>" +
|
||||
self.wfile.write("<a href='/web/viewer.html?file=" +
|
||||
urllib.quote_plus(path + filename, '/') + "' target=pdf>" +
|
||||
filename + "</a><br>\n")
|
||||
self.wfile.write("</body></html>")
|
||||
|
||||
def do_GET(self):
|
||||
url = urlparse(self.path)
|
||||
# Ignore query string
|
||||
path, _ = url.path, url.query
|
||||
path, _ = urllib.unquote_plus(url.path), url.query
|
||||
path = os.path.abspath(os.path.realpath(DOC_ROOT + os.sep + path))
|
||||
prefix = os.path.commonprefix(( path, DOC_ROOT ))
|
||||
_, ext = os.path.splitext(path.lower())
|
||||
|
@ -8,6 +8,8 @@ var kDefaultScale = 1.5;
|
||||
var kDefaultScaleDelta = 1.1;
|
||||
var kCacheSize = 20;
|
||||
var kCssUnits = 96.0 / 72.0;
|
||||
var kScrollbarPadding = 40;
|
||||
|
||||
|
||||
var Cache = function(size) {
|
||||
var data = [];
|
||||
@ -44,7 +46,7 @@ var PDFView = {
|
||||
window.dispatchEvent(event);
|
||||
},
|
||||
|
||||
parseScale: function(value) {
|
||||
parseScale: function(value, resetAutoSettings) {
|
||||
if ('custom' == value)
|
||||
return;
|
||||
|
||||
@ -55,15 +57,18 @@ var PDFView = {
|
||||
}
|
||||
|
||||
var currentPage = this.pages[this.page - 1];
|
||||
var scrollbarPadding = 40;
|
||||
var pageWidthScale = (window.innerWidth - scrollbarPadding) /
|
||||
var pageWidthScale = (window.innerWidth - kScrollbarPadding) /
|
||||
currentPage.width / kCssUnits;
|
||||
var pageHeightScale = (window.innerHeight - scrollbarPadding) /
|
||||
var pageHeightScale = (window.innerHeight - kScrollbarPadding) /
|
||||
currentPage.height / kCssUnits;
|
||||
if ('page-width' == value)
|
||||
this.setScale(pageWidthScale);
|
||||
else if ('page-fit' == value)
|
||||
this.setScale(Math.min(pageWidthScale, pageHeightScale));
|
||||
this.setScale(pageWidthScale, resetAutoSettings);
|
||||
if ('page-height' == value)
|
||||
this.setScale(pageHeightScale, resetAutoSettings);
|
||||
if ('page-fit' == value) {
|
||||
this.setScale(
|
||||
Math.min(pageWidthScale, pageHeightScale), resetAutoSettings);
|
||||
}
|
||||
},
|
||||
|
||||
zoomIn: function() {
|
||||
@ -130,8 +135,8 @@ var PDFView = {
|
||||
this.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R'] : (destRef + 1);
|
||||
if (pageNumber) {
|
||||
this.page = pageNumber;
|
||||
// TODO scroll to specific region on the page, the precise scaling
|
||||
// required.
|
||||
var currentPage = this.pages[pageNumber - 1];
|
||||
currentPage.scrollIntoView(dest);
|
||||
}
|
||||
},
|
||||
|
||||
@ -267,11 +272,80 @@ var PageView = function(container, content, id, width, height,
|
||||
link.style.width = Math.ceil(links[i].width * scale) + 'px';
|
||||
link.style.height = Math.ceil(links[i].height * scale) + 'px';
|
||||
link.href = links[i].url || '';
|
||||
bindLink(link, ('dest' in links[i]) ? links[i].dest : null);
|
||||
if (!links[i].url)
|
||||
bindLink(link, ('dest' in links[i]) ? links[i].dest : null);
|
||||
div.appendChild(link);
|
||||
}
|
||||
}
|
||||
|
||||
this.scrollIntoView = function(dest) {
|
||||
var x = 0, y = 0;
|
||||
var width = 0, height = 0, widthScale, heightScale;
|
||||
var scale = 0;
|
||||
switch (dest[1].name) {
|
||||
default:
|
||||
return;
|
||||
case 'XYZ':
|
||||
x = dest[2];
|
||||
y = dest[3];
|
||||
scale = dest[4];
|
||||
break;
|
||||
case 'Fit':
|
||||
case 'FitB':
|
||||
scale = 'page-fit';
|
||||
break;
|
||||
case 'FitH':
|
||||
case 'FitBH':
|
||||
y = dest[2];
|
||||
scale = 'page-width';
|
||||
break;
|
||||
case 'FitV':
|
||||
case 'FitBV':
|
||||
x = dest[2];
|
||||
scale = 'page-height';
|
||||
break;
|
||||
case 'FitR':
|
||||
x = dest[2];
|
||||
y = dest[3];
|
||||
width = dest[4] - x;
|
||||
height = dest[5] - y;
|
||||
widthScale = (window.innerWidth - kScrollbarPadding) /
|
||||
width / kCssUnits;
|
||||
heightScale = (window.innerHeight - kScrollbarPadding) /
|
||||
height / kCssUnits;
|
||||
scale = Math.min(widthScale, heightScale);
|
||||
break;
|
||||
}
|
||||
|
||||
var boundingRect = [
|
||||
this.content.rotatePoint(x, y),
|
||||
this.content.rotatePoint(x + width, y + height)
|
||||
];
|
||||
|
||||
if (scale)
|
||||
PDFView.setScale(scale, true);
|
||||
|
||||
setTimeout(function() {
|
||||
// letting page to re-layout before scrolling
|
||||
var scale = PDFView.currentScale;
|
||||
var x = Math.min(boundingRect[0].x, boundingRect[1].x);
|
||||
var y = Math.min(boundingRect[0].y, boundingRect[1].y);
|
||||
var width = Math.abs(boundingRect[0].x - boundingRect[1].x);
|
||||
var height = Math.abs(boundingRect[0].y - boundingRect[1].y);
|
||||
|
||||
// using temporary div to scroll it into view
|
||||
var tempDiv = document.createElement('div');
|
||||
tempDiv.style.position = 'absolute';
|
||||
tempDiv.style.left = Math.floor(x * scale) + 'px';
|
||||
tempDiv.style.top = Math.floor(y * scale) + 'px';
|
||||
tempDiv.style.width = Math.ceil(width * scale) + 'px';
|
||||
tempDiv.style.height = Math.ceil(height * scale) + 'px';
|
||||
div.appendChild(tempDiv);
|
||||
tempDiv.scrollIntoView(true);
|
||||
div.removeChild(tempDiv);
|
||||
}, 0);
|
||||
};
|
||||
|
||||
this.draw = function() {
|
||||
if (div.hasChildNodes()) {
|
||||
this.updateStats();
|
||||
|
Loading…
Reference in New Issue
Block a user