Merge
This commit is contained in:
		
						commit
						a417271628
					
				
							
								
								
									
										80
									
								
								pdf.js
									
									
									
									
									
								
							
							
						
						
									
										80
									
								
								pdf.js
									
									
									
									
									
								
							| @ -2714,8 +2714,9 @@ var Parser = (function() { | |||||||
| 
 | 
 | ||||||
|         // stream objects are not allowed inside content streams or
 |         // stream objects are not allowed inside content streams or
 | ||||||
|         // object streams
 |         // object streams
 | ||||||
|         if (this.allowStreams && IsCmd(this.buf2, 'stream')) { |         if (IsCmd(this.buf2, 'stream')) { | ||||||
|           return this.makeStream(dict, cipherTransform); |           return this.allowStreams ? | ||||||
|  |             this.makeStream(dict, cipherTransform) : dict; | ||||||
|         } else { |         } else { | ||||||
|           this.shift(); |           this.shift(); | ||||||
|         } |         } | ||||||
| @ -3541,6 +3542,11 @@ var Catalog = (function() { | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     get destinations() { |     get destinations() { | ||||||
|  |       function fetchDestination(ref) { | ||||||
|  |         var dest = xref.fetchIfRef(ref); | ||||||
|  |         return IsDict(dest) ? dest.get('D') : dest; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|       var xref = this.xref; |       var xref = this.xref; | ||||||
|       var dests = {}, nameTreeRef, nameDictionaryRef; |       var dests = {}, nameTreeRef, nameDictionaryRef; | ||||||
|       var obj = this.catDict.get('Names'); |       var obj = this.catDict.get('Names'); | ||||||
| @ -3551,10 +3557,10 @@ var Catalog = (function() { | |||||||
| 
 | 
 | ||||||
|       if (nameDictionaryRef) { |       if (nameDictionaryRef) { | ||||||
|         // reading simple destination dictionary
 |         // reading simple destination dictionary
 | ||||||
|         obj = xref.fetch(nameDictionaryRef); |         obj = xref.fetchIfRef(nameDictionaryRef); | ||||||
|         obj.forEach(function(key, value) { |         obj.forEach(function(key, value) { | ||||||
|           if (!value) return; |           if (!value) return; | ||||||
|           dests[key] = xref.fetch(value).get('D'); |           dests[key] = fetchDestination(value); | ||||||
|         }); |         }); | ||||||
|       } |       } | ||||||
|       if (nameTreeRef) { |       if (nameTreeRef) { | ||||||
| @ -3578,8 +3584,7 @@ var Catalog = (function() { | |||||||
|           } |           } | ||||||
|           var names = obj.get('Names'); |           var names = obj.get('Names'); | ||||||
|           for (i = 0, n = names.length; i < n; i += 2) { |           for (i = 0, n = names.length; i < n; i += 2) { | ||||||
|             var dest = xref.fetch(names[i + 1]); |             dests[names[i]] = fetchDestination(names[i + 1]); | ||||||
|             dests[names[i]] = IsDict(dest) ? dest.get('D') : dest; |  | ||||||
|           } |           } | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
| @ -4297,55 +4302,78 @@ var PartialEvaluator = (function() { | |||||||
|           } else if (IsStream(cmapObj)) { |           } else if (IsStream(cmapObj)) { | ||||||
|             var tokens = []; |             var tokens = []; | ||||||
|             var token = ''; |             var token = ''; | ||||||
|  |             var beginArrayToken = {}; | ||||||
| 
 | 
 | ||||||
|             var cmap = cmapObj.getBytes(cmapObj.length); |             var cmap = cmapObj.getBytes(cmapObj.length); | ||||||
|             for (var i = 0; i < cmap.length; i++) { |             for (var i = 0; i < cmap.length; i++) { | ||||||
|               var byte = cmap[i]; |               var byte = cmap[i]; | ||||||
|               if (byte == 0x20 || byte == 0x0A || byte == 0x3C || |               if (byte == 0x20 || byte == 0x0D || byte == 0x0A || | ||||||
|                   byte == 0x3E) { |                   byte == 0x3C || byte == 0x5B || byte == 0x5D) { | ||||||
|                 switch (token) { |                 switch (token) { | ||||||
|                   case 'useCMap': |                   case 'usecmap': | ||||||
|                     error('useCMap is not implemented'); |                     error('usecmap is not implemented'); | ||||||
|                     break; |                     break; | ||||||
| 
 | 
 | ||||||
|                   case 'beginbfchar': |                   case 'beginbfchar': | ||||||
|                   case 'beginbfrange': |                   case 'beginbfrange': | ||||||
|                   case 'begincodespacerange': |                   case 'begincidchar': | ||||||
|  |                   case 'begincidrange': | ||||||
|                     token = ''; |                     token = ''; | ||||||
|                     tokens = []; |                     tokens = []; | ||||||
|                     break; |                     break; | ||||||
| 
 | 
 | ||||||
|                   case 'endcodespacerange': |                   case 'endcidrange': | ||||||
|                     TODO('Support CMap ranges'); |  | ||||||
|                     break; |  | ||||||
| 
 |  | ||||||
|                   case 'endbfrange': |                   case 'endbfrange': | ||||||
|                     for (var j = 0; j < tokens.length; j += 3) { |                     for (var j = 0; j < tokens.length; j += 3) { | ||||||
|                       var startRange = parseInt('0x' + tokens[j]); |                       var startRange = tokens[j]; | ||||||
|                       var endRange = parseInt('0x' + tokens[j + 1]); |                       var endRange = tokens[j + 1]; | ||||||
|                       var code = parseInt('0x' + tokens[j + 2]); |                       var code = tokens[j + 2]; | ||||||
|                       for (var k = startRange; k < endRange; k++) |                       while(startRange < endRange) { | ||||||
|                         encodingMap[k] = code++; |                         encodingMap[startRange] = code++; | ||||||
|  |                         ++startRange; | ||||||
|  |                       } | ||||||
|                     } |                     } | ||||||
|                     break; |                     break; | ||||||
| 
 | 
 | ||||||
|  |                   case 'endcidchar': | ||||||
|                   case 'endbfchar': |                   case 'endbfchar': | ||||||
|                     for (var j = 0; j < tokens.length; j += 2) { |                     for (var j = 0; j < tokens.length; j += 2) { | ||||||
|                       var index = parseInt('0x' + tokens[j]); |                       var index = tokens[j]; | ||||||
|                       var code = parseInt('0x' + tokens[j + 1]); |                       var code = tokens[j + 1]; | ||||||
|                       encodingMap[index] = code; |                       encodingMap[index] = code; | ||||||
|                     } |                     } | ||||||
|                     break; |                     break; | ||||||
| 
 | 
 | ||||||
|  |                   case '': | ||||||
|  |                     break; | ||||||
|  | 
 | ||||||
|                   default: |                   default: | ||||||
|                     if (token.length) { |                     if (token[0] >= '0' && token[0] <= '9') | ||||||
|  |                       token = parseInt(token, 10); // a number
 | ||||||
|                     tokens.push(token); |                     tokens.push(token); | ||||||
|                     token = ''; |                     token = ''; | ||||||
|                     } |  | ||||||
|                     break; |                     break; | ||||||
|                 } |                 } | ||||||
|               } else if (byte == 0x5B || byte == 0x5D) { |                 switch (byte) { | ||||||
|                 error('CMAP list parsing is not implemented'); |                   case 0x5B: | ||||||
|  |                     // begin list parsing
 | ||||||
|  |                     tokens.push(beginArrayToken); | ||||||
|  |                     break; | ||||||
|  |                   case 0x5D: | ||||||
|  |                     // collect array items
 | ||||||
|  |                     var items = [], item; | ||||||
|  |                     while (tokens.length && (item = tokens.pop()) != beginArrayToken) { | ||||||
|  |                       items.unshift(item); | ||||||
|  |                     } | ||||||
|  |                     tokens.push(items); | ||||||
|  |                     break; | ||||||
|  |                 } | ||||||
|  |               } else if (byte == 0x3E) { | ||||||
|  |                 if (token.length) { | ||||||
|  |                   // parsing hex number
 | ||||||
|  |                   tokens.push(parseInt(token, 16)); | ||||||
|  |                   token = ''; | ||||||
|  |                 } | ||||||
|               } else { |               } else { | ||||||
|                 token += String.fromCharCode(byte); |                 token += String.fromCharCode(byte); | ||||||
|               } |               } | ||||||
|  | |||||||
| @ -42,7 +42,7 @@ var PDFView = { | |||||||
|   set page(val) { |   set page(val) { | ||||||
|     var pages = this.pages; |     var pages = this.pages; | ||||||
|     var input = document.getElementById('pageNumber'); |     var input = document.getElementById('pageNumber'); | ||||||
|     if (val <= 0 || val > pages.length) { |     if (!(0 < val && val <= pages.length)) { | ||||||
|       input.value = this.page; |       input.value = this.page; | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
| @ -58,7 +58,7 @@ var PDFView = { | |||||||
|   }, |   }, | ||||||
| 
 | 
 | ||||||
|   get page() { |   get page() { | ||||||
|     return parseInt(document.location.hash.substring(1)); |     return parseInt(document.location.hash.substring(1)) || 1; | ||||||
|   }, |   }, | ||||||
| 
 | 
 | ||||||
|   open: function(url, scale) { |   open: function(url, scale) { | ||||||
| @ -91,7 +91,8 @@ var PDFView = { | |||||||
|       return; // invalid destination
 |       return; // invalid destination
 | ||||||
|     // dest array looks like that: <page-ref> </XYZ|FitXXX> <args..>
 |     // dest array looks like that: <page-ref> </XYZ|FitXXX> <args..>
 | ||||||
|     var destRef = dest[0]; |     var destRef = dest[0]; | ||||||
|     var pageNumber = this.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R']; |     var pageNumber = destRef instanceof Object ? | ||||||
|  |       this.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R'] : (destRef + 1); | ||||||
|     if (pageNumber) { |     if (pageNumber) { | ||||||
|       this.page = pageNumber; |       this.page = pageNumber; | ||||||
|       // TODO scroll to specific region on the page, the precise scaling
 |       // TODO scroll to specific region on the page, the precise scaling
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user