You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xmlgraphics.apache.org by ss...@apache.org on 2025/10/01 11:47:14 UTC

(xmlgraphics-fop-pdf-images) branch main updated: Close all PDDocument in tests

This is an automated email from the ASF dual-hosted git repository.

ssteiner pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/xmlgraphics-fop-pdf-images.git


The following commit(s) were added to refs/heads/main by this push:
     new dd04a2b  Close all PDDocument in tests
dd04a2b is described below

commit dd04a2b486d276f8e8b94642dac09af2353683f3
Author: Simon Steiner <ss...@apache.org>
AuthorDate: Wed Oct 1 12:45:53 2025 +0100

    Close all PDDocument in tests
---
 .../render/pdf/StructureTreeMergerTestCase.java    | 132 +++---
 .../fop/render/pdf/TaggedPDFConductorTestCase.java |  38 +-
 .../pdf/pdfbox/DocumentRootModifierTestCase.java   |  24 +-
 .../pdfbox/FOPPDFSingleMultiByteFontTestCase.java  | 413 ++++++++++---------
 .../fop/render/pdf/pdfbox/FontMergeTestCase.java   |  66 ++-
 .../pdf/pdfbox/ImageConverterPDF2AFPTestCase.java  |  28 +-
 .../pdf/pdfbox/ImageConverterPDF2G2DTestCase.java  |  97 +++--
 .../render/pdf/pdfbox/PDFBoxAdapterTestCase.java   | 452 +++++++++++----------
 .../fop/render/pdf/pdfbox/PDFRotateTestCase.java   |  46 ++-
 .../fop/render/pdf/pdfbox/PDFWriterTestCase.java   |  12 +-
 .../pdf/pdfbox/PageParentTreeFinderTestCase.java   |  92 ++---
 .../render/pdf/pdfbox/PreloaderPDFTestCase.java    |   5 +-
 12 files changed, 703 insertions(+), 702 deletions(-)

diff --git a/test/java/org/apache/fop/render/pdf/StructureTreeMergerTestCase.java b/test/java/org/apache/fop/render/pdf/StructureTreeMergerTestCase.java
index 155d674..0338aab 100644
--- a/test/java/org/apache/fop/render/pdf/StructureTreeMergerTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/StructureTreeMergerTestCase.java
@@ -74,58 +74,58 @@ public class StructureTreeMergerTestCase {
 
     @Test
     public void testCopyStructure() throws IOException {
-        PDDocument doc = PDFBoxAdapterTestCase.load(LINK);
-        PDPage srcPage = doc.getPage(0);
-        PageParentTreeFinder finder = new PageParentTreeFinder(srcPage);
-        COSArray markedContentParents = finder.getPageParentTreeArray(doc);
-        PDFStructElem elem = new PDFStructElem();
-        elem.setObjectNumber(2);
-        adapter = new PDFBoxAdapter(pdfPage, new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(),
-                new DefaultEventBroadcaster());
-        adapter.setCurrentMCID(1);
-        PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
-        StructureTreeMerger merger = new StructureTreeMerger(elem, handler, adapter, srcPage);
-        merger.copyStructure(markedContentParents);
-        PDFArray array = handler.getPageParentTree();
-        checkMarkedContentsParentsForLinkTest(array);
-        PDFStructElem first = (PDFStructElem)array.get(0);
-        checkParentForLinkTest(first, 0);
-        doc.close();
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(LINK)) {
+            PDPage srcPage = doc.getPage(0);
+            PageParentTreeFinder finder = new PageParentTreeFinder(srcPage);
+            COSArray markedContentParents = finder.getPageParentTreeArray(doc);
+            PDFStructElem elem = new PDFStructElem();
+            elem.setObjectNumber(2);
+            adapter = new PDFBoxAdapter(pdfPage, new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(),
+                    new DefaultEventBroadcaster());
+            adapter.setCurrentMCID(1);
+            PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
+            StructureTreeMerger merger = new StructureTreeMerger(elem, handler, adapter, srcPage);
+            merger.copyStructure(markedContentParents);
+            PDFArray array = handler.getPageParentTree();
+            checkMarkedContentsParentsForLinkTest(array);
+            PDFStructElem first = (PDFStructElem) array.get(0);
+            checkParentForLinkTest(first, 0);
+        }
     }
 
     @Test
     public void testNullEntriesInParentTree() throws IOException {
-        PDDocument doc = PDFBoxAdapterTestCase.load(LINK);
-        PDPage srcPage = doc.getPage(0);
-        PageParentTreeFinder finder = new PageParentTreeFinder(srcPage);
-        COSArray markedContentParents = finder.getPageParentTreeArray(doc);
-        markedContentParents.add(0, null);
-        PDFStructElem elem = new PDFStructElem();
-        elem.setObjectNumber(2);
-        adapter = new PDFBoxAdapter(pdfPage, new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(),
-                new DefaultEventBroadcaster());
-        PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
-        StructureTreeMerger merger = new StructureTreeMerger(elem, handler, adapter, srcPage);
-        merger.copyStructure(markedContentParents);
-        PDFArray array = handler.getPageParentTree();
-        Assert.assertNull(array.get(0));
-        doc.close();
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(LINK)) {
+            PDPage srcPage = doc.getPage(0);
+            PageParentTreeFinder finder = new PageParentTreeFinder(srcPage);
+            COSArray markedContentParents = finder.getPageParentTreeArray(doc);
+            markedContentParents.add(0, null);
+            PDFStructElem elem = new PDFStructElem();
+            elem.setObjectNumber(2);
+            adapter = new PDFBoxAdapter(pdfPage, new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(),
+                    new DefaultEventBroadcaster());
+            PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
+            StructureTreeMerger merger = new StructureTreeMerger(elem, handler, adapter, srcPage);
+            merger.copyStructure(markedContentParents);
+            PDFArray array = handler.getPageParentTree();
+            Assert.assertNull(array.get(0));
+        }
     }
 
     @Test
     public void testOBJRCorrectPosition() throws IOException {
-        PDDocument doc = PDFBoxAdapterTestCase.load(MissingOBJR);
-        PDPage srcPage = doc.getPage(0);
-        PageParentTreeFinder finder = new PageParentTreeFinder(srcPage);
-        COSArray markedContentParents = finder.getPageParentTreeArray(doc);
-        PDFStructElem elem = new PDFStructElem();
-        elem.setObjectNumber(2);
-        adapter = new PDFBoxAdapter(pdfPage, new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(),
-                new DefaultEventBroadcaster());
-        PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
-        StructureTreeMerger merger = new StructureTreeMerger(elem, handler, adapter, srcPage);
-        merger.copyStructure(markedContentParents);
-        doc.close();
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(MissingOBJR)) {
+            PDPage srcPage = doc.getPage(0);
+            PageParentTreeFinder finder = new PageParentTreeFinder(srcPage);
+            COSArray markedContentParents = finder.getPageParentTreeArray(doc);
+            PDFStructElem elem = new PDFStructElem();
+            elem.setObjectNumber(2);
+            adapter = new PDFBoxAdapter(pdfPage, new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(),
+                    new DefaultEventBroadcaster());
+            PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
+            StructureTreeMerger merger = new StructureTreeMerger(elem, handler, adapter, srcPage);
+            merger.copyStructure(markedContentParents);
+        }
 //        PDFArray array = handler.getPageParentTree();
 
 //        PDFStructElem kid = (PDFStructElem)array.get(0);
@@ -192,30 +192,30 @@ public class StructureTreeMergerTestCase {
 
     @Test
     public void testCheckNullCOSObject() throws IOException {
-        PDDocument doc = PDFBoxAdapterTestCase.load(BrokenLink);
-        PDPage srcPage = doc.getPage(0);
-        PageParentTreeFinder finder = new PageParentTreeFinder(srcPage);
-        COSArray markedContentParents = finder.getPageParentTreeArray(doc);
-        COSObject nullObj = new COSObject(null);
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(BrokenLink)) {
+            PDPage srcPage = doc.getPage(0);
+            PageParentTreeFinder finder = new PageParentTreeFinder(srcPage);
+            COSArray markedContentParents = finder.getPageParentTreeArray(doc);
+            COSObject nullObj = new COSObject(null);
 //        nullObj.setObjectNumber(100);
 //        nullObj.setGenerationNumber(0);
-        PDFStructElem elem = new PDFStructElem();
-        elem.setObjectNumber(2);
-        COSObject parent = (COSObject)markedContentParents.get(1);
-        COSDictionary dict = (COSDictionary) parent.getObject();
-        COSArray kids = (COSArray) dict.getDictionaryObject(COSName.K);
-        COSDictionary kid = (COSDictionary) kids.get(1);
-        kid.setItem(COSName.OBJ, nullObj);
-        adapter = new PDFBoxAdapter(pdfPage, new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(),
-                new DefaultEventBroadcaster());
-        PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
-        StructureTreeMerger merger = new StructureTreeMerger(elem, handler, adapter, srcPage);
-        merger.copyStructure(markedContentParents);
-        PDFArray array = handler.getPageParentTree();
-        PDFStructElem parentElem = (PDFStructElem)array.get(1);
-        PDFDictionary objrDict = (PDFDictionary) parentElem.getKids().get(1);
-        Assert.assertNull(objrDict.get("Obj"));
-        doc.close();
+            PDFStructElem elem = new PDFStructElem();
+            elem.setObjectNumber(2);
+            COSObject parent = (COSObject) markedContentParents.get(1);
+            COSDictionary dict = (COSDictionary) parent.getObject();
+            COSArray kids = (COSArray) dict.getDictionaryObject(COSName.K);
+            COSDictionary kid = (COSDictionary) kids.get(1);
+            kid.setItem(COSName.OBJ, nullObj);
+            adapter = new PDFBoxAdapter(pdfPage, new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(),
+                    new DefaultEventBroadcaster());
+            PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
+            StructureTreeMerger merger = new StructureTreeMerger(elem, handler, adapter, srcPage);
+            merger.copyStructure(markedContentParents);
+            PDFArray array = handler.getPageParentTree();
+            PDFStructElem parentElem = (PDFStructElem) array.get(1);
+            PDFDictionary objrDict = (PDFDictionary) parentElem.getKids().get(1);
+            Assert.assertNull(objrDict.get("Obj"));
+        }
     }
 
     @Test
diff --git a/test/java/org/apache/fop/render/pdf/TaggedPDFConductorTestCase.java b/test/java/org/apache/fop/render/pdf/TaggedPDFConductorTestCase.java
index 381eee2..d91ed20 100644
--- a/test/java/org/apache/fop/render/pdf/TaggedPDFConductorTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/TaggedPDFConductorTestCase.java
@@ -95,14 +95,14 @@ public class TaggedPDFConductorTestCase {
 
     private void runConductor(String pdf, PDFStructElem elem) throws IOException {
         setUp();
-        PDDocument doc = PDFBoxAdapterTestCase.load(pdf);
-        PDPage srcPage = doc.getPage(0);
-        elem.setObjectNumber(2);
-        PDFBoxAdapter adapter = new PDFBoxAdapter(pdfPage, new HashMap<>(),  new HashMap<>(), new HashMap<>(),
-                new HashMap<>(), new DefaultEventBroadcaster());
-        PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
-        new TaggedPDFConductor(elem, handler, srcPage, adapter).handleLogicalStructure(doc);
-        doc.close();
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(pdf)) {
+            PDPage srcPage = doc.getPage(0);
+            elem.setObjectNumber(2);
+            PDFBoxAdapter adapter = new PDFBoxAdapter(pdfPage, new HashMap<>(), new HashMap<>(), new HashMap<>(),
+                    new HashMap<>(), new DefaultEventBroadcaster());
+            PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
+            new TaggedPDFConductor(elem, handler, srcPage, adapter).handleLogicalStructure(doc);
+        }
     }
 
     private void setUp() {
@@ -194,18 +194,18 @@ public class TaggedPDFConductorTestCase {
     private PDFLogicalStructureHandler runConductorForHandler(String pdf, PDFStructElem elem,
             PDFStructElem[] textElements) throws IOException {
         setUp();
-        PDDocument doc = PDFBoxAdapterTestCase.load(pdf);
-        PDPage srcPage = doc.getPage(0);
-        elem.setObjectNumber(2);
-        PDFBoxAdapter adapter = new PDFBoxAdapter(pdfPage, new HashMap<>(), new HashMap<>(), new HashMap<>(),
-                new HashMap<>(), new DefaultEventBroadcaster());
-        PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
-        for (PDFStructElem textElement : textElements) {
-            handler.addTextContentItem(textElement);
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(pdf)) {
+            PDPage srcPage = doc.getPage(0);
+            elem.setObjectNumber(2);
+            PDFBoxAdapter adapter = new PDFBoxAdapter(pdfPage, new HashMap<>(), new HashMap<>(), new HashMap<>(),
+                    new HashMap<>(), new DefaultEventBroadcaster());
+            PDFLogicalStructureHandler handler = setUpPDFLogicalStructureHandler();
+            for (PDFStructElem textElement : textElements) {
+                handler.addTextContentItem(textElement);
+            }
+            new TaggedPDFConductor(elem, handler, srcPage, adapter).handleLogicalStructure(doc);
+            return handler;
         }
-        new TaggedPDFConductor(elem, handler, srcPage, adapter).handleLogicalStructure(doc);
-        doc.close();
-        return handler;
     }
 
     private static String getParentTreeContentsAsString(PDFLogicalStructureHandler logicalStructureHandler) {
diff --git a/test/java/org/apache/fop/render/pdf/pdfbox/DocumentRootModifierTestCase.java b/test/java/org/apache/fop/render/pdf/pdfbox/DocumentRootModifierTestCase.java
index 3baee31..a6c26f4 100644
--- a/test/java/org/apache/fop/render/pdf/pdfbox/DocumentRootModifierTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/pdfbox/DocumentRootModifierTestCase.java
@@ -78,18 +78,18 @@ public class DocumentRootModifierTestCase {
         Assert.assertEquals(test, expected);
 
 
-        PDDocument doc = PDFBoxAdapterTestCase.load(CLASSMAP);
-        COSDictionary temp = doc.getDocumentCatalog().getStructureTreeRoot().getCOSObject();
-        PDFDictionary classMap = new PDFDictionary();
-        PDFDictionary inner = new PDFDictionary();
-        inner.put("StartIndent", 0);
-        classMap.put("Normal2", inner);
-        structTreeRoot.put("ClassMap", classMap);
-        modifier.structTreeRootEntriesToCopy(temp);
-        structTreeRoot = pdfDoc.getRoot().getStructTreeRoot();
-        PDFDictionary testDict = (PDFDictionary)structTreeRoot.get("ClassMap");
-        Assert.assertNotNull(testDict.get("Normal2"));
-        doc.close();
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(CLASSMAP)) {
+            COSDictionary temp = doc.getDocumentCatalog().getStructureTreeRoot().getCOSObject();
+            PDFDictionary classMap = new PDFDictionary();
+            PDFDictionary inner = new PDFDictionary();
+            inner.put("StartIndent", 0);
+            classMap.put("Normal2", inner);
+            structTreeRoot.put("ClassMap", classMap);
+            modifier.structTreeRootEntriesToCopy(temp);
+            structTreeRoot = pdfDoc.getRoot().getStructTreeRoot();
+            PDFDictionary testDict = (PDFDictionary) structTreeRoot.get("ClassMap");
+            Assert.assertNotNull(testDict.get("Normal2"));
+        }
     }
 
 }
diff --git a/test/java/org/apache/fop/render/pdf/pdfbox/FOPPDFSingleMultiByteFontTestCase.java b/test/java/org/apache/fop/render/pdf/pdfbox/FOPPDFSingleMultiByteFontTestCase.java
index 1312f78..df165cb 100644
--- a/test/java/org/apache/fop/render/pdf/pdfbox/FOPPDFSingleMultiByteFontTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/pdfbox/FOPPDFSingleMultiByteFontTestCase.java
@@ -90,141 +90,138 @@ public class FOPPDFSingleMultiByteFontTestCase {
 
     @Test
     public void testCFF() throws Exception {
-        PDDocument doc = PDFBoxAdapterTestCase.load(FontMergeTestCase.CFF1);
-        FOPPDFSingleByteFont sbfont = new FOPPDFSingleByteFont(getFont(doc, "R11"),
-                "MyriadPro-Regular_Type1f0encstdcs", new DefaultEventBroadcaster(), params);
-
-        Assert.assertTrue(Arrays.asList(sbfont.getEncoding().getCharNameMap()).contains("bracketright"));
-        Assert.assertTrue(!Arrays.asList(sbfont.getEncoding().getCharNameMap()).contains("A"));
-        Assert.assertTrue(!Arrays.toString(sbfont.getEncoding().getUnicodeCharMap()).contains("A"));
-        Assert.assertEquals(sbfont.mapChar('A'), 0);
-        Assert.assertEquals(sbfont.getWidths().length, 28);
-        Assert.assertEquals(sbfont.getFirstChar(), 87);
-        Assert.assertEquals(sbfont.getLastChar(), 114);
-
-        PDDocument doc2 = PDFBoxAdapterTestCase.load(FontMergeTestCase.CFF2);
-        String name = sbfont.addFont(getFont(doc2, "R11"));
-        Assert.assertTrue(name.contains("MyriadPro"));
-
-        Assert.assertEquals(sbfont.getFontName(), "MyriadPro-Regular_Type1f0encstdcs");
-        Assert.assertEquals(sbfont.getEncodingName(), "WinAnsiEncoding");
-        Assert.assertEquals(sbfont.mapChar('W'), 'W');
-        String x = IOUtils.toString(sbfont.getInputStream(), StandardCharsets.UTF_8);
-        Assert.assertTrue(x, x.contains("Adobe Systems"));
-        Assert.assertEquals(sbfont.getEncoding().getName(), "FOPPDFEncoding");
-        Assert.assertTrue(Arrays.asList(sbfont.getEncoding().getCharNameMap()).contains("A"));
-        Assert.assertEquals(sbfont.getWidths().length, 65);
-        Assert.assertEquals(sbfont.getFirstChar(), 50);
-        Assert.assertEquals(sbfont.getLastChar(), 114);
-
-        Assert.assertEquals(sbfont.addFont(getFont(doc2, "R13")), null);
-
-        doc.close();
-        doc2.close();
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(FontMergeTestCase.CFF1)) {
+            FOPPDFSingleByteFont sbfont = new FOPPDFSingleByteFont(getFont(doc, "R11"),
+                    "MyriadPro-Regular_Type1f0encstdcs", new DefaultEventBroadcaster(), params);
+
+            Assert.assertTrue(Arrays.asList(sbfont.getEncoding().getCharNameMap()).contains("bracketright"));
+            Assert.assertTrue(!Arrays.asList(sbfont.getEncoding().getCharNameMap()).contains("A"));
+            Assert.assertTrue(!Arrays.toString(sbfont.getEncoding().getUnicodeCharMap()).contains("A"));
+            Assert.assertEquals(sbfont.mapChar('A'), 0);
+            Assert.assertEquals(sbfont.getWidths().length, 28);
+            Assert.assertEquals(sbfont.getFirstChar(), 87);
+            Assert.assertEquals(sbfont.getLastChar(), 114);
+
+            try (PDDocument doc2 = PDFBoxAdapterTestCase.load(FontMergeTestCase.CFF2)) {
+                String name = sbfont.addFont(getFont(doc2, "R11"));
+                Assert.assertTrue(name.contains("MyriadPro"));
+
+                Assert.assertEquals(sbfont.getFontName(), "MyriadPro-Regular_Type1f0encstdcs");
+                Assert.assertEquals(sbfont.getEncodingName(), "WinAnsiEncoding");
+                Assert.assertEquals(sbfont.mapChar('W'), 'W');
+                String x = IOUtils.toString(sbfont.getInputStream(), StandardCharsets.UTF_8);
+                Assert.assertTrue(x, x.contains("Adobe Systems"));
+                Assert.assertEquals(sbfont.getEncoding().getName(), "FOPPDFEncoding");
+                Assert.assertTrue(Arrays.asList(sbfont.getEncoding().getCharNameMap()).contains("A"));
+                Assert.assertEquals(sbfont.getWidths().length, 65);
+                Assert.assertEquals(sbfont.getFirstChar(), 50);
+                Assert.assertEquals(sbfont.getLastChar(), 114);
+
+                Assert.assertEquals(sbfont.addFont(getFont(doc2, "R13")), null);
+            }
+        }
     }
 
     @Test
     public void testCFF2() throws Exception {
-        PDDocument doc = PDFBoxAdapterTestCase.load(FontMergeTestCase.CFF3);
-        FOPPDFSingleByteFont sbfont = new FOPPDFSingleByteFont(getFont(doc, "T1_0"),
-                "Myriad_Pro_Type1f0encf1cs", new DefaultEventBroadcaster(), params);
-        Assert.assertTrue(Arrays.asList(sbfont.getEncoding().getCharNameMap()).contains("uni004E"));
-        Assert.assertEquals(sbfont.getFontName(), "Myriad_Pro_Type1f0encf1cs");
-        Assert.assertEquals(sbfont.getEncodingName(), null);
-        byte[] is = IOUtils.toByteArray(sbfont.getInputStream());
-
-        CFFParser p = new CFFParser();
-        CFFFont ff = p.parse(new RandomAccessReadBuffer(is)).get(0);
-        Assert.assertEquals(ff.getName(), "MNEACN+Myriad_Pro");
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(FontMergeTestCase.CFF3)) {
+            FOPPDFSingleByteFont sbfont = new FOPPDFSingleByteFont(getFont(doc, "T1_0"),
+                    "Myriad_Pro_Type1f0encf1cs", new DefaultEventBroadcaster(), params);
+            Assert.assertTrue(Arrays.asList(sbfont.getEncoding().getCharNameMap()).contains("uni004E"));
+            Assert.assertEquals(sbfont.getFontName(), "Myriad_Pro_Type1f0encf1cs");
+            Assert.assertEquals(sbfont.getEncodingName(), null);
+            byte[] is = IOUtils.toByteArray(sbfont.getInputStream());
+
+            CFFParser p = new CFFParser();
+            CFFFont ff = p.parse(new RandomAccessReadBuffer(is)).get(0);
+            Assert.assertEquals(ff.getName(), "MNEACN+Myriad_Pro");
 //        Assert.assertEquals(ff.getCharset().getEntries().get(0).getSID(), 391);
-
-        doc.close();
+        }
     }
 
     @Test
     public void testTTCID() throws Exception {
-        PDDocument doc = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTCID1);
-        final String font = "ArialMT_Type0";
-        FOPPDFMultiByteFont mbfont = new FOPPDFMultiByteFont(getFont(doc, "C2_0"), font,
-                new DefaultEventBroadcaster());
-        mbfont.addFont(getFont(doc, "C2_0"));
-        Assert.assertEquals(mbfont.mapChar('t'), 85);
-
-        PDDocument doc2 = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTCID2);
-        String name = mbfont.addFont(getFont(doc2, "C2_0"));
-        Assert.assertEquals(name, font);
-        Assert.assertEquals(mbfont.getFontName(), font);
-        byte[] is = IOUtils.toByteArray(mbfont.getInputStream());
-        Assert.assertEquals(is.length, 59168);
-        doc.close();
-        doc2.close();
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTCID1)) {
+            final String font = "ArialMT_Type0";
+            FOPPDFMultiByteFont mbfont = new FOPPDFMultiByteFont(getFont(doc, "C2_0"), font,
+                    new DefaultEventBroadcaster());
+            mbfont.addFont(getFont(doc, "C2_0"));
+            Assert.assertEquals(mbfont.mapChar('t'), 85);
+
+            try (PDDocument doc2 = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTCID2)) {
+                String name = mbfont.addFont(getFont(doc2, "C2_0"));
+                Assert.assertEquals(name, font);
+                Assert.assertEquals(mbfont.getFontName(), font);
+                byte[] is = IOUtils.toByteArray(mbfont.getInputStream());
+                Assert.assertEquals(is.length, 59168);
+            }
+        }
     }
 
     @Test
     public void testTTSubset() throws Exception {
         final String font = "TimesNewRomanPSMT_TrueType";
-        PDDocument doc = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTSubset1);
-        FOPPDFSingleByteFont mbfont = new FOPPDFSingleByteFont(getFont(doc, "R9"), font,
-                new DefaultEventBroadcaster(), params);
-        mbfont.addFont(getFont(doc, "R9"));
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTSubset1)) {
+            FOPPDFSingleByteFont mbfont = new FOPPDFSingleByteFont(getFont(doc, "R9"), font,
+                    new DefaultEventBroadcaster(), params);
+            mbfont.addFont(getFont(doc, "R9"));
 //        Assert.assertEquals(mbfont.mapChar('t'), 116);
 
-        PDDocument doc2 = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTSubset2);
-        String name = mbfont.addFont(getFont(doc2, "R9"));
-        Assert.assertEquals(name, font);
-        Assert.assertEquals(mbfont.getFontName(), font);
-        byte[] is = IOUtils.toByteArray(mbfont.getInputStream());
-        Assert.assertEquals(is.length, 41104);
-
-        TrueTypeFont trueTypeFont = new TTFParser().parse(new RandomAccessReadBuffer(is));
-        TTFTable ttfTable = trueTypeFont.getTableMap().get("cmap");
-        ByteArrayInputStream bis = new ByteArrayInputStream(is);
-        bis.skip(ttfTable.getOffset() + 21);
-        Assert.assertEquals(bis.read(), 4); //subtableFormat
-
-        doc.close();
-        doc2.close();
+            try (PDDocument doc2 = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTSubset2)) {
+                String name = mbfont.addFont(getFont(doc2, "R9"));
+                Assert.assertEquals(name, font);
+                Assert.assertEquals(mbfont.getFontName(), font);
+                byte[] is = IOUtils.toByteArray(mbfont.getInputStream());
+                Assert.assertEquals(is.length, 41104);
+
+                TrueTypeFont trueTypeFont = new TTFParser().parse(new RandomAccessReadBuffer(is));
+                TTFTable ttfTable = trueTypeFont.getTableMap().get("cmap");
+                ByteArrayInputStream bis = new ByteArrayInputStream(is);
+                bis.skip(ttfTable.getOffset() + 21);
+                Assert.assertEquals(bis.read(), 4); //subtableFormat
+            }
+        }
     }
 
     @Test
     public void testType1Subset() throws Exception {
-        PDDocument doc = PDFBoxAdapterTestCase.load(FontMergeTestCase.Type1Subset1);
-        FOPPDFSingleByteFont mbfont = new FOPPDFSingleByteFont(getFont(doc, "F15"), "",
-                new DefaultEventBroadcaster(), params);
-        mbfont.addFont(getFont(doc, "F15"));
-        PDDocument doc2 = PDFBoxAdapterTestCase.load(FontMergeTestCase.Type1Subset2);
-        mbfont.addFont(getFont(doc2, "F15"));
-        Type1Font f = Type1Font.createWithPFB(mbfont.getInputStream());
-        Set<String> csDict = new TreeSet<String>(f.getCharStringsDict().keySet());
-        Assert.assertEquals(csDict.toString(), "[.notdef, a, d, e, hyphen, l, m, n, p, s, space, t, two, x]");
-        Assert.assertEquals(f.getSubrsArray().size(), 518);
-        Assert.assertEquals(f.getFamilyName(), "Verdana");
-        doc.close();
-        doc2.close();
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(FontMergeTestCase.Type1Subset1)) {
+            FOPPDFSingleByteFont mbfont = new FOPPDFSingleByteFont(getFont(doc, "F15"), "",
+                    new DefaultEventBroadcaster(), params);
+            mbfont.addFont(getFont(doc, "F15"));
+            try (PDDocument doc2 = PDFBoxAdapterTestCase.load(FontMergeTestCase.Type1Subset2)) {
+                mbfont.addFont(getFont(doc2, "F15"));
+                Type1Font f = Type1Font.createWithPFB(mbfont.getInputStream());
+                Set<String> csDict = new TreeSet<String>(f.getCharStringsDict().keySet());
+                Assert.assertEquals(csDict.toString(), "[.notdef, a, d, e, hyphen, l, m, n, p, s, space, t, two, x]");
+                Assert.assertEquals(f.getSubrsArray().size(), 518);
+                Assert.assertEquals(f.getFamilyName(), "Verdana");
+            }
+        }
     }
 
     @Test
     public void testHadMappingOperations() throws IOException {
-        PDDocument pdf = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTCID1);
-        COSDictionary font = getFont(pdf, "C2_0");
-        font.removeItem(COSName.TO_UNICODE);
-        FOPPDFMultiByteFont multiByteFont = new FOPPDFMultiByteFont(font, null, new DefaultEventBroadcaster());
-        Assert.assertTrue(multiByteFont.hadMappingOperations());
-        pdf.close();
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTCID1)) {
+            COSDictionary font = getFont(doc, "C2_0");
+            font.removeItem(COSName.TO_UNICODE);
+            FOPPDFMultiByteFont multiByteFont = new FOPPDFMultiByteFont(font, null, new DefaultEventBroadcaster());
+            Assert.assertTrue(multiByteFont.hadMappingOperations());
+        }
     }
 
     @Test
     public void testMappingNotFound() throws IOException {
-        PDDocument pdf = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTCID1);
-        final COSDictionary fontDict = getFont(pdf, "C2_0");
-        MyFOPPDFMultiByteFont multiByteFont = new MyFOPPDFMultiByteFont(fontDict, null);
-        PDType0Font font = (PDType0Font) multiByteFont.getFontContainer().getFont();
-        GlyphTable glyphTable = ((PDCIDFontType2)font.getDescendantFont()).getTrueTypeFont().getGlyph();
-        glyphTable.setGlyphs(
-                new GlyphData[((PDCIDFontType2) font.getDescendantFont()).getTrueTypeFont().getNumberOfGlyphs() - 1]);
-        IOException ex = Assert.assertThrows(IOException.class, () -> multiByteFont.addFont(fontDict));
-        Assert.assertEquals(ex.getMessage(), "Mapping not found in glyphData");
-        pdf.close();
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTCID1)) {
+            final COSDictionary fontDict = getFont(doc, "C2_0");
+            MyFOPPDFMultiByteFont multiByteFont = new MyFOPPDFMultiByteFont(fontDict, null);
+            PDType0Font font = (PDType0Font) multiByteFont.getFontContainer().getFont();
+            GlyphTable glyphTable = ((PDCIDFontType2) font.getDescendantFont()).getTrueTypeFont().getGlyph();
+            glyphTable.setGlyphs(new GlyphData[
+                    ((PDCIDFontType2) font.getDescendantFont()).getTrueTypeFont().getNumberOfGlyphs() - 1]);
+            IOException ex = Assert.assertThrows(IOException.class, () -> multiByteFont.addFont(fontDict));
+            Assert.assertEquals(ex.getMessage(), "Mapping not found in glyphData");
+        }
     }
 
     private static class MyFOPPDFMultiByteFont extends FOPPDFMultiByteFont {
@@ -259,40 +256,40 @@ public class FOPPDFSingleMultiByteFontTestCase {
 
     @Test
     public void testCmapFormat() throws Exception {
-        PDDocument doc = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTSubset10);
-        FOPPDFSingleByteFont sbfont = new FOPPDFSingleByteFont(getFont(doc, "F1"), "test",
-                new DefaultEventBroadcaster(), params);
-        byte[] bytes = IOUtils.toByteArray(sbfont.getInputStream());
-        TrueTypeFont trueTypeFont = new TTFParser().parse(new RandomAccessReadBuffer(bytes));
-        CmapTable ttfTable = (CmapTable) trueTypeFont.getTableMap().get("cmap");
-        Assert.assertEquals(ttfTable.getCmaps()[0].getPlatformId(), 0);
-        Assert.assertEquals(ttfTable.getCmaps()[1].getPlatformId(), 1);
-        Assert.assertEquals(ttfTable.getCmaps()[2].getPlatformId(), 3);
-        ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
-        bis.skip(ttfTable.getOffset() + 29);
-        Assert.assertEquals(bis.read(), 12); //subtableFormat
-        bis.skip(14);
-        bis.skip(34 * 12);
-        DataInputStream dis = new DataInputStream(bis);
-        Assert.assertEquals(dis.readShort(), 4); //subtableFormat
-        dis.skip(2 * 6);
-        dis.skip(39 * 2); //endCode
-        Assert.assertEquals(dis.readShort(), (short)0xFFFF);
-        dis.skip(2); //reservedPad
-        dis.skip(39 * 2); //startCode
-        Assert.assertEquals(dis.readShort(), (short)0xFFFF);
-        dis.skip(39 * 2); //idDelta
-        Assert.assertEquals(dis.readShort(), 0);
-        dis.skip(39 * 2); //idRangeOffsets
-        Assert.assertEquals(dis.readShort(), 0);
-        Assert.assertEquals(dis.readShort(), 4); //subtableFormat
-        dis.skip(2 * 6);
-        dis.skip(2 * 36); //endCode
-        Assert.assertEquals(dis.readShort(), (short)0xFFFF);
-        dis.skip(2); //reservedPad
-        dis.skip(2 * 36); //startCode
-        Assert.assertEquals(dis.readShort(), (short)0xFFFF);
-        doc.close();
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTSubset10)) {
+            FOPPDFSingleByteFont sbfont = new FOPPDFSingleByteFont(getFont(doc, "F1"), "test",
+                    new DefaultEventBroadcaster(), params);
+            byte[] bytes = IOUtils.toByteArray(sbfont.getInputStream());
+            TrueTypeFont trueTypeFont = new TTFParser().parse(new RandomAccessReadBuffer(bytes));
+            CmapTable ttfTable = (CmapTable) trueTypeFont.getTableMap().get("cmap");
+            Assert.assertEquals(ttfTable.getCmaps()[0].getPlatformId(), 0);
+            Assert.assertEquals(ttfTable.getCmaps()[1].getPlatformId(), 1);
+            Assert.assertEquals(ttfTable.getCmaps()[2].getPlatformId(), 3);
+            ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
+            bis.skip(ttfTable.getOffset() + 29);
+            Assert.assertEquals(bis.read(), 12); //subtableFormat
+            bis.skip(14);
+            bis.skip(34 * 12);
+            DataInputStream dis = new DataInputStream(bis);
+            Assert.assertEquals(dis.readShort(), 4); //subtableFormat
+            dis.skip(2 * 6);
+            dis.skip(39 * 2); //endCode
+            Assert.assertEquals(dis.readShort(), (short) 0xFFFF);
+            dis.skip(2); //reservedPad
+            dis.skip(39 * 2); //startCode
+            Assert.assertEquals(dis.readShort(), (short) 0xFFFF);
+            dis.skip(39 * 2); //idDelta
+            Assert.assertEquals(dis.readShort(), 0);
+            dis.skip(39 * 2); //idRangeOffsets
+            Assert.assertEquals(dis.readShort(), 0);
+            Assert.assertEquals(dis.readShort(), 4); //subtableFormat
+            dis.skip(2 * 6);
+            dis.skip(2 * 36); //endCode
+            Assert.assertEquals(dis.readShort(), (short) 0xFFFF);
+            dis.skip(2); //reservedPad
+            dis.skip(2 * 36); //startCode
+            Assert.assertEquals(dis.readShort(), (short) 0xFFFF);
+        }
     }
 
     @Test
@@ -307,72 +304,70 @@ public class FOPPDFSingleMultiByteFontTestCase {
 
     @Test
     public void testTTMergeGlyphs() throws IOException {
-        PDDocument doc = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTSubset3);
-        FOPPDFSingleByteFont sbFont = new FOPPDFSingleByteFont(getFont(doc, "F1"), "ArialMT_TrueTypecidcmap1",
-                new DefaultEventBroadcaster(), params);
-        PDDocument doc2 = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTSubset5);
-        sbFont.addFont(getFont(doc2, "F1"));
-        doc.close();
-        doc2.close();
-        TrueTypeFont trueTypeFont = new TTFParser().parse(new RandomAccessReadBuffer(sbFont.getInputStream()));
-        List<Integer> contours = new ArrayList<>();
-        for (int i = 0; i < trueTypeFont.getNumberOfGlyphs(); i++) {
-            GlyphData glyphData = trueTypeFont.getGlyph().getGlyph(i);
-            contours.add((int)glyphData.getNumberOfContours());
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTSubset3)) {
+            FOPPDFSingleByteFont sbFont = new FOPPDFSingleByteFont(getFont(doc, "F1"), "ArialMT_TrueTypecidcmap1",
+                    new DefaultEventBroadcaster(), params);
+            try (PDDocument doc2 = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTSubset5)) {
+                sbFont.addFont(getFont(doc2, "F1"));
+            }
+            TrueTypeFont trueTypeFont = new TTFParser().parse(new RandomAccessReadBuffer(sbFont.getInputStream()));
+            List<Integer> contours = new ArrayList<>();
+            for (int i = 0; i < trueTypeFont.getNumberOfGlyphs(); i++) {
+                GlyphData glyphData = trueTypeFont.getGlyph().getGlyph(i);
+                contours.add((int)glyphData.getNumberOfContours());
+            }
+            Assert.assertEquals(contours, Arrays.asList(2, 4, 2, 3, 1, 3));
         }
-        Assert.assertEquals(contours, Arrays.asList(2, 4, 2, 3, 1, 3));
     }
 
     @Test
     public void testPerformance() throws IOException {
-        PDDocument doc = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTSubset3);
-        final int[] calls = {0};
-        FOPPDFSingleByteFont mbfont = new FOPPDFSingleByteFont(getFont(doc, "F1"),
-                "ArialMT_TrueTypecidcmap2", new DefaultEventBroadcaster(), params) {
-            protected void readCmapEntry(Map.Entry<Integer, Integer> entry, TrueTypeFont ttfont,
-                                         MergeTTFonts.Cmap tempCmap,
-                                         Map<Integer, Integer> oldToNewGIMapPerFont) throws IOException {
-                super.readCmapEntry(entry, ttfont, tempCmap, oldToNewGIMapPerFont);
-                calls[0]++;
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTSubset3)) {
+            final int[] calls = {0};
+            FOPPDFSingleByteFont mbfont = new FOPPDFSingleByteFont(getFont(doc, "F1"),
+                    "ArialMT_TrueTypecidcmap2", new DefaultEventBroadcaster(), params) {
+                protected void readCmapEntry(Map.Entry<Integer, Integer> entry, TrueTypeFont ttfont,
+                                             MergeTTFonts.Cmap tempCmap,
+                                             Map<Integer, Integer> oldToNewGIMapPerFont) throws IOException {
+                    super.readCmapEntry(entry, ttfont, tempCmap, oldToNewGIMapPerFont);
+                    calls[0]++;
+                }
+            };
+            try (PDDocument doc2 = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTSubset5)) {
+                mbfont.addFont(getFont(doc2, "F1"));
             }
-        };
-        PDDocument doc2 = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTSubset5);
-        mbfont.addFont(getFont(doc2, "F1"));
-        doc.close();
-        doc2.close();
-        Assert.assertEquals(calls[0], 512);
+            Assert.assertEquals(calls[0], 512);
+        }
     }
 
     @Test
     public void testNoEOFOnValidation() throws IOException {
-        PDDocument doc = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTSubset1);
-        PDDocument doc2 = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTSubset5);
-        PDFBoxEventProducer eventProducer = mock(PDFBoxEventProducer.class);
-        FOPPDFSingleByteFont sbFont = new FOPPDFSingleByteFont(getFont(doc, "R11"), "QOYQBZ+TimesNewRomanPSMT",
-                getEventBroadcaster(eventProducer), params);
-        sbFont.addFont(getFont(doc2, "F1"));
-        doc.close();
-        doc2.close();
-        sbFont.getInputStream();
-        verifyNoEvents(eventProducer);
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTSubset1)) {
+            try (PDDocument doc2 = PDFBoxAdapterTestCase.load(FontMergeTestCase.TTSubset5)) {
+                PDFBoxEventProducer eventProducer = mock(PDFBoxEventProducer.class);
+                FOPPDFSingleByteFont sbFont = new FOPPDFSingleByteFont(getFont(doc, "R11"), "QOYQBZ+TimesNewRomanPSMT",
+                        getEventBroadcaster(eventProducer), params);
+                sbFont.addFont(getFont(doc2, "F1"));
+                sbFont.getInputStream();
+                verifyNoEvents(eventProducer);
+            }
+        }
     }
 
     @Test
     public void testValidationMultiByteFont() throws IOException {
-        PDDocument doc = PDFBoxAdapterTestCase.load("ttsubset11.pdf");
-        PDDocument doc2 = PDFBoxAdapterTestCase.load("ttsubset12.pdf");
-
-        PDFBoxEventProducer eventProducer = mock(PDFBoxEventProducer.class);
-
-        FOPPDFMultiByteFont sbFont = new FOPPDFMultiByteFont(getFont(doc, "C2_0"), "CIDFont+F2",
-                getEventBroadcaster(eventProducer));
-        sbFont.addFont(getFont(doc2, "C2_1"));
+        try (PDDocument doc = PDFBoxAdapterTestCase.load("ttsubset11.pdf")) {
+            try (PDDocument doc2 = PDFBoxAdapterTestCase.load("ttsubset12.pdf")) {
 
-        doc.close();
-        doc2.close();
+                PDFBoxEventProducer eventProducer = mock(PDFBoxEventProducer.class);
 
-        sbFont.getInputStream();
-        verifyNoEvents(eventProducer);
+                FOPPDFMultiByteFont sbFont = new FOPPDFMultiByteFont(getFont(doc, "C2_0"), "CIDFont+F2",
+                        getEventBroadcaster(eventProducer));
+                sbFont.addFont(getFont(doc2, "C2_1"));
+                sbFont.getInputStream();
+                verifyNoEvents(eventProducer);
+            }
+        }
     }
 
     @Test
@@ -454,19 +449,19 @@ public class FOPPDFSingleMultiByteFontTestCase {
     }
 
     private Map<Integer, GlyphData> getGlyphs(String pdf, String fontName) throws IOException {
-        PDDocument doc = PDFBoxAdapterTestCase.load(pdf);
-        PDTrueTypeFont font = (PDTrueTypeFont) doc.getPage(0).getResources().getFont(COSName.getPDFName(fontName));
-        TrueTypeFont ttf = font.getTrueTypeFont();
-        Map<Integer, GlyphData> glyphs = new HashMap<>();
-        for (Map.Entry<Integer, Integer> entry : FOPPDFSingleByteFont.getCharacterCodeToGlyphId(
-                ttf.getCmap().getCmaps()[0]).entrySet()) {
-            GlyphData glyph = ttf.getGlyph().getGlyph(entry.getValue());
-            if (glyph.getNumberOfContours() != 0) {
-                glyphs.put(entry.getKey(), glyph);
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(pdf)) {
+            PDTrueTypeFont font = (PDTrueTypeFont) doc.getPage(0).getResources().getFont(COSName.getPDFName(fontName));
+            TrueTypeFont ttf = font.getTrueTypeFont();
+            Map<Integer, GlyphData> glyphs = new HashMap<>();
+            for (Map.Entry<Integer, Integer> entry : FOPPDFSingleByteFont.getCharacterCodeToGlyphId(
+                    ttf.getCmap().getCmaps()[0]).entrySet()) {
+                GlyphData glyph = ttf.getGlyph().getGlyph(entry.getValue());
+                if (glyph.getNumberOfContours() != 0) {
+                    glyphs.put(entry.getKey(), glyph);
+                }
             }
+            return glyphs;
         }
-        doc.close();
-        return glyphs;
     }
 
     @Test
@@ -496,14 +491,14 @@ public class FOPPDFSingleMultiByteFontTestCase {
         FOPPDFSingleByteFont sbFont = null;
         PDFBoxEventProducer eventProducer = mock(PDFBoxEventProducer.class);
         for (Map.Entry<String, String> entry : pdfs.entrySet()) {
-            PDDocument doc = PDFBoxAdapterTestCase.load(entry.getKey());
-            if (sbFont == null) {
-                sbFont = new FOPPDFSingleByteFont(getFont(doc, entry.getValue()), fontName,
-                        getEventBroadcaster(eventProducer), new PDFMergeFontsParams(remap));
-            } else {
-                sbFont.addFont(getFont(doc, entry.getValue()));
+            try (PDDocument doc = PDFBoxAdapterTestCase.load(entry.getKey())) {
+                if (sbFont == null) {
+                    sbFont = new FOPPDFSingleByteFont(getFont(doc, entry.getValue()), fontName,
+                            getEventBroadcaster(eventProducer), new PDFMergeFontsParams(remap));
+                } else {
+                    sbFont.addFont(getFont(doc, entry.getValue()));
+                }
             }
-            doc.close();
         }
         InputStream is = sbFont.getInputStream();
         verifyNoEvents(eventProducer);
diff --git a/test/java/org/apache/fop/render/pdf/pdfbox/FontMergeTestCase.java b/test/java/org/apache/fop/render/pdf/pdfbox/FontMergeTestCase.java
index d786010..37e21b2 100644
--- a/test/java/org/apache/fop/render/pdf/pdfbox/FontMergeTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/pdfbox/FontMergeTestCase.java
@@ -94,25 +94,24 @@ public class FontMergeTestCase {
     protected static final String TYPE0CFF = "type0cff.pdf";
 
     protected static String writeText(FontInfo fi, String pdf) throws IOException {
-        PDDocument doc = PDFBoxAdapterTestCase.load(pdf);
-        PDPage page = doc.getPage(0);
-        AffineTransform pageAdjust = new AffineTransform();
-        String c = (String) PDFBoxAdapterTestCase.getPDFBoxAdapter(true, false)
-                .createStreamFromPDFBoxPage(doc, page, pdf, pageAdjust, fi, new Rectangle(), new AffineTransform());
-        doc.close();
-        return c;
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(pdf)) {
+            PDPage page = doc.getPage(0);
+            AffineTransform pageAdjust = new AffineTransform();
+            return (String) PDFBoxAdapterTestCase.getPDFBoxAdapter(true, false)
+                    .createStreamFromPDFBoxPage(doc, page, pdf, pageAdjust, fi, new Rectangle(), new AffineTransform());
+        }
     }
 
     @Test
     public void testMergeFontsAndFormXObject() throws IOException {
-        PDDocument doc = PDFBoxAdapterTestCase.load(PDFBoxAdapterTestCase.IMAGE);
-        PDPage page = doc.getPage(0);
-        AffineTransform pageAdjust = new AffineTransform();
-        RuntimeException ex = Assert.assertThrows(RuntimeException.class, () ->
-                PDFBoxAdapterTestCase.getPDFBoxAdapter(true, true).createStreamFromPDFBoxPage(
-                      doc, page, PDFBoxAdapterTestCase.IMAGE, pageAdjust, new FontInfo(), new Rectangle(), pageAdjust));
-        doc.close();
-        assertEquals(ex.getMessage(), "merge-fonts and form-xobject can't both be enabled");
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(PDFBoxAdapterTestCase.IMAGE)) {
+            PDPage page = doc.getPage(0);
+            AffineTransform pageAdjust = new AffineTransform();
+            RuntimeException ex = Assert.assertThrows(RuntimeException.class, () ->
+                    PDFBoxAdapterTestCase.getPDFBoxAdapter(true, true).createStreamFromPDFBoxPage(doc,
+                          page, PDFBoxAdapterTestCase.IMAGE, pageAdjust, new FontInfo(), new Rectangle(), pageAdjust));
+            assertEquals(ex.getMessage(), "merge-fonts and form-xobject can't both be enabled");
+        }
     }
 
     @Test
@@ -208,12 +207,12 @@ public class FontMergeTestCase {
         Map<Integer, PDFArray> pageNumbers = new HashMap<Integer, PDFArray>();
         PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap<>(), new HashMap<>(), pageNumbers,
                 new HashMap<>(), new DefaultEventBroadcaster());
-        PDDocument doc = PDFBoxAdapterTestCase.load(XFORM);
-        PDPage page = doc.getPage(0);
-        AffineTransform pageAdjust = new AffineTransform();
-        Rectangle r = new Rectangle(0, 1650, 842000, 595000);
-        adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, new FontInfo(), r, pageAdjust);
-        doc.close();
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(XFORM)) {
+            PDPage page = doc.getPage(0);
+            AffineTransform pageAdjust = new AffineTransform();
+            Rectangle r = new Rectangle(0, 1650, 842000, 595000);
+            adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, new FontInfo(), r, pageAdjust);
+        }
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         pdfdoc.output(bos);
         Assert.assertFalse(bos.toString(StandardCharsets.UTF_8.name()).contains("/W 5 /H 5 /BPC 8 /CS /RGB ID ÿÿÿ"));
@@ -229,19 +228,18 @@ public class FontMergeTestCase {
 
     @Test
     public void testMergeTT() throws IOException {
-        PDDocument doc = PDFBoxAdapterTestCase.load(TYPE0TT);
-        PDType0Font type0Font = (PDType0Font) doc.getPage(0).getResources().getFont(COSName.getPDFName("C2_0"));
-        PDCIDFontType2 ttf = (PDCIDFontType2) type0Font.getDescendantFont();
-        InputStream originalData = ttf.getTrueTypeFont().getOriginalData();
-        byte[] originalDataBytes = IOUtils.toByteArray(originalData);
-        doc.close();
-
-        MergeTTFonts mergeTTFonts = new MergeTTFonts(null);
-        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
-        map.put(0, 0);
-        mergeTTFonts.readFont(new ByteArrayInputStream(originalDataBytes), null, null, map, true);
-        byte[] mergedData = mergeTTFonts.getMergedFontSubset();
-        Assert.assertArrayEquals(mergedData, originalDataBytes);
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(TYPE0TT)) {
+            PDType0Font type0Font = (PDType0Font) doc.getPage(0).getResources().getFont(COSName.getPDFName("C2_0"));
+            PDCIDFontType2 ttf = (PDCIDFontType2) type0Font.getDescendantFont();
+            InputStream originalData = ttf.getTrueTypeFont().getOriginalData();
+            byte[] originalDataBytes = IOUtils.toByteArray(originalData);
+            MergeTTFonts mergeTTFonts = new MergeTTFonts(null);
+            Map<Integer, Integer> map = new HashMap<Integer, Integer>();
+            map.put(0, 0);
+            mergeTTFonts.readFont(new ByteArrayInputStream(originalDataBytes), null, null, map, true);
+            byte[] mergedData = mergeTTFonts.getMergedFontSubset();
+            Assert.assertArrayEquals(mergedData, originalDataBytes);
+        }
     }
 
     @Test
diff --git a/test/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2AFPTestCase.java b/test/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2AFPTestCase.java
index 9392fab..ae70652 100644
--- a/test/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2AFPTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2AFPTestCase.java
@@ -34,19 +34,19 @@ import org.apache.xmlgraphics.image.loader.impl.ImageRawStream;
 public class ImageConverterPDF2AFPTestCase {
     @Test
     public void testConverter() throws Exception {
-        PDDocument orgdoc = PDFBoxAdapterTestCase.load(PDFBoxAdapterTestCase.ANNOT);
-        String orgPage = IOUtils.toString(orgdoc.getPage(1).getContents(), StandardCharsets.UTF_8);
-        Assert.assertEquals(orgdoc.getNumberOfPages(), 2);
-        ImageInfo info = new ImageInfo("x.pdf#page=2", ImagePDF.MIME_PDF);
-        ImagePDF imagePDF = new ImagePDF(info, orgdoc);
-        ImageConverterPDF2AFP converter = new ImageConverterPDF2AFP();
-        ImageRawStream stream = (ImageRawStream) converter.convert(imagePDF, null);
-        PDDocument doc = Loader.loadPDF(new RandomAccessReadBuffer(stream.createInputStream()));
-        PDPage page = doc.getPage(0);
-        Assert.assertEquals(orgPage, IOUtils.toString(page.getContents(), StandardCharsets.UTF_8));
-        Assert.assertEquals(doc.getNumberOfPages(), 1);
-        Assert.assertEquals(stream.getMimeType(), ImagePDF.MIME_PDF);
-        orgdoc.close();
-        doc.close();
+        try (PDDocument orgdoc = PDFBoxAdapterTestCase.load(PDFBoxAdapterTestCase.ANNOT)) {
+            String orgPage = IOUtils.toString(orgdoc.getPage(1).getContents(), StandardCharsets.UTF_8);
+            Assert.assertEquals(orgdoc.getNumberOfPages(), 2);
+            ImageInfo info = new ImageInfo("x.pdf#page=2", ImagePDF.MIME_PDF);
+            ImagePDF imagePDF = new ImagePDF(info, orgdoc);
+            ImageConverterPDF2AFP converter = new ImageConverterPDF2AFP();
+            ImageRawStream stream = (ImageRawStream) converter.convert(imagePDF, null);
+            try (PDDocument doc = Loader.loadPDF(new RandomAccessReadBuffer(stream.createInputStream()))) {
+                PDPage page = doc.getPage(0);
+                Assert.assertEquals(orgPage, IOUtils.toString(page.getContents(), StandardCharsets.UTF_8));
+                Assert.assertEquals(doc.getNumberOfPages(), 1);
+                Assert.assertEquals(stream.getMimeType(), ImagePDF.MIME_PDF);
+            }
+        }
     }
 }
diff --git a/test/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2DTestCase.java b/test/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2DTestCase.java
index 79ef06f..7585873 100644
--- a/test/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2DTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/pdfbox/ImageConverterPDF2G2DTestCase.java
@@ -66,37 +66,35 @@ public class ImageConverterPDF2G2DTestCase {
     }
 
     private boolean pdfToPS(String pdf, String font) throws IOException, ImageException {
-        PDDocument doc = PDFBoxAdapterTestCase.load(pdf);
-        MyLazyFont lazyFont = new MyLazyFont();
-        pdfToPS(doc, pdf, font, lazyFont);
-        return lazyFont.font.fontUsed;
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(pdf)) {
+            MyLazyFont lazyFont = new MyLazyFont();
+            pdfToPS(doc, pdf, font, lazyFont);
+            return lazyFont.font.fontUsed;
+        }
     }
 
     private void pdfToPS(String pdf, LazyFont lazyFont) throws IOException, ImageException {
-        PDDocument doc = PDFBoxAdapterTestCase.load(pdf);
-        pdfToPS(doc, pdf, "NewsMinIWA-Th", lazyFont);
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(pdf)) {
+            pdfToPS(doc, pdf, "NewsMinIWA-Th", lazyFont);
+        }
     }
 
     private String pdfToPS(PDDocument doc, String pdf, String font, LazyFont lazyFont)
             throws IOException, ImageException {
-        try {
-            ImageConverterPDF2G2D i = new ImageConverterPDF2G2D();
-            ImageInfo imgi = new ImageInfo(pdf, "b");
-            org.apache.xmlgraphics.image.loader.Image img = new ImagePDF(imgi, doc);
-            ImageGraphics2D ig = (ImageGraphics2D) i.convert(img, null);
-            GeneralGraphics2DImagePainter g = (GeneralGraphics2DImagePainter) ig.getGraphics2DImagePainter();
-            g.addFallbackFont(font, lazyFont);
-            ByteArrayOutputStream stream = new ByteArrayOutputStream();
-            PSPDFGraphics2D g2d = (PSPDFGraphics2D)
-                    g.getGraphics(true, new PDFBoxAdapterTestCase.FOPPSGeneratorImpl(stream));
-            Rectangle2D rect = new Rectangle2D.Float(0, 0, 100, 100);
-            GraphicContext gc = new GraphicContext();
-            g2d.setGraphicContext(gc);
-            g.paint(g2d, rect);
-            return stream.toString(StandardCharsets.UTF_8.name());
-        } finally {
-            doc.close();
-        }
+        ImageConverterPDF2G2D i = new ImageConverterPDF2G2D();
+        ImageInfo imgi = new ImageInfo(pdf, "b");
+        org.apache.xmlgraphics.image.loader.Image img = new ImagePDF(imgi, doc);
+        ImageGraphics2D ig = (ImageGraphics2D) i.convert(img, null);
+        GeneralGraphics2DImagePainter g = (GeneralGraphics2DImagePainter) ig.getGraphics2DImagePainter();
+        g.addFallbackFont(font, lazyFont);
+        ByteArrayOutputStream stream = new ByteArrayOutputStream();
+        PSPDFGraphics2D g2d = (PSPDFGraphics2D)
+                g.getGraphics(true, new PDFBoxAdapterTestCase.FOPPSGeneratorImpl(stream));
+        Rectangle2D rect = new Rectangle2D.Float(0, 0, 100, 100);
+        GraphicContext gc = new GraphicContext();
+        g2d.setGraphicContext(gc);
+        g.paint(g2d, rect);
+        return stream.toString(StandardCharsets.UTF_8.name());
     }
 
     static class MyLazyFont extends LazyFont {
@@ -122,36 +120,37 @@ public class ImageConverterPDF2G2DTestCase {
 
     @Test
     public void testPDFToImage() throws IOException, ImageException {
-        PDDocument doc = PDFBoxAdapterTestCase.load(FONTSNOTEMBEDDED);
-        ImageInfo imgi = new ImageInfo(FONTSNOTEMBEDDED, "b");
-        org.apache.xmlgraphics.image.loader.Image img = new ImagePDF(imgi, doc);
-        ImageConverterPDF2G2D imageConverterPDF2G2D = new ImageConverterPDF2G2D();
-        ImageGraphics2D fopGraphics2D = (ImageGraphics2D) imageConverterPDF2G2D.convert(img, null);
-        BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
-        Graphics2D graphics2D = image.createGraphics();
-        fopGraphics2D.getGraphics2DImagePainter().paint(graphics2D, new Rectangle(0, 0, 1000, 1000));
-        doc.close();
-        Assert.assertEquals(graphics2D.getTransform().getScaleX(), 1.63, 0);
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(FONTSNOTEMBEDDED)) {
+            ImageInfo imgi = new ImageInfo(FONTSNOTEMBEDDED, "b");
+            org.apache.xmlgraphics.image.loader.Image img = new ImagePDF(imgi, doc);
+            ImageConverterPDF2G2D imageConverterPDF2G2D = new ImageConverterPDF2G2D();
+            ImageGraphics2D fopGraphics2D = (ImageGraphics2D) imageConverterPDF2G2D.convert(img, null);
+            BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
+            Graphics2D graphics2D = image.createGraphics();
+            fopGraphics2D.getGraphics2DImagePainter().paint(graphics2D, new Rectangle(0, 0, 1000, 1000));
+            Assert.assertEquals(graphics2D.getTransform().getScaleX(), 1.63, 0);
+        }
     }
 
     @Test
     public void testCheckImageMask() throws IOException, ImageException {
         String pdf = FontMergeTestCase.CFFCID1;
-        PDDocument doc = PDFBoxAdapterTestCase.load(pdf);
-        COSStream cosStream = new COSStream();
-        OutputStream outputStream = cosStream.createOutputStream();
-        outputStream.write("/Fm0 Do\n".getBytes(StandardCharsets.UTF_8));
-        outputStream.close();
-        PDStream pdStream = new PDStream(cosStream);
-        doc.getPage(0).setContents(pdStream);
-
-        PDXObject form = doc.getPage(0).getResources().getXObject(COSName.getPDFName("Fm0"));
-        OutputStream formStream = form.getCOSObject().createOutputStream();
-        formStream.write("1 g".getBytes(StandardCharsets.UTF_8));
-        formStream.close();
-
-        String ps = pdfToPS(doc, pdf, null, null);
-        Assert.assertTrue(ps.contains("/ImageType 1"));
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(pdf)) {
+            COSStream cosStream = new COSStream();
+            OutputStream outputStream = cosStream.createOutputStream();
+            outputStream.write("/Fm0 Do\n".getBytes(StandardCharsets.UTF_8));
+            outputStream.close();
+            PDStream pdStream = new PDStream(cosStream);
+            doc.getPage(0).setContents(pdStream);
+
+            PDXObject form = doc.getPage(0).getResources().getXObject(COSName.getPDFName("Fm0"));
+            OutputStream formStream = form.getCOSObject().createOutputStream();
+            formStream.write("1 g".getBytes(StandardCharsets.UTF_8));
+            formStream.close();
+
+            String ps = pdfToPS(doc, pdf, null, null);
+            Assert.assertTrue(ps.contains("/ImageType 1"));
+        }
     }
 
     @Test
diff --git a/test/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapterTestCase.java b/test/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapterTestCase.java
index 82afb7d..a79e53a 100644
--- a/test/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapterTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapterTestCase.java
@@ -137,13 +137,14 @@ public class PDFBoxAdapterTestCase {
     public void testTaggedPDFWriter() throws IOException {
         PDFBoxAdapter adapter = getPDFBoxAdapter(false, false);
         adapter.setCurrentMCID(5);
-        PDDocument doc = load(HELLOTagged);
-        PDPage page = doc.getPage(0);
-        AffineTransform pageAdjust = new AffineTransform();
-        Rectangle r = new Rectangle(0, 1650, 842000, 595000);
-        String stream = (String) adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, null, r, pageAdjust);
-        assertTrue(stream, stream.contains("/P <</MCID 5 >>BDC"));
-        doc.close();
+        try (PDDocument doc = load(HELLOTagged)) {
+            PDPage page = doc.getPage(0);
+            AffineTransform pageAdjust = new AffineTransform();
+            Rectangle r = new Rectangle(0, 1650, 842000, 595000);
+            String stream = (String)
+                    adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, null, r, pageAdjust);
+            assertTrue(stream, stream.contains("/P <</MCID 5 >>BDC"));
+        }
     }
 
     @Test
@@ -154,32 +155,32 @@ public class PDFBoxAdapterTestCase {
         pdfpage.setObjectNumber(1);
         PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap<>(), new HashMap<>(), new HashMap<>(),
                 new HashMap<>(), new DefaultEventBroadcaster());
-        PDDocument doc = load(ANNOT);
-        PDPage page = doc.getPage(0);
-        AffineTransform pageAdjust = new AffineTransform();
-        Rectangle r = new Rectangle(0, 1650, 842000, 595000);
-        ByteArrayOutputStream os = new ByteArrayOutputStream();
-        pdfdoc.output(os);
-        os.reset();
-        adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, null, r, pageAdjust);
-        pdfdoc.outputTrailer(os);
-        assertTrue(os.toString(StandardCharsets.UTF_8.name()).contains("/Fields ["));
-        doc.close();
+        try (PDDocument doc = load(ANNOT)) {
+            PDPage page = doc.getPage(0);
+            AffineTransform pageAdjust = new AffineTransform();
+            Rectangle r = new Rectangle(0, 1650, 842000, 595000);
+            ByteArrayOutputStream os = new ByteArrayOutputStream();
+            pdfdoc.output(os);
+            os.reset();
+            adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, null, r, pageAdjust);
+            pdfdoc.outputTrailer(os);
+            assertTrue(os.toString(StandardCharsets.UTF_8.name()).contains("/Fields ["));
+        }
     }
 
     @Test
     public void testAnnot2() throws Exception {
         PDFBoxAdapter adapter = getPDFBoxAdapter(false, false);
-        PDDocument doc = load(ANNOT);
-        PDPage page = doc.getPage(0);
-        COSArray annots = (COSArray) page.getCOSObject().getDictionaryObject(COSName.ANNOTS);
-        COSDictionary dict = (COSDictionary) ((COSObject)annots.get(0)).getObject();
-        dict.setItem(COSName.PARENT, COSInteger.ONE);
+        try (PDDocument doc = load(ANNOT)) {
+            PDPage page = doc.getPage(0);
+            COSArray annots = (COSArray) page.getCOSObject().getDictionaryObject(COSName.ANNOTS);
+            COSDictionary dict = (COSDictionary) ((COSObject) annots.get(0)).getObject();
+            dict.setItem(COSName.PARENT, COSInteger.ONE);
 
-        AffineTransform pageAdjust = new AffineTransform();
-        Rectangle r = new Rectangle(0, 1650, 842000, 595000);
-        adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, null, r, pageAdjust);
-        doc.close();
+            AffineTransform pageAdjust = new AffineTransform();
+            Rectangle r = new Rectangle(0, 1650, 842000, 595000);
+            adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, null, r, pageAdjust);
+        }
     }
 
 
@@ -191,17 +192,17 @@ public class PDFBoxAdapterTestCase {
         pdfpage.setObjectNumber(1);
         PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap<>(), new HashMap<>(), new HashMap<>(),
                 new HashMap<>(), new DefaultEventBroadcaster());
-        PDDocument doc = load(ACCESSIBLERADIOBUTTONS);
-        PDPage page = doc.getPage(0);
-        AffineTransform pageAdjust = new AffineTransform();
-        Rectangle r = new Rectangle(0, 1650, 842000, 595000);
-        adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, null, r, pageAdjust);
-        ByteArrayOutputStream os = new ByteArrayOutputStream();
-        pdfdoc.output(os);
-        String out = os.toString(StandardCharsets.UTF_8.name());
-        assertTrue(out.contains("/Parent "));
-        assertTrue(out.contains("/Kids "));
-        doc.close();
+        try (PDDocument doc = load(ACCESSIBLERADIOBUTTONS)) {
+            PDPage page = doc.getPage(0);
+            AffineTransform pageAdjust = new AffineTransform();
+            Rectangle r = new Rectangle(0, 1650, 842000, 595000);
+            adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, null, r, pageAdjust);
+            ByteArrayOutputStream os = new ByteArrayOutputStream();
+            pdfdoc.output(os);
+            String out = os.toString(StandardCharsets.UTF_8.name());
+            assertTrue(out.contains("/Parent "));
+            assertTrue(out.contains("/Kids "));
+        }
     }
 
     @Test
@@ -212,18 +213,18 @@ public class PDFBoxAdapterTestCase {
         pdfpage.setObjectNumber(1);
         PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap<>(), new HashMap<>(), new HashMap<>(),
                 new HashMap<>(), new DefaultEventBroadcaster());
-        PDDocument doc = load(ACCESSIBLERADIOBUTTONS);
-        COSArray fields = (COSArray)
-                doc.getDocumentCatalog().getAcroForm().getCOSObject().getDictionaryObject(COSName.FIELDS);
-        fields.remove(0);
-        PDPage page = doc.getPage(0);
-        AffineTransform pageAdjust = new AffineTransform();
-        Rectangle r = new Rectangle(0, 1650, 842000, 595000);
-        adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, null, r, pageAdjust);
-        ByteArrayOutputStream os = new ByteArrayOutputStream();
-        pdfdoc.outputTrailer(os);
-        assertTrue(os.toString(StandardCharsets.UTF_8.name()).contains("/Fields []"));
-        doc.close();
+        try (PDDocument doc = load(ACCESSIBLERADIOBUTTONS)) {
+            COSArray fields = (COSArray)
+                    doc.getDocumentCatalog().getAcroForm().getCOSObject().getDictionaryObject(COSName.FIELDS);
+            fields.remove(0);
+            PDPage page = doc.getPage(0);
+            AffineTransform pageAdjust = new AffineTransform();
+            Rectangle r = new Rectangle(0, 1650, 842000, 595000);
+            adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, null, r, pageAdjust);
+            ByteArrayOutputStream os = new ByteArrayOutputStream();
+            pdfdoc.outputTrailer(os);
+            assertTrue(os.toString(StandardCharsets.UTF_8.name()).contains("/Fields []"));
+        }
     }
 
     @Test
@@ -234,16 +235,16 @@ public class PDFBoxAdapterTestCase {
         pdfpage.setObjectNumber(1);
         PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap<>(), new HashMap<>(), new HashMap<>(),
                 new HashMap<>(), new DefaultEventBroadcaster());
-        PDDocument doc = load(ACCESSIBLERADIOBUTTONS);
-        doc.getDocumentCatalog().getAcroForm().getCOSObject().removeItem(COSName.FIELDS);
-        PDPage page = doc.getPage(0);
-        AffineTransform pageAdjust = new AffineTransform();
-        Rectangle r = new Rectangle(0, 1650, 842000, 595000);
-        adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, null, r, pageAdjust);
-        ByteArrayOutputStream os = new ByteArrayOutputStream();
-        pdfdoc.outputTrailer(os);
-        assertTrue(os.toString(StandardCharsets.UTF_8.name()).contains("/Fields []"));
-        doc.close();
+        try (PDDocument doc = load(ACCESSIBLERADIOBUTTONS)) {
+            doc.getDocumentCatalog().getAcroForm().getCOSObject().removeItem(COSName.FIELDS);
+            PDPage page = doc.getPage(0);
+            AffineTransform pageAdjust = new AffineTransform();
+            Rectangle r = new Rectangle(0, 1650, 842000, 595000);
+            adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, null, r, pageAdjust);
+            ByteArrayOutputStream os = new ByteArrayOutputStream();
+            pdfdoc.outputTrailer(os);
+            assertTrue(os.toString(StandardCharsets.UTF_8.name()).contains("/Fields []"));
+        }
     }
 
     @Test
@@ -255,16 +256,17 @@ public class PDFBoxAdapterTestCase {
         Map<Integer, PDFArray> pageNumbers = new HashMap<Integer, PDFArray>();
         PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap<>(), new HashMap<>(), pageNumbers,
                 new HashMap<>(), new DefaultEventBroadcaster());
-        PDDocument doc = load(LINK);
-        PDPage page = doc.getPage(0);
-        AffineTransform pageAdjust = new AffineTransform();
-        Rectangle r = new Rectangle(0, 1650, 842000, 595000);
-        String stream = (String) adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, null, r, pageAdjust);
-        assertTrue(stream.contains("/Link <</MCID 5 >>BDC"));
-        assertEquals(pageNumbers.size(), 4);
-        PDFAnnotList annots = (PDFAnnotList) pdfpage.get("Annots");
-        assertEquals(annots.toPDFString(), "[\n1 0 R\n2 0 R\n]");
-        doc.close();
+        try (PDDocument doc = load(LINK)) {
+            PDPage page = doc.getPage(0);
+            AffineTransform pageAdjust = new AffineTransform();
+            Rectangle r = new Rectangle(0, 1650, 842000, 595000);
+            String stream = (String)
+                    adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, null, r, pageAdjust);
+            assertTrue(stream.contains("/Link <</MCID 5 >>BDC"));
+            assertEquals(pageNumbers.size(), 4);
+            PDFAnnotList annots = (PDFAnnotList) pdfpage.get("Annots");
+            assertEquals(annots.toPDFString(), "[\n1 0 R\n2 0 R\n]");
+        }
     }
 
     @Test
@@ -381,8 +383,9 @@ public class PDFBoxAdapterTestCase {
     }
 
     private void loadPage(PDFDocument pdfdoc, String src) throws IOException {
-        PDDocument doc = load(src);
-        loadPage(pdfdoc, doc, new Rectangle());
+        try (PDDocument doc = load(src)) {
+            loadPage(pdfdoc, doc, new Rectangle());
+        }
     }
 
     private PDFPage loadPage(PDFDocument pdfdoc, PDDocument doc, Rectangle destRect) throws IOException {
@@ -399,34 +402,32 @@ public class PDFBoxAdapterTestCase {
                 new HashMap<>(), new DefaultEventBroadcaster());
         PDPage page = doc.getPage(0);
         AffineTransform pageAdjust = new AffineTransform();
-        Object object = adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, null, destRect, generatorAT);
-        doc.close();
-
-        return object;
+        return adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, null, destRect, generatorAT);
     }
 
     @Test
     public void testPDFBoxImageHandler() throws Exception {
         ImageInfo imgi = new ImageInfo("a", "b");
-        PDDocument doc = load(SHADING);
-        ImagePDF img = new ImagePDF(imgi, doc);
-        PDFDocument pdfdoc = new PDFDocument("");
-        PDFPage pdfpage = getPDFPage(pdfdoc);
-        pdfpage.setDocument(pdfdoc);
-        PDFGState g = new PDFGState();
-        pdfdoc.assignObjectNumber(g);
-        pdfpage.addGState(g);
-        PDFContentGenerator con = new PDFContentGenerator(pdfdoc, null, null);
-        FOUserAgent mockedAgent = mock(FOUserAgent.class);
-        when(mockedAgent.isAccessibilityEnabled()).thenReturn(false);
-        when(mockedAgent.getPDFObjectCache()).thenReturn(new SoftMapCache(true));
-        PDFRenderingContext c = new PDFRenderingContext(mockedAgent, con, pdfpage, null);
-        c.setPageNumbers(new HashMap<Integer, PDFArray>());
-        new PDFBoxImageHandler().handleImage(c, img, new Rectangle(0, 0, 100, 100));
-        PDFResources res = c.getPage().getPDFResources();
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        res.output(bos);
-        assertTrue(bos.toString(StandardCharsets.UTF_8.name()).contains("/ExtGState << /GS1"));
+        try (PDDocument doc = load(SHADING)) {
+            ImagePDF img = new ImagePDF(imgi, doc);
+            PDFDocument pdfdoc = new PDFDocument("");
+            PDFPage pdfpage = getPDFPage(pdfdoc);
+            pdfpage.setDocument(pdfdoc);
+            PDFGState g = new PDFGState();
+            pdfdoc.assignObjectNumber(g);
+            pdfpage.addGState(g);
+            PDFContentGenerator con = new PDFContentGenerator(pdfdoc, null, null);
+            FOUserAgent mockedAgent = mock(FOUserAgent.class);
+            when(mockedAgent.isAccessibilityEnabled()).thenReturn(false);
+            when(mockedAgent.getPDFObjectCache()).thenReturn(new SoftMapCache(true));
+            PDFRenderingContext c = new PDFRenderingContext(mockedAgent, con, pdfpage, null);
+            c.setPageNumbers(new HashMap<Integer, PDFArray>());
+            new PDFBoxImageHandler().handleImage(c, img, new Rectangle(0, 0, 100, 100));
+            PDFResources res = c.getPage().getPDFResources();
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            res.output(bos);
+            assertTrue(bos.toString(StandardCharsets.UTF_8.name()).contains("/ExtGState << /GS1"));
+        }
     }
 
     @Test
@@ -468,12 +469,11 @@ public class PDFBoxAdapterTestCase {
             pdfpage.setDocument(pdfdoc);
             PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, objectCachePerFile, null, new HashMap<>(),
                     pdfCache, new DefaultEventBroadcaster());
-            PDDocument doc = load(pdf);
-            PDPage page = doc.getPage(0);
-            String stream = (String) adapter.createStreamFromPDFBoxPage(
-                    doc, page, pdf, new AffineTransform(), null, new Rectangle(), new AffineTransform());
-            doc.close();
-            return stream;
+            try (PDDocument doc = load(pdf)) {
+                PDPage page = doc.getPage(0);
+                return (String) adapter.createStreamFromPDFBoxPage(
+                        doc, page, pdf, new AffineTransform(), null, new Rectangle(), new AffineTransform());
+            }
         }
     }
 
@@ -490,12 +490,13 @@ public class PDFBoxAdapterTestCase {
 
     @Test
     public void testErrorMsgToPS() throws IOException {
-        PDDocument doc = new PDDocument();
-        PDPage page = new PDPage();
-        page.setContents(new PDStream(doc, new ByteArrayInputStream("<".getBytes(StandardCharsets.UTF_8))));
-        doc.addPage(page);
-        RuntimeException ex = Assert.assertThrows(RuntimeException.class, () -> pdfToPCL(doc, ERROR));
-        assertTrue(ex.getMessage().startsWith("Error while painting PDF page: " + ERROR));
+        try (PDDocument doc = new PDDocument()) {
+            PDPage page = new PDPage();
+            page.setContents(new PDStream(doc, new ByteArrayInputStream("<".getBytes(StandardCharsets.UTF_8))));
+            doc.addPage(page);
+            RuntimeException ex = Assert.assertThrows(RuntimeException.class, () -> pdfToPCL(doc, ERROR));
+            assertTrue(ex.getMessage().startsWith("Error while painting PDF page: " + ERROR));
+        }
     }
 
     @Test
@@ -511,43 +512,45 @@ public class PDFBoxAdapterTestCase {
 
     @Test
     public void testNoPageResource() throws IOException {
-        PDDocument doc = load(FontMergeTestCase.CFF1);
-        PDPage page = doc.getPage(0);
-        page.setResources(null);
-        AffineTransform pageAdjust = new AffineTransform();
-        getPDFBoxAdapter(false, false).createStreamFromPDFBoxPage(
-                doc, page, FontMergeTestCase.CFF1, pageAdjust, new FontInfo(), new Rectangle(), pageAdjust);
-        doc.close();
+        try (PDDocument doc = load(FontMergeTestCase.CFF1)) {
+            PDPage page = doc.getPage(0);
+            page.setResources(null);
+            AffineTransform pageAdjust = new AffineTransform();
+            getPDFBoxAdapter(false, false).createStreamFromPDFBoxPage(
+                    doc, page, FontMergeTestCase.CFF1, pageAdjust, new FontInfo(), new Rectangle(), pageAdjust);
+        }
     }
 
     @Test
     public void testPDFBoxImageHandlerAccessibilityEnabled() throws Exception {
         ImageInfo imgi = new ImageInfo("a", "b");
-        PDDocument doc = load(SHADING);
-        ImagePDF img = new ImagePDF(imgi, doc);
-        PDFDocument pdfdoc = new PDFDocument("");
-        PDFPage pdfpage = getPDFPage(pdfdoc);
-        pdfpage.setDocument(pdfdoc);
-        PDFContentGenerator con = new PDFContentGenerator(pdfdoc, null, null);
-        FOUserAgent mockedAgent = mock(FOUserAgent.class);
-        when(mockedAgent.isAccessibilityEnabled()).thenReturn(true);
-        when(mockedAgent.getPDFObjectCache()).thenReturn(new SoftMapCache(true));
-        PDFRenderingContext c = new PDFRenderingContext(mockedAgent, con, pdfpage, null);
-        c.setPageNumbers(new HashMap<Integer, PDFArray>());
-        new PDFBoxImageHandler().handleImage(c, img, new Rectangle());
+        try (PDDocument doc = load(SHADING)) {
+            ImagePDF img = new ImagePDF(imgi, doc);
+            PDFDocument pdfdoc = new PDFDocument("");
+            PDFPage pdfpage = getPDFPage(pdfdoc);
+            pdfpage.setDocument(pdfdoc);
+            PDFContentGenerator con = new PDFContentGenerator(pdfdoc, null, null);
+            FOUserAgent mockedAgent = mock(FOUserAgent.class);
+            when(mockedAgent.isAccessibilityEnabled()).thenReturn(true);
+            when(mockedAgent.getPDFObjectCache()).thenReturn(new SoftMapCache(true));
+            PDFRenderingContext c = new PDFRenderingContext(mockedAgent, con, pdfpage, null);
+            c.setPageNumbers(new HashMap<Integer, PDFArray>());
+            new PDFBoxImageHandler().handleImage(c, img, new Rectangle());
+        }
     }
 
     @Test
     public void testFormXObject() throws IOException {
-        PDDocument doc = load(IMAGE);
-        PDPage page = doc.getPage(0);
-        AffineTransform pageAdjust = new AffineTransform();
-        PDFFormXObject formXObject = (PDFFormXObject) getPDFBoxAdapter(false, true)
-                .createStreamFromPDFBoxPage(doc, page, IMAGE, pageAdjust, new FontInfo(), new Rectangle(), pageAdjust);
-        doc.close();
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        formXObject.output(bos);
-        assertTrue(bos.toString(StandardCharsets.UTF_8.name()).contains("/Type /XObject"));
+        try (PDDocument doc = load(IMAGE)) {
+            PDPage page = doc.getPage(0);
+            AffineTransform pageAdjust = new AffineTransform();
+            PDFFormXObject formXObject = (PDFFormXObject) getPDFBoxAdapter(false, true)
+                    .createStreamFromPDFBoxPage(doc, page, IMAGE, pageAdjust, new FontInfo(), new Rectangle(),
+                            pageAdjust);
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            formXObject.output(bos);
+            assertTrue(bos.toString(StandardCharsets.UTF_8.name()).contains("/Type /XObject"));
+        }
     }
 
     @Test
@@ -562,20 +565,20 @@ public class PDFBoxAdapterTestCase {
         pdfpage.setObjectNumber(1);
         PDFBoxAdapter adapter = new PDFBoxAdapter(pdfpage, new HashMap<>(), new HashMap<>(), new HashMap<>(),
                 new HashMap<>(), new DefaultEventBroadcaster());
-        PDDocument doc = load(pdf);
-        PDPage page = doc.getPage(0);
-        AffineTransform pageAdjust = new AffineTransform();
-        Rectangle r = new Rectangle(0, 1650, 842000, 595000);
-        adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, null, r, pageAdjust);
-        ByteArrayOutputStream os = new ByteArrayOutputStream();
-        Map<String, List<String>> filterMap = new HashMap<String, List<String>>();
-        List<String> filterList = new ArrayList<String>();
-        filterList.add("null");
-        filterMap.put("default", filterList);
-        pdfdoc.setFilterMap(filterMap);
-        pdfdoc.output(os);
-        doc.close();
-        return os.toString(StandardCharsets.UTF_8.name());
+        try (PDDocument doc = load(pdf)) {
+            PDPage page = doc.getPage(0);
+            AffineTransform pageAdjust = new AffineTransform();
+            Rectangle r = new Rectangle(0, 1650, 842000, 595000);
+            adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, null, r, pageAdjust);
+            ByteArrayOutputStream os = new ByteArrayOutputStream();
+            Map<String, List<String>> filterMap = new HashMap<String, List<String>>();
+            List<String> filterList = new ArrayList<String>();
+            filterList.add("null");
+            filterMap.put("default", filterList);
+            pdfdoc.setFilterMap(filterMap);
+            pdfdoc.output(os);
+            return os.toString(StandardCharsets.UTF_8.name());
+        }
     }
 
     @Test
@@ -633,12 +636,12 @@ public class PDFBoxAdapterTestCase {
 
     private PDFPage drawAnnot(PDFDocument pdfDoc, Map<String, Object> usedFields, String pdf) throws Exception {
         PDFBoxAdapter adapter = getPDFBoxAdapter(pdfDoc, false, false, true, usedFields);
-        PDDocument input = load(pdf);
-        PDPage srcPage = input.getPage(0);
-        AffineTransform pageAdjust = new AffineTransform();
-        Rectangle r = new Rectangle(0, 1650, 842000, 595000);
-        adapter.createStreamFromPDFBoxPage(input, srcPage, "key", pageAdjust, null, r, pageAdjust);
-        input.close();
+        try (PDDocument input = load(pdf)) {
+            PDPage srcPage = input.getPage(0);
+            AffineTransform pageAdjust = new AffineTransform();
+            Rectangle r = new Rectangle(0, 1650, 842000, 595000);
+            adapter.createStreamFromPDFBoxPage(input, srcPage, "key", pageAdjust, null, r, pageAdjust);
+        }
         return adapter.getTargetPage();
     }
 
@@ -652,8 +655,6 @@ public class PDFBoxAdapterTestCase {
         pdfDoc.outputHeader(os);
         pdfDoc.output(os);
         pdfDoc.outputTrailer(os);
-        PDDocument out = Loader.loadPDF(os.toByteArray());
-        out.close();
         String id1 = "30 0 R";
         assertEquals(getAnnotationsID(page1), id1);
         String id2 = "33 0 R";
@@ -669,68 +670,72 @@ public class PDFBoxAdapterTestCase {
 
     @Test
     public void testPreservePropertyNames() throws Exception {
-        PDDocument doc = load(FontMergeTestCase.CFF1);
-        COSDictionary properties = new COSDictionary();
-        properties.setItem(COSName.S, COSName.S);
-        doc.getPage(0).getResources().getCOSObject().setItem(COSName.PROPERTIES, properties);
-        PDFDocument pdfdoc = new PDFDocument("");
-        PDFPage page = loadPage(pdfdoc, doc, new Rectangle());
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        page.getPDFResources().output(bos);
-        assertTrue(bos.toString(StandardCharsets.UTF_8.name()).contains("/Properties << /S /S >>"));
+        try (PDDocument doc = load(FontMergeTestCase.CFF1)) {
+            COSDictionary properties = new COSDictionary();
+            properties.setItem(COSName.S, COSName.S);
+            doc.getPage(0).getResources().getCOSObject().setItem(COSName.PROPERTIES, properties);
+            PDFDocument pdfdoc = new PDFDocument("");
+            PDFPage page = loadPage(pdfdoc, doc, new Rectangle());
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            page.getPDFResources().output(bos);
+            assertTrue(bos.toString(StandardCharsets.UTF_8.name()).contains("/Properties << /S /S >>"));
+        }
     }
 
     @Test
     public void testPatternMatrix() throws Exception {
-        PDDocument doc = load(SHADING);
-        PDFDocument pdfdoc = new PDFDocument("");
-        Rectangle destRect = new Rectangle(0, 1650, 274818, 174879);
-        loadPage(pdfdoc, doc, destRect);
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        pdfdoc.output(bos);
-        String outStr = removeWhiteSpace(bos);
-        assertTrue(outStr.contains("<<\n"
-                + "/Type /Pattern\n"
-                + "/PatternType 2\n"
-                + "/Shading 2 0 R\n"
-                + "/Matrix [53.8858833313 0 0 -26.4968185425 72.7459411621 -20.8601989746]\n"
-                + ">>"));
+        try (PDDocument doc = load(SHADING)) {
+            PDFDocument pdfdoc = new PDFDocument("");
+            Rectangle destRect = new Rectangle(0, 1650, 274818, 174879);
+            loadPage(pdfdoc, doc, destRect);
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            pdfdoc.output(bos);
+            String outStr = removeWhiteSpace(bos);
+            assertTrue(outStr.contains("<<\n"
+                    + "/Type /Pattern\n"
+                    + "/PatternType 2\n"
+                    + "/Shading 2 0 R\n"
+                    + "/Matrix [53.8858833313 0 0 -26.4968185425 72.7459411621 -20.8601989746]\n"
+                    + ">>"));
+        }
     }
 
     @Test
     public void testPatternMatrixWithPageAdjust() throws Exception {
-        PDDocument doc = load(SHADING);
-        PDFDocument pdfdoc = new PDFDocument("");
-        Rectangle destRect = new Rectangle(0, 1650, 274818, 174879);
-        PDFPage pdfpage = getPDFPage(pdfdoc);
-        AffineTransform generatorAT = AffineTransform.getTranslateInstance(0, 100);
-        createStreamFromPDFBoxPage(pdfpage, pdfdoc, doc, destRect, generatorAT);
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        pdfdoc.output(bos);
-        String outStr = removeWhiteSpace(bos);
-        assertTrue(outStr.contains("<<\n"
-                + "/Type /Pattern\n/PatternType 2\n/Shading 2 0 R\n"
-                + "/Matrix [53.8858833313 0 0 -26.4968185425 72.7459411621 -120.8601837158]\n"
-                + ">>"));
+        try (PDDocument doc = load(SHADING)) {
+            PDFDocument pdfdoc = new PDFDocument("");
+            Rectangle destRect = new Rectangle(0, 1650, 274818, 174879);
+            PDFPage pdfpage = getPDFPage(pdfdoc);
+            AffineTransform generatorAT = AffineTransform.getTranslateInstance(0, 100);
+            createStreamFromPDFBoxPage(pdfpage, pdfdoc, doc, destRect, generatorAT);
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            pdfdoc.output(bos);
+            String outStr = removeWhiteSpace(bos);
+            assertTrue(outStr.contains("<<\n"
+                    + "/Type /Pattern\n/PatternType 2\n/Shading 2 0 R\n"
+                    + "/Matrix [53.8858833313 0 0 -26.4968185425 72.7459411621 -120.8601837158]\n"
+                    + ">>"));
+        }
     }
 
     @Test
     public void testPatternMatrixFormXObject() throws Exception {
-        PDDocument doc = load(SHADING);
-        PDFDocument pdfdoc = new PDFDocument("");
-        pdfdoc.setFormXObjectEnabled(true);
-        Rectangle destRect = new Rectangle(0, 1650, 274818, 174879);
-        loadPage(pdfdoc, doc, destRect);
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        pdfdoc.output(bos);
-        String outStr = removeWhiteSpace(bos);
-        assertTrue(outStr.contains("/Pattern << /Pa1 12 0 R /Pa2 13 0 R >>"));
-        assertTrue(outStr.contains("<<\n"
-                + "/Type /Pattern\n"
-                + "/PatternType 2\n"
-                + "/Shading 2 0 R\n"
-                + "/Matrix [120 0 0 -120 162 705]\n"
-                + ">>"));
+        try (PDDocument doc = load(SHADING)) {
+            PDFDocument pdfdoc = new PDFDocument("");
+            pdfdoc.setFormXObjectEnabled(true);
+            Rectangle destRect = new Rectangle(0, 1650, 274818, 174879);
+            loadPage(pdfdoc, doc, destRect);
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            pdfdoc.output(bos);
+            String outStr = removeWhiteSpace(bos);
+            assertTrue(outStr.contains("/Pattern << /Pa1 12 0 R /Pa2 13 0 R >>"));
+            assertTrue(outStr.contains("<<\n"
+                    + "/Type /Pattern\n"
+                    + "/PatternType 2\n"
+                    + "/Shading 2 0 R\n"
+                    + "/Matrix [120 0 0 -120 162 705]\n"
+                    + ">>"));
+        }
     }
 
     @Test
@@ -747,22 +752,23 @@ public class PDFBoxAdapterTestCase {
         PDFDocument pdfdoc = new PDFDocument("");
         pdfdoc.setFormXObjectEnabled(true);
         PDFPage pdfPage = getPDFPage(pdfdoc);
-        PDDocument pdDoc = load(SHADING);
-        PDPage page = pdDoc.getPage(0);
-        page.setCropBox(new PDRectangle(600, 500, 1200, 800));
-        page.setRotation(rotation);
-
-        PDFFormXObject form = (PDFFormXObject) createStreamFromPDFBoxPage(pdfPage, pdfdoc, pdDoc,
-                new Rectangle(0, 0, 274818, 174879), new AffineTransform());
-
-        AffineTransform at = form.getMatrix();
-        String message = "Value must be calculated based on the rotation";
-        assertEquals(message, scaleX, at.getScaleX(), 0.001); //m00
-        assertEquals(message, shearX, at.getShearX(), 0.001); //m01
-        assertEquals(message, translateX, at.getTranslateX(), 0.001); //m02
-        assertEquals(message, shearY, at.getShearY(), 0.001); //m10
-        assertEquals(message, scaleY, at.getScaleY(), 0.001); //m11
-        assertEquals(message, translateY, at.getTranslateY(), 0.001); //m12
+        try (PDDocument pdDoc = load(SHADING)) {
+            PDPage page = pdDoc.getPage(0);
+            page.setCropBox(new PDRectangle(600, 500, 1200, 800));
+            page.setRotation(rotation);
+
+            PDFFormXObject form = (PDFFormXObject) createStreamFromPDFBoxPage(pdfPage, pdfdoc, pdDoc,
+                    new Rectangle(0, 0, 274818, 174879), new AffineTransform());
+
+            AffineTransform at = form.getMatrix();
+            String message = "Value must be calculated based on the rotation";
+            assertEquals(message, scaleX, at.getScaleX(), 0.001); //m00
+            assertEquals(message, shearX, at.getShearX(), 0.001); //m01
+            assertEquals(message, translateX, at.getTranslateX(), 0.001); //m02
+            assertEquals(message, shearY, at.getShearY(), 0.001); //m10
+            assertEquals(message, scaleY, at.getScaleY(), 0.001); //m11
+            assertEquals(message, translateY, at.getTranslateY(), 0.001); //m12
+        }
     }
 
     private String removeWhiteSpace(ByteArrayOutputStream bos) throws Exception {
diff --git a/test/java/org/apache/fop/render/pdf/pdfbox/PDFRotateTestCase.java b/test/java/org/apache/fop/render/pdf/pdfbox/PDFRotateTestCase.java
index 99d4579..c774e24 100644
--- a/test/java/org/apache/fop/render/pdf/pdfbox/PDFRotateTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/pdfbox/PDFRotateTestCase.java
@@ -42,19 +42,20 @@ public class PDFRotateTestCase {
     public void test() throws Exception {
         ImageConverterPDF2G2D i = new ImageConverterPDF2G2D();
         ImageInfo imgi = new ImageInfo("a", "b");
-        PDDocument doc = new PDDocument();
-        PDPage page = new PDPage();
-        page.setRotation(90);
-        doc.addPage(page);
-        Image img = new ImagePDF(imgi, doc);
-        ImageGraphics2D ig = (ImageGraphics2D)i.convert(img, null);
-        Rectangle2D rect = new Rectangle2D.Float(0, 0, 100, 100);
+        try (PDDocument doc = new PDDocument()) {
+            PDPage page = new PDPage();
+            page.setRotation(90);
+            doc.addPage(page);
+            Image img = new ImagePDF(imgi, doc);
+            ImageGraphics2D ig = (ImageGraphics2D) i.convert(img, null);
+            Rectangle2D rect = new Rectangle2D.Float(0, 0, 100, 100);
 
-        PSGraphics2D g2d = new PSPDFGraphics2D(true);
-        GraphicContext gc = new GraphicContext();
-        g2d.setGraphicContext(gc);
-        ig.getGraphics2DImagePainter().paint(g2d, rect);
-        Assert.assertEquals(g2d.getTransform().getShearX(), 0.16339869281045752, 0);
+            PSGraphics2D g2d = new PSPDFGraphics2D(true);
+            GraphicContext gc = new GraphicContext();
+            g2d.setGraphicContext(gc);
+            ig.getGraphics2DImagePainter().paint(g2d, rect);
+            Assert.assertEquals(g2d.getTransform().getShearX(), 0.16339869281045752, 0);
+        }
     }
 
     @Test
@@ -68,15 +69,16 @@ public class PDFRotateTestCase {
 
     private AffineTransform getTransform(int angle) throws IOException {
         PDFBoxAdapter adapter = PDFBoxAdapterTestCase.getPDFBoxAdapter(false, false);
-        PDDocument doc = PDFBoxAdapterTestCase.load(PDFBoxAdapterTestCase.ROTATE);
-        PDPage page = doc.getPage(0);
-        page.setRotation(angle);
-        AffineTransform pageAdjust = new AffineTransform();
-        Rectangle r = new Rectangle(0, 1650, 842000, 595000);
-        String stream = (String) adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, null, r, pageAdjust);
-        Assert.assertTrue(stream.contains("/GS0106079 gs"));
-        Assert.assertTrue(stream.contains("/TT0106079 1 Tf"));
-        doc.close();
-        return pageAdjust;
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(PDFBoxAdapterTestCase.ROTATE)) {
+            PDPage page = doc.getPage(0);
+            page.setRotation(angle);
+            AffineTransform pageAdjust = new AffineTransform();
+            Rectangle r = new Rectangle(0, 1650, 842000, 595000);
+            String stream =
+                    (String) adapter.createStreamFromPDFBoxPage(doc, page, "key", pageAdjust, null, r, pageAdjust);
+            Assert.assertTrue(stream.contains("/GS0106079 gs"));
+            Assert.assertTrue(stream.contains("/TT0106079 1 Tf"));
+            return pageAdjust;
+        }
     }
 }
diff --git a/test/java/org/apache/fop/render/pdf/pdfbox/PDFWriterTestCase.java b/test/java/org/apache/fop/render/pdf/pdfbox/PDFWriterTestCase.java
index a0a7ceb..35f3280 100644
--- a/test/java/org/apache/fop/render/pdf/pdfbox/PDFWriterTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/pdfbox/PDFWriterTestCase.java
@@ -44,12 +44,12 @@ public class PDFWriterTestCase {
     @Test
     public void testFloatCache() throws IOException {
         String text = "[1.1 1.1] a";
-        PDDocument doc = new PDDocument();
-        PDStream pdStream = new PDStream(doc, new ByteArrayInputStream(text.getBytes(StandardCharsets.UTF_8)));
-        MyPDFWriter pdfWriter = new MyPDFWriter();
-        pdfWriter.writeText(pdStream);
-        doc.close();
-        Assert.assertEquals(1, pdfWriter.i);
+        try (PDDocument doc = new PDDocument()) {
+            PDStream pdStream = new PDStream(doc, new ByteArrayInputStream(text.getBytes(StandardCharsets.UTF_8)));
+            MyPDFWriter pdfWriter = new MyPDFWriter();
+            pdfWriter.writeText(pdStream);
+            Assert.assertEquals(1, pdfWriter.i);
+        }
     }
 
     private static class MyPDFWriter extends PDFWriter {
diff --git a/test/java/org/apache/fop/render/pdf/pdfbox/PageParentTreeFinderTestCase.java b/test/java/org/apache/fop/render/pdf/pdfbox/PageParentTreeFinderTestCase.java
index 10a8efe..915864e 100644
--- a/test/java/org/apache/fop/render/pdf/pdfbox/PageParentTreeFinderTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/pdfbox/PageParentTreeFinderTestCase.java
@@ -39,30 +39,30 @@ public class PageParentTreeFinderTestCase {
 
     @Test
     public void testGetPageParentTreeArray() throws IOException {
-        PDDocument doc = PDFBoxAdapterTestCase.load(LINK);
-        PDPage srcPage = doc.getPage(0);
-        PageParentTreeFinder finder = new PageParentTreeFinder(srcPage);
-        COSArray markedContentParents = finder.getPageParentTreeArray(doc);
-        Assert.assertEquals(markedContentParents.size(), 3);
-        COSObject firstObj = (COSObject)markedContentParents.get(0);
-        COSObject secObj = (COSObject)markedContentParents.get(1);
-        COSDictionary firstObjDict = (COSDictionary) firstObj.getObject();
-        COSArray firstKids = (COSArray)firstObjDict.getDictionaryObject(COSName.K);
-        COSDictionary firstKid = (COSDictionary) firstKids.get(0);
-        int test = firstKid.getInt("MCID");
-        int expected = 0;
-        Assert.assertEquals(test, expected);
-        COSDictionary firstKidBrother = (COSDictionary)firstKids.get(2);
-        test = firstKidBrother.getInt("MCID");
-        expected = 2;
-        Assert.assertEquals(test, expected);
-        COSDictionary secObjDict = (COSDictionary) secObj.getObject();
-        COSArray secKidsArray = (COSArray)secObjDict.getDictionaryObject(COSName.K);
-        COSDictionary secondKid = (COSDictionary)secKidsArray.get(0);
-        test = secondKid.getInt("MCID");
-        expected = 1;
-        Assert.assertEquals(test, expected);
-        doc.close();
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(LINK)) {
+            PDPage srcPage = doc.getPage(0);
+            PageParentTreeFinder finder = new PageParentTreeFinder(srcPage);
+            COSArray markedContentParents = finder.getPageParentTreeArray(doc);
+            Assert.assertEquals(markedContentParents.size(), 3);
+            COSObject firstObj = (COSObject) markedContentParents.get(0);
+            COSObject secObj = (COSObject) markedContentParents.get(1);
+            COSDictionary firstObjDict = (COSDictionary) firstObj.getObject();
+            COSArray firstKids = (COSArray) firstObjDict.getDictionaryObject(COSName.K);
+            COSDictionary firstKid = (COSDictionary) firstKids.get(0);
+            int test = firstKid.getInt("MCID");
+            int expected = 0;
+            Assert.assertEquals(test, expected);
+            COSDictionary firstKidBrother = (COSDictionary) firstKids.get(2);
+            test = firstKidBrother.getInt("MCID");
+            expected = 2;
+            Assert.assertEquals(test, expected);
+            COSDictionary secObjDict = (COSDictionary) secObj.getObject();
+            COSArray secKidsArray = (COSArray) secObjDict.getDictionaryObject(COSName.K);
+            COSDictionary secondKid = (COSDictionary) secKidsArray.get(0);
+            test = secondKid.getInt("MCID");
+            expected = 1;
+            Assert.assertEquals(test, expected);
+        }
     }
 
     @Test
@@ -79,31 +79,31 @@ public class PageParentTreeFinderTestCase {
 
     @Test
     public void testTraverseKids() throws IOException {
-        PDDocument doc = PDFBoxAdapterTestCase.load(LINK);
-        PDNumberTreeNode srcNumberTreeNode = doc.getDocumentCatalog().getStructureTreeRoot().getParentTree();
-        COSArray parentTree = (COSArray) srcNumberTreeNode.getCOSObject().getDictionaryObject(COSName.KIDS);
-        COSObject kidCOSObj = (COSObject) parentTree.get(0);
-        COSDictionary dict = (COSDictionary) kidCOSObj.getObject();
-        COSArray nums = (COSArray) dict.getDictionaryObject(COSName.NUMS);
-        nums.add(0, COSInteger.get(9));
-        nums.add(1, new COSDictionary());
-        COSArray numList = new PageParentTreeFinder(doc.getPage(0)).getPageParentTreeArray(doc);
-        Assert.assertEquals(numList.size(), 3);
-        doc.close();
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(LINK)) {
+            PDNumberTreeNode srcNumberTreeNode = doc.getDocumentCatalog().getStructureTreeRoot().getParentTree();
+            COSArray parentTree = (COSArray) srcNumberTreeNode.getCOSObject().getDictionaryObject(COSName.KIDS);
+            COSObject kidCOSObj = (COSObject) parentTree.get(0);
+            COSDictionary dict = (COSDictionary) kidCOSObj.getObject();
+            COSArray nums = (COSArray) dict.getDictionaryObject(COSName.NUMS);
+            nums.add(0, COSInteger.get(9));
+            nums.add(1, new COSDictionary());
+            COSArray numList = new PageParentTreeFinder(doc.getPage(0)).getPageParentTreeArray(doc);
+            Assert.assertEquals(numList.size(), 3);
+        }
     }
 
     @Test
     public void testCOSNull() throws IOException {
-        PDDocument doc = PDFBoxAdapterTestCase.load(LINK);
-        PDNumberTreeNode srcNumberTreeNode = doc.getDocumentCatalog().getStructureTreeRoot().getParentTree();
-        COSArray parentTree = (COSArray) srcNumberTreeNode.getCOSObject().getDictionaryObject(COSName.KIDS);
-        COSObject kidCOSObj = (COSObject) parentTree.get(0);
-        COSDictionary dict = (COSDictionary) kidCOSObj.getObject();
-        COSArray nums = (COSArray) dict.getDictionaryObject(COSName.NUMS);
-        nums.add(0, COSInteger.ZERO);
-        nums.add(1, new COSObject(COSNull.NULL));
-        COSArray numList = new PageParentTreeFinder(doc.getPage(0)).getPageParentTreeArray(doc);
-        Assert.assertEquals(numList.size(), 3);
-        doc.close();
+        try (PDDocument doc = PDFBoxAdapterTestCase.load(LINK)) {
+            PDNumberTreeNode srcNumberTreeNode = doc.getDocumentCatalog().getStructureTreeRoot().getParentTree();
+            COSArray parentTree = (COSArray) srcNumberTreeNode.getCOSObject().getDictionaryObject(COSName.KIDS);
+            COSObject kidCOSObj = (COSObject) parentTree.get(0);
+            COSDictionary dict = (COSDictionary) kidCOSObj.getObject();
+            COSArray nums = (COSArray) dict.getDictionaryObject(COSName.NUMS);
+            nums.add(0, COSInteger.ZERO);
+            nums.add(1, new COSObject(COSNull.NULL));
+            COSArray numList = new PageParentTreeFinder(doc.getPage(0)).getPageParentTreeArray(doc);
+            Assert.assertEquals(numList.size(), 3);
+        }
     }
 }
diff --git a/test/java/org/apache/fop/render/pdf/pdfbox/PreloaderPDFTestCase.java b/test/java/org/apache/fop/render/pdf/pdfbox/PreloaderPDFTestCase.java
index d923503..5b402d8 100644
--- a/test/java/org/apache/fop/render/pdf/pdfbox/PreloaderPDFTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/pdfbox/PreloaderPDFTestCase.java
@@ -78,8 +78,9 @@ public class PreloaderPDFTestCase {
             ImageSource imageSource = new ImageSource(ImageIO.createImageInputStream(is), "", true);
             ImageInfo imageInfo = new PreloaderPDF().preloadImage("", imageSource, context);
             ImagePDF img = (ImagePDF) imageInfo.getOriginalImage();
-            PDDocument doc = img.getPDDocument();
-            doc.save(new ByteArrayOutputStream());
+            try (PDDocument doc = img.getPDDocument()) {
+                doc.save(new ByteArrayOutputStream());
+            }
             img.close();
         }
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: commits-help@xmlgraphics.apache.org