Author: tilman
Date: Sat Nov 1 15:02:27 2025
New Revision: 1929463
Log:
PDFBOX-5660: close input, as suggested by Valery Bokov; refactor; closes #308
Modified:
pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java
Modified:
pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java
==============================================================================
---
pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java
Sat Nov 1 15:02:20 2025 (r1929462)
+++
pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java
Sat Nov 1 15:02:27 2025 (r1929463)
@@ -19,7 +19,6 @@ import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -75,13 +74,16 @@ class JPEGFactoryTest
@Test
void testCreateFromStream() throws IOException
{
- PDDocument document = new PDDocument();
- InputStream stream =
JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg");
- PDImageXObject ximage = JPEGFactory.createFromStream(document, stream);
- validate(ximage, 8, 344, 287, "jpg", PDDeviceRGB.INSTANCE.getName());
+ try (PDDocument document = new PDDocument();
+ InputStream is1 =
JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg");
+ InputStream is2 =
JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg"))
+ {
+ PDImageXObject ximage = JPEGFactory.createFromStream(document,
is1);
+ validate(ximage, 8, 344, 287, "jpg",
PDDeviceRGB.INSTANCE.getName());
- doWritePDF(document, ximage, TESTRESULTSDIR, "jpegrgbstream.pdf");
- checkJpegStream(TESTRESULTSDIR, "jpegrgbstream.pdf",
JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg"));
+ doWritePDF(document, ximage, TESTRESULTSDIR, "jpegrgbstream.pdf");
+ checkJpegStream(TESTRESULTSDIR, "jpegrgbstream.pdf", is2);
+ }
}
/*
@@ -91,13 +93,16 @@ class JPEGFactoryTest
@Test
void testCreateFromStreamCMYK() throws IOException
{
- PDDocument document = new PDDocument();
- InputStream stream =
JPEGFactoryTest.class.getResourceAsStream("jpegcmyk.jpg");
- PDImageXObject ximage = JPEGFactory.createFromStream(document, stream);
- validate(ximage, 8, 343, 287, "jpg", PDDeviceCMYK.INSTANCE.getName());
+ try (InputStream is1 =
JPEGFactoryTest.class.getResourceAsStream("jpegcmyk.jpg");
+ InputStream is2 =
JPEGFactoryTest.class.getResourceAsStream("jpegcmyk.jpg"))
+ {
+ PDDocument document = new PDDocument();
+ PDImageXObject ximage = JPEGFactory.createFromStream(document,
is1);
+ validate(ximage, 8, 343, 287, "jpg",
PDDeviceCMYK.INSTANCE.getName());
- doWritePDF(document, ximage, TESTRESULTSDIR, "jpegcmykstream.pdf");
- checkJpegStream(TESTRESULTSDIR, "jpegcmykstream.pdf",
JPEGFactoryTest.class.getResourceAsStream("jpegcmyk.jpg"));
+ doWritePDF(document, ximage, TESTRESULTSDIR, "jpegcmykstream.pdf");
+ checkJpegStream(TESTRESULTSDIR, "jpegcmykstream.pdf", is2);
+ }
}
/**
@@ -107,13 +112,16 @@ class JPEGFactoryTest
@Test
void testCreateFromStream256() throws IOException
{
- PDDocument document = new PDDocument();
- InputStream stream =
JPEGFactoryTest.class.getResourceAsStream("jpeg256.jpg");
- PDImageXObject ximage = JPEGFactory.createFromStream(document, stream);
- validate(ximage, 8, 344, 287, "jpg", PDDeviceGray.INSTANCE.getName());
+ try (InputStream is1 =
JPEGFactoryTest.class.getResourceAsStream("jpeg256.jpg");
+ InputStream is2 =
JPEGFactoryTest.class.getResourceAsStream("jpeg256.jpg"))
+ {
+ PDDocument document = new PDDocument();
+ PDImageXObject ximage = JPEGFactory.createFromStream(document,
is1);
+ validate(ximage, 8, 344, 287, "jpg",
PDDeviceGray.INSTANCE.getName());
- doWritePDF(document, ximage, TESTRESULTSDIR, "jpeg256stream.pdf");
- checkJpegStream(TESTRESULTSDIR, "jpeg256stream.pdf",
JPEGFactoryTest.class.getResourceAsStream("jpeg256.jpg"));
+ doWritePDF(document, ximage, TESTRESULTSDIR, "jpeg256stream.pdf");
+ checkJpegStream(TESTRESULTSDIR, "jpeg256stream.pdf", is2);
+ }
}
/**
@@ -123,13 +131,16 @@ class JPEGFactoryTest
@Test
void testCreateFromImageRGB() throws IOException
{
- PDDocument document = new PDDocument();
- BufferedImage image =
ImageIO.read(JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg"));
- assertEquals(3, image.getColorModel().getNumComponents());
- PDImageXObject ximage = JPEGFactory.createFromImage(document, image);
- validate(ximage, 8, 344, 287, "jpg", PDDeviceRGB.INSTANCE.getName());
+ try (InputStream is =
JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg"))
+ {
+ PDDocument document = new PDDocument();
+ BufferedImage image = ImageIO.read(is);
+ assertEquals(3, image.getColorModel().getNumComponents());
+ PDImageXObject ximage = JPEGFactory.createFromImage(document,
image);
+ validate(ximage, 8, 344, 287, "jpg",
PDDeviceRGB.INSTANCE.getName());
- doWritePDF(document, ximage, TESTRESULTSDIR, "jpegrgb.pdf");
+ doWritePDF(document, ximage, TESTRESULTSDIR, "jpegrgb.pdf");
+ }
}
/**
@@ -139,13 +150,16 @@ class JPEGFactoryTest
@Test
void testCreateFromImage256() throws IOException
{
- PDDocument document = new PDDocument();
- BufferedImage image =
ImageIO.read(JPEGFactoryTest.class.getResourceAsStream("jpeg256.jpg"));
- assertEquals(1, image.getColorModel().getNumComponents());
- PDImageXObject ximage = JPEGFactory.createFromImage(document, image);
- validate(ximage, 8, 344, 287, "jpg", PDDeviceGray.INSTANCE.getName());
+ try (InputStream is =
JPEGFactoryTest.class.getResourceAsStream("jpeg256.jpg"))
+ {
+ PDDocument document = new PDDocument();
+ BufferedImage image = ImageIO.read(is);
+ assertEquals(1, image.getColorModel().getNumComponents());
+ PDImageXObject ximage = JPEGFactory.createFromImage(document,
image);
+ validate(ximage, 8, 344, 287, "jpg",
PDDeviceGray.INSTANCE.getName());
- doWritePDF(document, ximage, TESTRESULTSDIR, "jpeg256.pdf");
+ doWritePDF(document, ximage, TESTRESULTSDIR, "jpeg256.pdf");
+ }
}
/**
@@ -164,33 +178,35 @@ class JPEGFactoryTest
{
return;
}
+ try (InputStream is =
JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg"))
+ {
+ PDDocument document = new PDDocument();
+ BufferedImage image = ImageIO.read(is);
- PDDocument document = new PDDocument();
- BufferedImage image =
ImageIO.read(JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg"));
-
- // create an ARGB image
- int width = image.getWidth();
- int height = image.getHeight();
- BufferedImage argbImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_ARGB);
- Graphics ag = argbImage.getGraphics();
- ag.drawImage(image, 0, 0, null);
- ag.dispose();
+ // create an ARGB image
+ int width = image.getWidth();
+ int height = image.getHeight();
+ BufferedImage argbImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_ARGB);
+ Graphics ag = argbImage.getGraphics();
+ ag.drawImage(image, 0, 0, null);
+ ag.dispose();
- for (int x = 0; x < argbImage.getWidth(); ++x)
- {
- for (int y = 0; y < argbImage.getHeight(); ++y)
+ for (int x = 0; x < argbImage.getWidth(); ++x)
{
- argbImage.setRGB(x, y, (argbImage.getRGB(x, y) & 0xFFFFFF) |
((y / 10 * 10) << 24));
+ for (int y = 0; y < argbImage.getHeight(); ++y)
+ {
+ argbImage.setRGB(x, y, (argbImage.getRGB(x, y) & 0xFFFFFF)
| ((y / 10 * 10) << 24));
+ }
}
- }
- PDImageXObject ximage = JPEGFactory.createFromImage(document,
argbImage);
- validate(ximage, 8, width, height, "jpg",
PDDeviceRGB.INSTANCE.getName());
- assertNotNull(ximage.getSoftMask());
- validate(ximage.getSoftMask(), 8, width, height, "jpg",
PDDeviceGray.INSTANCE.getName());
- assertTrue(colorCount(ximage.getSoftMask().getImage()) >
image.getHeight() / 10);
+ PDImageXObject ximage = JPEGFactory.createFromImage(document,
argbImage);
+ validate(ximage, 8, width, height, "jpg",
PDDeviceRGB.INSTANCE.getName());
+ assertNotNull(ximage.getSoftMask());
+ validate(ximage.getSoftMask(), 8, width, height, "jpg",
PDDeviceGray.INSTANCE.getName());
+ assertTrue(colorCount(ximage.getSoftMask().getImage()) >
image.getHeight() / 10);
- doWritePDF(document, ximage, TESTRESULTSDIR, "jpeg-intargb.pdf");
+ doWritePDF(document, ximage, TESTRESULTSDIR, "jpeg-intargb.pdf");
+ }
}
/**
@@ -209,33 +225,35 @@ class JPEGFactoryTest
{
return;
}
+ try (InputStream is =
JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg"))
+ {
+ PDDocument document = new PDDocument();
+ BufferedImage image = ImageIO.read(is);
- PDDocument document = new PDDocument();
- BufferedImage image =
ImageIO.read(JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg"));
-
- // create an ARGB image
- int width = image.getWidth();
- int height = image.getHeight();
- BufferedImage argbImage = new BufferedImage(width, height,
BufferedImage.TYPE_4BYTE_ABGR);
- Graphics ag = argbImage.getGraphics();
- ag.drawImage(image, 0, 0, null);
- ag.dispose();
+ // create an ARGB image
+ int width = image.getWidth();
+ int height = image.getHeight();
+ BufferedImage argbImage = new BufferedImage(width, height,
BufferedImage.TYPE_4BYTE_ABGR);
+ Graphics ag = argbImage.getGraphics();
+ ag.drawImage(image, 0, 0, null);
+ ag.dispose();
- for (int x = 0; x < argbImage.getWidth(); ++x)
- {
- for (int y = 0; y < argbImage.getHeight(); ++y)
+ for (int x = 0; x < argbImage.getWidth(); ++x)
{
- argbImage.setRGB(x, y, (argbImage.getRGB(x, y) & 0xFFFFFF) |
((y / 10 * 10) << 24));
+ for (int y = 0; y < argbImage.getHeight(); ++y)
+ {
+ argbImage.setRGB(x, y, (argbImage.getRGB(x, y) & 0xFFFFFF)
| ((y / 10 * 10) << 24));
+ }
}
- }
- PDImageXObject ximage = JPEGFactory.createFromImage(document,
argbImage);
- validate(ximage, 8, width, height, "jpg",
PDDeviceRGB.INSTANCE.getName());
- assertNotNull(ximage.getSoftMask());
- validate(ximage.getSoftMask(), 8, width, height, "jpg",
PDDeviceGray.INSTANCE.getName());
- assertTrue(colorCount(ximage.getSoftMask().getImage()) >
image.getHeight() / 10);
+ PDImageXObject ximage = JPEGFactory.createFromImage(document,
argbImage);
+ validate(ximage, 8, width, height, "jpg",
PDDeviceRGB.INSTANCE.getName());
+ assertNotNull(ximage.getSoftMask());
+ validate(ximage.getSoftMask(), 8, width, height, "jpg",
PDDeviceGray.INSTANCE.getName());
+ assertTrue(colorCount(ximage.getSoftMask().getImage()) >
image.getHeight() / 10);
- doWritePDF(document, ximage, TESTRESULTSDIR, "jpeg-4bargb.pdf");
+ doWritePDF(document, ximage, TESTRESULTSDIR, "jpeg-4bargb.pdf");
+ }
}
/**
@@ -255,31 +273,33 @@ class JPEGFactoryTest
{
return;
}
+ try (InputStream is =
JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg"))
+ {
+ PDDocument document = new PDDocument();
+ BufferedImage image = ImageIO.read(is);
- PDDocument document = new PDDocument();
- BufferedImage image =
ImageIO.read(JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg"));
-
- // create an USHORT_555_RGB image
- int width = image.getWidth();
- int height = image.getHeight();
- BufferedImage rgbImage = new BufferedImage(width, height,
BufferedImage.TYPE_USHORT_555_RGB);
- Graphics ag = rgbImage.getGraphics();
- ag.drawImage(image, 0, 0, null);
- ag.dispose();
+ // create an USHORT_555_RGB image
+ int width = image.getWidth();
+ int height = image.getHeight();
+ BufferedImage rgbImage = new BufferedImage(width, height,
BufferedImage.TYPE_USHORT_555_RGB);
+ Graphics ag = rgbImage.getGraphics();
+ ag.drawImage(image, 0, 0, null);
+ ag.dispose();
- for (int x = 0; x < rgbImage.getWidth(); ++x)
- {
- for (int y = 0; y < rgbImage.getHeight(); ++y)
+ for (int x = 0; x < rgbImage.getWidth(); ++x)
{
- rgbImage.setRGB(x, y, (rgbImage.getRGB(x, y) & 0xFFFFFF) | ((y
/ 10 * 10) << 24));
+ for (int y = 0; y < rgbImage.getHeight(); ++y)
+ {
+ rgbImage.setRGB(x, y, (rgbImage.getRGB(x, y) & 0xFFFFFF) |
((y / 10 * 10) << 24));
+ }
}
- }
- PDImageXObject ximage = JPEGFactory.createFromImage(document,
rgbImage);
- validate(ximage, 8, width, height, "jpg",
PDDeviceRGB.INSTANCE.getName());
- assertNull(ximage.getSoftMask());
+ PDImageXObject ximage = JPEGFactory.createFromImage(document,
rgbImage);
+ validate(ximage, 8, width, height, "jpg",
PDDeviceRGB.INSTANCE.getName());
+ assertNull(ximage.getSoftMask());
- doWritePDF(document, ximage, TESTRESULTSDIR, "jpeg-ushort555rgb.pdf");
+ doWritePDF(document, ximage, TESTRESULTSDIR,
"jpeg-ushort555rgb.pdf");
+ }
}
/**
@@ -305,22 +325,17 @@ class JPEGFactoryTest
// check whether it is possible to extract the jpeg stream exactly
// as it was passed to createFromStream
- private void checkJpegStream(File testResultsDir, String filename,
InputStream resourceStream)
+ private void checkJpegStream(File testResultsDir, String filename,
InputStream expected)
throws IOException
{
try (PDDocument doc = Loader.loadPDF(new File(testResultsDir,
filename)))
{
PDImageXObject img =
(PDImageXObject)
doc.getPage(0).getResources().getXObject(COSName.getPDFName("Im1"));
- ByteArrayOutputStream baos1 = new ByteArrayOutputStream();
- ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
try (InputStream dctStream =
img.createInputStream(Arrays.asList(COSName.DCT_DECODE.getName())))
{
- IOUtils.copy(resourceStream, baos1);
- IOUtils.copy(dctStream, baos2);
+ assertArrayEquals(IOUtils.toByteArray(expected),
IOUtils.toByteArray(dctStream));
}
- resourceStream.close();
- assertArrayEquals(baos1.toByteArray(), baos2.toByteArray());
}
}
}