Just so you know, flush() or close() are both no-ops on a ByteArrayOutputStream,
so there’s no need to call them. That’s not the cause of your problem, but it 
seemed
worth mentioning.

— John

> On 25 Jun 2015, at 09:56, Pierre Dubillot <[email protected]> wrote:
> 
> I'm having an issue while trying to create an image output :
> 
> java.io.IOException: RandomAccessBuffer already closed
>> at
>> org.apache.pdfbox.io.RandomAccessBuffer.checkClosed(RandomAccessBuffer.java:433)
>> at
>> org.apache.pdfbox.io.RandomAccessBuffer.length(RandomAccessBuffer.java:292)
>> at org.apache.pdfbox.cos.COSStream.copyBuffer(COSStream.java:361)
>> at org.apache.pdfbox.cos.COSStream.doDecode(COSStream.java:334)
>> at
>> org.apache.pdfbox.cos.COSStream.checkUnfilteredBuffer(COSStream.java:265)
>> at org.apache.pdfbox.cos.COSStream.getUnfilteredStream(COSStream.java:214)
>> at
>> org.apache.pdfbox.pdmodel.common.PDStream.createInputStream(PDStream.java:232)
>> at
>> org.apache.pdfbox.pdmodel.graphics.color.PDICCBased.loadICCProfile(PDICCBased.java:115)
>> at
>> org.apache.pdfbox.pdmodel.graphics.color.PDICCBased.<init>(PDICCBased.java:89)
>> at
>> org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace.create(PDColorSpace.java:160)
>> at
>> org.apache.pdfbox.pdmodel.PDResources.getColorSpace(PDResources.java:111)
>> at
>> org.apache.pdfbox.contentstream.operator.color.SetNonStrokingColorSpace.process(SetNonStrokingColorSpace.java:41)
>> at
>> org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:795)
>> at
>> org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:462)
>> at
>> org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:438)
>> at
>> org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:149)
>> at org.apache.pdfbox.rendering.PageDrawer.drawPage(PageDrawer.java:180)
>> at org.apache.pdfbox.rendering.PDFRenderer.renderPage(PDFRenderer.java:205)
>> at
>> org.apache.pdfbox.rendering.PDFRenderer.renderImage(PDFRenderer.java:136)
>> at
>> org.apache.pdfbox.rendering.PDFRenderer.renderImageWithDPI(PDFRenderer.java:81)
>> at metier.parseur.ParserPDF.pdfImgsToXml(ParserPDF.java:62)
>> at metier.parseur.ParserPDF.preLoad(ParserPDF.java:45)
>> at metier.MetierLoader.getPage(MetierLoader.java:34)
>> at action.ActionLoader.chargerPage(ActionLoader.java:15)
>> at action.ActionSora.doPost(ActionSora.java:35)
>> 
> 
> With the following code :
> 
> private static String pdfImgsToXml() throws IOException {
>> 
>> int pageNumber = 1;
>> 
>> String imgs = "<imgs>\n";
>> 
>> PDFRenderer renderer = new PDFRenderer(pdf);
>> 
>> int numPages = pdf.getNumberOfPages();
>> 
>> for (int i = 0; i < numPages; i++) {
>> 
>> imgs = imgs + "<img" + pageNumber + ">";
>> 
>> try {
>> 
>> BufferedImage image = renderer.renderImageWithDPI(i, 200);
>> 
>> ByteArrayOutputStream baos = new ByteArrayOutputStream();
>> 
>> ImageIO.write( image, "jpg", baos );
>> 
>> baos.flush();
>> 
>> byte[] imageInByte = baos.toByteArray();
>> 
>> baos.close();
>> 
>> String imgString = Base64.encode(imageInByte);
>> 
>> imgs = imgs + imgString + "</img" + pageNumber + ">\n";
>> 
>> } catch (Exception e) {
>> 
>> // TODO Auto-generated catch block
>> 
>> e.printStackTrace();
>> 
>> }
>> 
>> pageNumber++;
>> 
>> }
>> 
>> return imgs + "</imgs>";
>> 
>> }
>> 
>> 
> My app is running on a Java EE Server, trying to write rendered images to
> byte array to put them in XML.
> But first I need to render them, and that's not working.
> 
> Thanks,
> Pierre

Reply via email to