[
https://issues.apache.org/jira/browse/PDFBOX-6060?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Simon Steiner updated PDFBOX-6060:
----------------------------------
Description:
DCTFilter calls findRasterReader and returns the first reader, on error it
should try the 2nd reader as JDK cant read all jpegs
{code:java}
protected void findImageReader(String formatName, String errorCause,
InputStream encoded, ImageReaderRunner runner) throws IOException
{
Iterator<ImageReader> readers =
ImageIO.getImageReadersByFormatName(formatName);
ImageInputStream iis = ImageIO.createImageInputStream(encoded);
iis.mark();
Exception exception = null;
String error = "Cannot read " + formatName + " image: " + errorCause;
try {
while (readers.hasNext()) {
ImageReader reader = readers.next();
if (reader.canReadRaster()) {
try {
reader.setInput(iis);
runner.run(reader);
return;
} catch (Exception e) {
exception = e;
error = e.getMessage();
iis.reset();
} finally {
reader.dispose();
}
}
}
} finally {
iis.close();
}
throw new RuntimeException(error, exception);
}
interface ImageReaderRunner {
void run(ImageReader reader) throws IOException;
}
{code}
was:
DCTFilter calls findRasterReader and returns the first reader, on error it
should try the 2nd reader as JDK cant read all jpegs
{code:java}
public final DecodeResult decode(InputStream encoded, OutputStream decoded,
COSDictionary parameters, int index)
throws IOException {
Iterator<ImageReader> readers =
ImageIO.getImageReadersByFormatName("JPEG");
ImageInputStream iis = ImageIO.createImageInputStream(encoded);
iis.mark();
Exception exception = null;
String error = "Cannot read JPEG image: a suitable JAI I/O image filter
is not installed";
try {
while (readers.hasNext()) {
ImageReader reader = readers.next();
if (reader.canReadRaster()) {
try {
reader.setInput(iis);
//...
} catch (Exception e) {
exception = e;
error = e.getMessage();
iis.reset();
continue;
} finally {
reader.dispose();
}
return new DecodeResult(parameters);
}
}
} finally {
iis.close();
}
throw new RuntimeException(error, exception);
}
{code}
> Allow use of 12 monkeys in DCTFilter
> ------------------------------------
>
> Key: PDFBOX-6060
> URL: https://issues.apache.org/jira/browse/PDFBOX-6060
> Project: PDFBox
> Issue Type: Bug
> Reporter: Simon Steiner
> Priority: Major
>
> DCTFilter calls findRasterReader and returns the first reader, on error it
> should try the 2nd reader as JDK cant read all jpegs
> {code:java}
> protected void findImageReader(String formatName, String errorCause,
> InputStream encoded, ImageReaderRunner runner) throws IOException
> {
> Iterator<ImageReader> readers =
> ImageIO.getImageReadersByFormatName(formatName);
> ImageInputStream iis = ImageIO.createImageInputStream(encoded);
> iis.mark();
> Exception exception = null;
> String error = "Cannot read " + formatName + " image: " + errorCause;
> try {
> while (readers.hasNext()) {
> ImageReader reader = readers.next();
> if (reader.canReadRaster()) {
> try {
> reader.setInput(iis);
> runner.run(reader);
> return;
> } catch (Exception e) {
> exception = e;
> error = e.getMessage();
> iis.reset();
> } finally {
> reader.dispose();
> }
> }
> }
> } finally {
> iis.close();
> }
> throw new RuntimeException(error, exception);
> }
> interface ImageReaderRunner {
> void run(ImageReader reader) throws IOException;
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]