@@ -210,75 +210,75 @@ private String compareImages(String outImage, String cmpImage, String difference
210
210
211
211
private Map <Integer , PageImageObjectsPaths > extractImagesFromPdf (String pdf , String outputPath )
212
212
throws IOException , InterruptedException {
213
- PdfDocument pdfDoc = new PdfDocument (new PdfReader (pdf ));
214
- Map <Integer , PageImageObjectsPaths > imageObjectDatas = new HashMap <>();
215
-
216
- for (int i = 1 ; i <= pdfDoc .getNumberOfPages (); i ++) {
217
- PdfPage page = pdfDoc .getPage (i );
218
- PageImageObjectsPaths imageObjectData =
219
- new PageImageObjectsPaths (page .getPdfObject ().getIndirectReference ());
220
- Stack <ObjectPath .LocalPathItem > baseLocalPath = new Stack <ObjectPath .LocalPathItem >();
221
-
222
- PdfResources pdfResources = page .getResources ();
223
- if (pdfResources .getPdfObject ().isIndirect ()) {
224
- imageObjectData .addIndirectReference (pdfResources .getPdfObject ().getIndirectReference ());
225
- } else {
226
- baseLocalPath .push (new ObjectPath ().new DictPathItem (PdfName .Resources ));
227
- }
228
-
229
- PdfDictionary xObjects = pdfResources .getResource (PdfName .XObject );
230
- if (xObjects == null ) {
231
- continue ;
232
- }
233
-
234
- if (xObjects .isIndirect ()) {
235
- imageObjectData .addIndirectReference (xObjects .getIndirectReference ());
236
- baseLocalPath .clear ();
237
- } else {
238
- baseLocalPath .push (new ObjectPath ().new DictPathItem (PdfName .XObject ));
239
- }
213
+ try (PdfReader readerPdf = new PdfReader (pdf );
214
+ PdfDocument pdfDoc = new PdfDocument (readerPdf )) {
215
+ Map <Integer , PageImageObjectsPaths > imageObjectDatas = new HashMap <>();
216
+
217
+ for (int i = 1 ; i <= pdfDoc .getNumberOfPages (); i ++) {
218
+ PdfPage page = pdfDoc .getPage (i );
219
+ PageImageObjectsPaths imageObjectData =
220
+ new PageImageObjectsPaths (page .getPdfObject ().getIndirectReference ());
221
+ Stack <ObjectPath .LocalPathItem > baseLocalPath = new Stack <ObjectPath .LocalPathItem >();
222
+
223
+ PdfResources pdfResources = page .getResources ();
224
+ if (pdfResources .getPdfObject ().isIndirect ()) {
225
+ imageObjectData .addIndirectReference (pdfResources .getPdfObject ().getIndirectReference ());
226
+ } else {
227
+ baseLocalPath .push (new ObjectPath ().new DictPathItem (PdfName .Resources ));
228
+ }
240
229
241
- boolean isPageToGsExtract = false ;
242
- for (PdfName objectName : xObjects .keySet ()) {
243
- if (!xObjects .get (objectName ).isStream ()
244
- || !PdfName .Image .equals (xObjects .getAsStream (objectName ).getAsName (PdfName .Subtype ))) {
230
+ PdfDictionary xObjects = pdfResources .getResource (PdfName .XObject );
231
+ if (xObjects == null ) {
245
232
continue ;
246
233
}
247
234
248
- PdfImageXObject pdfObject = new PdfImageXObject (xObjects .getAsStream (objectName ));
249
- baseLocalPath .push (new ObjectPath ().new DictPathItem (objectName ));
250
-
251
- if (!useGs ) {
252
- String extension = pdfObject .identifyImageFileExtension ();
253
- String fileName = outputPath + objectName + "_" + i + "." + extension ;
254
- createImageFromPdfXObject (fileName , pdfObject );
235
+ if (xObjects .isIndirect ()) {
236
+ imageObjectData .addIndirectReference (xObjects .getIndirectReference ());
237
+ baseLocalPath .clear ();
255
238
} else {
256
- isPageToGsExtract = true ;
239
+ baseLocalPath . push ( new ObjectPath (). new DictPathItem ( PdfName . XObject )) ;
257
240
}
258
241
259
- Stack <ObjectPath .LocalPathItem > reversedStack = new Stack <>();
260
- reversedStack .addAll (baseLocalPath );
261
- Stack <ObjectPath .LocalPathItem > resultStack = new Stack <>();
262
- resultStack .addAll (reversedStack );
263
- imageObjectData .addLocalPath (resultStack );
264
- baseLocalPath .pop ();
265
- }
242
+ boolean isPageToGsExtract = false ;
243
+ for (PdfName objectName : xObjects .keySet ()) {
244
+ if (!xObjects .get (objectName ).isStream ()
245
+ || !PdfName .Image .equals (xObjects .getAsStream (objectName ).getAsName (PdfName .Subtype ))) {
246
+ continue ;
247
+ }
266
248
267
- if (useGs && isPageToGsExtract ) {
268
- String fileName = "Page_" + i + "-%03d.png" ;
269
- ghostscriptHelper .runGhostScriptImageGeneration (pdf , outputPath , fileName , String .valueOf (i ));
270
- }
249
+ PdfImageXObject pdfObject = new PdfImageXObject (xObjects .getAsStream (objectName ));
250
+ baseLocalPath .push (new ObjectPath ().new DictPathItem (objectName ));
271
251
272
- ImageRenderListener listener = new ImageRenderListener ();
273
- PdfCanvasProcessor parser = new PdfCanvasProcessor (listener );
274
- parser .processPageContent (page );
275
- ignoredImagesAreas .put (i , listener .getImageRectangles ());
252
+ if (!useGs ) {
253
+ String extension = pdfObject .identifyImageFileExtension ();
254
+ String fileName = outputPath + objectName + "_" + i + "." + extension ;
255
+ createImageFromPdfXObject (fileName , pdfObject );
256
+ } else {
257
+ isPageToGsExtract = true ;
258
+ }
276
259
277
- imageObjectDatas .put (i , imageObjectData );
278
- }
260
+ Stack <ObjectPath .LocalPathItem > reversedStack = new Stack <>();
261
+ reversedStack .addAll (baseLocalPath );
262
+ Stack <ObjectPath .LocalPathItem > resultStack = new Stack <>();
263
+ resultStack .addAll (reversedStack );
264
+ imageObjectData .addLocalPath (resultStack );
265
+ baseLocalPath .pop ();
266
+ }
279
267
280
- pdfDoc .close ();
281
- return imageObjectDatas ;
268
+ if (useGs && isPageToGsExtract ) {
269
+ String fileName = "Page_" + i + "-%03d.png" ;
270
+ ghostscriptHelper .runGhostScriptImageGeneration (pdf , outputPath , fileName , String .valueOf (i ));
271
+ }
272
+
273
+ ImageRenderListener listener = new ImageRenderListener ();
274
+ PdfCanvasProcessor parser = new PdfCanvasProcessor (listener );
275
+ parser .processPageContent (page );
276
+ ignoredImagesAreas .put (i , listener .getImageRectangles ());
277
+
278
+ imageObjectDatas .put (i , imageObjectData );
279
+ }
280
+ return imageObjectDatas ;
281
+ }
282
282
}
283
283
284
284
private void createImageFromPdfXObject (String imageFileName , PdfImageXObject imageObject )
0 commit comments