You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@pdfbox.apache.org by Pierre Dubillot <al...@gmail.com> on 2015/06/25 18:56:52 UTC

Fwd: PDFRenderer : RandomAccessBuffer already closed (PDFBox 2.0)

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

Re: Fwd: PDFRenderer : RandomAccessBuffer already closed (PDFBox 2.0)

Posted by Pierre Dubillot <al...@gmail.com>.
Here is one sample :
http://www.cinemas-utopia.org/admin/grilles/toulouse/2015-06-30.pdf

I tried with 1.8.9 but the render is black and White and text is moved. (I
need the same result pdf = img)
Le 25 juin 2015 19:08, "Andreas Lehmkuehler" <an...@lehmi.de> a écrit :

> Hi,
>
> is it possible to get a hand on the pdf in question?
>
> BR
> Andreas
>
> Am 25.06.2015 um 18:56 schrieb Pierre Dubillot:
>
>> 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
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@pdfbox.apache.org
> For additional commands, e-mail: users-help@pdfbox.apache.org
>
>

Re: Fwd: PDFRenderer : RandomAccessBuffer already closed (PDFBox 2.0)

Posted by Andreas Lehmkuehler <an...@lehmi.de>.
Hi,

is it possible to get a hand on the pdf in question?

BR
Andreas

Am 25.06.2015 um 18:56 schrieb Pierre Dubillot:
> 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
>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: users-help@pdfbox.apache.org


Re: PDFRenderer : RandomAccessBuffer already closed (PDFBox 2.0)

Posted by John Hewson <jo...@jahewson.com>.
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 <al...@gmail.com> 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


Re: Fwd: PDFRenderer : RandomAccessBuffer already closed (PDFBox 2.0)

Posted by Pierre Dubillot <al...@gmail.com>.
Hi,
This little advice solved my problem, thanks !

Pierre,

2015-06-27 14:28 GMT+02:00 Tilman Hausherr <TH...@t-online.de>:

> Am 26.06.2015 um 15:53 schrieb Pierre Dubillot:
>
>> private String pdfImgsToXml(byte[] pdfBytes) throws IOException {
>>
>>> >int pageNumber = 1;
>>> >String imgs = "<imgs>\n";
>>> >pdfSplitted = new PDDocument();
>>> >System.out.println(new String(pdfBytes));
>>> >pdfSplitted = PDDocument.load(pdfBytes);
>>> >PDFRenderer renderer = new PDFRenderer(pdfSplitted);
>>> >/* Test enregistrement
>>> >pdfSplitted.save("D:/Stage_DUT/pdfConverter/pdf/test4.pdf");
>>> >  */
>>> >int numPages = pdfSplitted.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){
>>> >e.printStackTrace();
>>> >}
>>> >pageNumber++;
>>> >}
>>> >return imgs + "</imgs>";
>>> >}
>>>
>>   As you can see,* all documents are closed (theory not practice)*.
>> Strange
>> thing. (Used try-catch-finally to force this). Any advice ?
>>
>>
> Yes, avoid this:
>
> pdfSplitted = new PDDocument();
> System.out.println(new String(pdfBytes));
> pdfSplitted = PDDocument.load(pdfBytes);
>
>
> You created an empty document, and then overwrote the variable. And I
> don't see where you close
> pdfSplitted.
>
>
> Tilman
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@pdfbox.apache.org
> For additional commands, e-mail: users-help@pdfbox.apache.org
>
>

Re: Fwd: PDFRenderer : RandomAccessBuffer already closed (PDFBox 2.0)

Posted by Tilman Hausherr <TH...@t-online.de>.
Am 26.06.2015 um 15:53 schrieb Pierre Dubillot:
> private String pdfImgsToXml(byte[] pdfBytes) throws IOException {
>> >int pageNumber = 1;
>> >String imgs = "<imgs>\n";
>> >pdfSplitted = new PDDocument();
>> >System.out.println(new String(pdfBytes));
>> >pdfSplitted = PDDocument.load(pdfBytes);
>> >PDFRenderer renderer = new PDFRenderer(pdfSplitted);
>> >/* Test enregistrement
>> >pdfSplitted.save("D:/Stage_DUT/pdfConverter/pdf/test4.pdf");
>> >  */
>> >int numPages = pdfSplitted.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){
>> >e.printStackTrace();
>> >}
>> >pageNumber++;
>> >}
>> >return imgs + "</imgs>";
>> >}
>   As you can see,* all documents are closed (theory not practice)*. Strange
> thing. (Used try-catch-finally to force this). Any advice ?
>

Yes, avoid this:

pdfSplitted = new PDDocument();
System.out.println(new String(pdfBytes));
pdfSplitted = PDDocument.load(pdfBytes);


You created an empty document, and then overwrote the variable. And I don't see where you close
pdfSplitted.

Tilman




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: users-help@pdfbox.apache.org


Re: Fwd: PDFRenderer : RandomAccessBuffer already closed (PDFBox 2.0)

Posted by Pierre Dubillot <al...@gmail.com>.
Me again,
After few hours, finally did something that's working. But, with *memory
leaks* ...

juin 26, 2015 3:39:22 PM org.apache.pdfbox.cos.COSDocument finalize
>
> AVERTISSEMENT: Warning: You did not close a PDF Document
>
>
My code to split a PDF (i'm now returning a PDF byte[]) :

private byte[] decouperDesPagesSymetriques(int nbOfCrops, PDPageTree pages,
> int CropTop, int CropBottom) throws IOException{
> PDDocument pdfSplit = new PDDocument();
> PDDocument pagesSplit =new PDDocument();
> byte[] pdfBytes = null;
> [...] processing
> }
> try {
> pdfBytes = toByteArray(pdfSplit);
> }
> catch (Exception e) {
> e.printStackTrace();
> }
> finally{
> pagesSplit.close();
> pdfSplit.close();
> }
> return pdfBytes;
> }
> private static byte[] toByteArray(PDDocument pdDoc) throws IOException{
> ByteArrayOutputStream out = new ByteArrayOutputStream();
> try {
> pdDoc.save(out);
> } catch (Exception e) { e.printStackTrace();}
> finally{
> pdDoc.close();
> }
> return out.toByteArray();
> }


My new code to generate images (pdfSplitted is now global)  :

private String pdfImgsToXml(byte[] pdfBytes) throws IOException {
> int pageNumber = 1;
> String imgs = "<imgs>\n";
> pdfSplitted = new PDDocument();
> System.out.println(new String(pdfBytes));
> pdfSplitted = PDDocument.load(pdfBytes);
> PDFRenderer renderer = new PDFRenderer(pdfSplitted);
> /* Test enregistrement
> pdfSplitted.save("D:/Stage_DUT/pdfConverter/pdf/test4.pdf");
>  */
> int numPages = pdfSplitted.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){
> e.printStackTrace();
> }
> pageNumber++;
> }
> return imgs + "</imgs>";
> }


 As you can see,* all documents are closed (theory not practice)*. Strange
thing. (Used try-catch-finally to force this). Any advice ?

Re: Fwd: PDFRenderer : RandomAccessBuffer already closed (PDFBox 2.0)

Posted by Pierre Dubillot <al...@gmail.com>.
Good news today, it's not a thread problem, not a code problem but a file
problem :

While I split my document into 7 parts (one for each day) : Example
<http://www.cinemas-utopia.org/admin/grilles/toulouse/2015-06-30.pdf>

My document is not well saved. (Worked fine on 1.8.9).
Here's my old code that need to be updated :

  int splits = 0;

for(PDPage unePage: lesPagesDecoupes){

if(splits >= nbOfCrops){

splits =0;

}

PDRectangle cropBox1 = unePage.getCropBox();

PDRectangle rectangle = new PDRectangle();

float croppingHeight = ((cropBox1.getUpperRightY() -
> (unePage.getMediaBox().getLowerLeftY()))/nbOfCrops);

rectangle.setUpperRightY((float) (cropBox1.getUpperRightY() -
> (croppingHeight * (splits))));

rectangle.setLowerLeftY((float) (cropBox1.getUpperRightY() -
> (croppingHeight*(splits + 1))));

rectangle.setUpperRightX(cropBox1.getUpperRightX());

rectangle.setLowerLeftX(cropBox1.getLowerLeftX());

unePage.setCropBox(rectangle);

unePage.setMediaBox(rectangle);


> pdfSplit.importPage(unePage);


> splits++;

}

pagesSplit.close();

try {

pdf.close();

pdf = pdfSplit;

   pdfSplit.close();

} catch (Exception e) {

e.printStackTrace();

}


The problem is at the end, so, how can I transfer the Splitted PDDoc to the
General PDDoc ?
(Output of pdfSplit : http://www.docdroid.net/file/view/14qk1/test3.pdf )

Re: Fwd: PDFRenderer : RandomAccessBuffer already closed (PDFBox 2.0)

Posted by Pierre Dubillot <al...@gmail.com>.
I will submit you tomorrow the exact pdf file, because i'm splitting it in
7 part. And also tell you if it's a thread problem.

Thanks

 The code works fine for me.
>
> However you didn't show how the "pdf" object is closed. Be aware that
> PDFBox doesn't support multithreading, i.e. one PDDocument object should be
> used only by one thread.
>

If this hint doesn't help, please create a "minimal" servlet project that
can be tested with tomcat and which shows the problem.

Tilman



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: users-help@pdfbox.apache.org

Re: Fwd: PDFRenderer : RandomAccessBuffer already closed (PDFBox 2.0)

Posted by Tilman Hausherr <TH...@t-online.de>.
> The code works fine for me.
>
> However you didn't show how the "pdf" object is closed. Be aware that 
> PDFBox doesn't support multithreading, i.e. one PDDocument object 
> should be used only by one thread.

If this hint doesn't help, please create a "minimal" servlet project 
that can be tested with tomcat and which shows the problem.

Tilman



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: users-help@pdfbox.apache.org


Re: Fwd: PDFRenderer : RandomAccessBuffer already closed (PDFBox 2.0)

Posted by Tilman Hausherr <TH...@t-online.de>.
Am 25.06.2015 um 18:56 schrieb Pierre Dubillot:
> 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


The code works fine for me.

However you didn't show how the "pdf" object is closed. Be aware that 
PDFBox doesn't support multithreading, i.e. one PDDocument object should 
be used only by one thread.

Tilman


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: users-help@pdfbox.apache.org