Flush the current chunk when the font changed because of a restore op (issue #14755)
This commit is contained in:
		
							parent
							
								
									356f3cf285
								
							
						
					
					
						commit
						3091e70aad
					
				| @ -2991,6 +2991,8 @@ class PartialEvaluator { | |||||||
|         if (!preprocessor.read(operation)) { |         if (!preprocessor.read(operation)) { | ||||||
|           break; |           break; | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         const previousState = textState; | ||||||
|         textState = stateManager.state; |         textState = stateManager.state; | ||||||
|         const fn = operation.fn; |         const fn = operation.fn; | ||||||
|         args = operation.args; |         args = operation.args; | ||||||
| @ -3362,6 +3364,16 @@ class PartialEvaluator { | |||||||
|               }); |               }); | ||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
|  |           case OPS.restore: | ||||||
|  |             if ( | ||||||
|  |               previousState && | ||||||
|  |               (previousState.font !== textState.font || | ||||||
|  |                 previousState.fontSize !== textState.fontSize || | ||||||
|  |                 previousState.fontName !== textState.fontName) | ||||||
|  |             ) { | ||||||
|  |               flushTextContentItem(); | ||||||
|  |             } | ||||||
|  |             break; | ||||||
|         } // switch
 |         } // switch
 | ||||||
|         if (textContent.items.length >= sink.desiredSize) { |         if (textContent.items.length >= sink.desiredSize) { | ||||||
|           // Wait for ready, if we reach highWaterMark.
 |           // Wait for ready, if we reach highWaterMark.
 | ||||||
|  | |||||||
							
								
								
									
										1
									
								
								test/pdfs/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								test/pdfs/.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -592,3 +592,4 @@ | |||||||
| !issue14565.pdf | !issue14565.pdf | ||||||
| !multiline.pdf | !multiline.pdf | ||||||
| !bug1825002.pdf | !bug1825002.pdf | ||||||
|  | !issue14755.pdf | ||||||
|  | |||||||
							
								
								
									
										35
									
								
								test/pdfs/issue14755.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								test/pdfs/issue14755.pdf
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | |||||||
|  | %PDF-2.0 | ||||||
|  | 1 0 obj <</Type /Catalog /Pages 2 0 R>> | ||||||
|  | endobj | ||||||
|  | 2 0 obj <</Type /Pages /Kids [3 0 R] /Count 1>> | ||||||
|  | endobj | ||||||
|  | 3 0 obj<</Type /Page /Parent 2 0 R /Resources 4 0 R /MediaBox [0 0 500 800] /Contents 7 0 R>> | ||||||
|  | endobj | ||||||
|  | 4 0 obj<</Font <</F1 5 0 R /F2 6 0 R>>>> | ||||||
|  | endobj | ||||||
|  | 5 0 obj<</Type /Font /Subtype /Type1 /BaseFont /Helvetica>> | ||||||
|  | endobj | ||||||
|  | 6 0 obj<</Type /Font /Subtype /Type1 /BaseFont /Helvetica>> | ||||||
|  | endobj | ||||||
|  | 7 0 obj | ||||||
|  | <</Length 99>> | ||||||
|  | stream | ||||||
|  | BT /F1 10 Tf 100 100 Td (ABC)Tj ET | ||||||
|  | q BT /F2 10 Tf 120 100 Td (DEF)Tj ET Q | ||||||
|  | BT 140 100 Td (GHI)Tj ET | ||||||
|  | endstream | ||||||
|  | endobj | ||||||
|  | xref | ||||||
|  | 0 8 | ||||||
|  | 0000000000 65535 f | ||||||
|  | 0000000009 00000 n | ||||||
|  | 0000000056 00000 n | ||||||
|  | 0000000111 00000 n | ||||||
|  | 0000000212 00000 n | ||||||
|  | 0000000260 00000 n | ||||||
|  | 0000000327 00000 n | ||||||
|  | 0000000394 00000 n | ||||||
|  | trailer <</Size 8/Root 1 0 R>> | ||||||
|  | startxref | ||||||
|  | 539 | ||||||
|  | %%EOF | ||||||
| @ -2682,6 +2682,43 @@ Caron Broadcasting, Inc., an Ohio corporation (“Lessee”).`) | |||||||
|       await loadingTask.destroy(); |       await loadingTask.destroy(); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|  |     it("check that a chunk is pushed when font is restored", async function () { | ||||||
|  |       const loadingTask = getDocument(buildGetDocumentParams("issue14755.pdf")); | ||||||
|  |       const pdfDoc = await loadingTask.promise; | ||||||
|  |       const pdfPage = await pdfDoc.getPage(1); | ||||||
|  |       const { items } = await pdfPage.getTextContent({ | ||||||
|  |         disableNormalization: true, | ||||||
|  |       }); | ||||||
|  |       expect(items).toEqual([ | ||||||
|  |         jasmine.objectContaining({ | ||||||
|  |           str: "ABC", | ||||||
|  |           dir: "ltr", | ||||||
|  |           width: 20.56, | ||||||
|  |           height: 10, | ||||||
|  |           transform: [10, 0, 0, 10, 100, 100], | ||||||
|  |           hasEOL: false, | ||||||
|  |         }), | ||||||
|  |         jasmine.objectContaining({ | ||||||
|  |           str: "DEF", | ||||||
|  |           dir: "ltr", | ||||||
|  |           width: 20, | ||||||
|  |           height: 10, | ||||||
|  |           transform: [10, 0, 0, 10, 120, 100], | ||||||
|  |           hasEOL: false, | ||||||
|  |         }), | ||||||
|  |         jasmine.objectContaining({ | ||||||
|  |           str: "GHI", | ||||||
|  |           dir: "ltr", | ||||||
|  |           width: 17.78, | ||||||
|  |           height: 10, | ||||||
|  |           transform: [10, 0, 0, 10, 140, 100], | ||||||
|  |           hasEOL: false, | ||||||
|  |         }), | ||||||
|  |       ]); | ||||||
|  |       expect(items[0].fontName).toEqual(items[2].fontName); | ||||||
|  |       expect(items[1].fontName).not.toEqual(items[0].fontName); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|     it("gets empty structure tree", async function () { |     it("gets empty structure tree", async function () { | ||||||
|       const tree = await page.getStructTree(); |       const tree = await page.getStructTree(); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user