ceakki created PDFBOX-3566:
------------------------------

             Summary: ClassCastException in JPEGFactory.createFromImage
                 Key: PDFBOX-3566
                 URL: https://issues.apache.org/jira/browse/PDFBOX-3566
             Project: PDFBox
          Issue Type: Bug
    Affects Versions: 2.0.3
         Environment: Linux OS, Java 1.8, Oracle Java Advanced Imaging (JAI) 
installed.
            Reporter: ceakki


I was trying to save all the pages from a PDF as images and adding them to a 
newly created PDF.

{code}
PDDocument newDoc = new PDDocument();

PDFRenderer pdfRenderer = new PDFRenderer(oldDoc);

floag width = ...
float height = ...

page.setMediaBox(new PDRectangle(width, height));

newDoc.addPage(page);

PDPageContentStream contents = new PDPageContentStream(newDoc, page);

BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(0, 200, 
ImageType.RGB);

PDImageXObject imageXObject = JPEGFactory.createFromImage(newDoc, 
bufferedImage, 0.75);

contents.drawImage(imageXObject, 0, 0, width, height);

contents.close();

...
{code}

Sometimes it's working just fine, sometimes it's trowing a ClassCastException 
in JPEGFactory.createFromImage:

{noformat}
java.lang.ClassCastException: 
com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageWriteParam cannot be cast 
to javax.imageio.plugins.jpeg.JPEGImageWriteParam
        at 
org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory.encodeImageToJPEGStream(JPEGFactory.java:244)
        at 
org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory.createJPEG(JPEGFactory.java:212)
        at 
org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory.createFromImage(JPEGFactory.java:175)
        at 
org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory.createFromImage(JPEGFactory.java:160)
        at 
com.mimecast.ttpservice.app.jpati.ConvertPDF.saveDoc(ConvertPDF.java:1390)
{noformat}

This is happening in the following code of above mentioned class:

{code}
imageWriter = ImageIO.getImageWritersBySuffix("jpeg").next();
...
JPEGImageWriteParam jpegParam = 
(JPEGImageWriteParam)imageWriter.getDefaultWriteParam();
{code}

In my case I can get more than one ImageWritter when calling 
*ImageIO.getImageWritersBySuffix("jpeg")* as follows:

{noformat}
com.sun.imageio.plugins.jpeg.JPEGImageWriter
com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageWriter
{noformat}

I suspect that sometimes the *CLibJPEGImageWriter* is returned before 
*JPEGImageWriter*, which produces the ClassCastException a bit later.

As I need to keep the JAI installed, is it possible to change the above code to 
loop through all ImageWriters found in order to pick the one needed by PdfBox?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: dev-h...@pdfbox.apache.org

Reply via email to