mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2024-11-11 02:10:11 +01:00
Fix ConcurrentModificationException by modifying resources outside the iteration. (#1719)
Fix ConcurrentModificationException by collecting XObject names - Changed to use a list to collect XObject names before removal. - Avoids ConcurrentModificationException by modifying resources outside the iteration. Co-authored-by: Anthony Stirling <77850077+Frooodle@users.noreply.github.com>
This commit is contained in:
parent
e1d0f2cd3e
commit
fa0152aa2d
@ -1,6 +1,8 @@
|
||||
package stirling.software.SPDF.service;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.pdfbox.cos.COSName;
|
||||
import org.apache.pdfbox.pdmodel.PDDocument;
|
||||
@ -16,7 +18,7 @@ public class PdfImageRemovalService {
|
||||
/**
|
||||
* Removes all image objects from the provided PDF document.
|
||||
*
|
||||
* This method iterates over each page in the document and removes any image XObjects found
|
||||
* <p>This method iterates over each page in the document and removes any image XObjects found
|
||||
* in the page's resources.
|
||||
*
|
||||
* @param document The PDF document from which images will be removed.
|
||||
@ -27,14 +29,22 @@ public class PdfImageRemovalService {
|
||||
// Iterate over each page in the PDF document
|
||||
for (PDPage page : document.getPages()) {
|
||||
PDResources resources = page.getResources();
|
||||
// Collect the XObject names to remove
|
||||
List<COSName> namesToRemove = new ArrayList<>();
|
||||
|
||||
// Iterate over all XObject names in the page's resources
|
||||
for (COSName name : resources.getXObjectNames()) {
|
||||
// Check if the XObject is an image
|
||||
if (resources.isImageXObject(name)) {
|
||||
// Remove the image XObject by setting it to null
|
||||
resources.put(name, (PDXObject) null);
|
||||
// Collect the name for removal
|
||||
namesToRemove.add(name);
|
||||
}
|
||||
}
|
||||
|
||||
// Now, modify the resources by removing the collected names
|
||||
for (COSName name : namesToRemove) {
|
||||
resources.put(name, (PDXObject) null);
|
||||
}
|
||||
}
|
||||
return document;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user