pdfbox-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Maruan Sahyoun <sahy...@fileaffairs.de>
Subject Re: The importPage leads to error in PDFBox 2.0.0
Date Tue, 17 Feb 2015 21:53:05 GMT
AFAIK there is currently no easy way as addPage() always adds to the end. Now what you could
do is change the order using the COS model

        COSDictionary pages = (COSDictionary) doc.getDocumentCatalog().getCOSObject().getDictionaryObject(COSName.PAGES);
        COSArray kids = (COSArray) pages.getDictionaryObject(COSName.KIDS);

Now you could add/insert/remove items as needed to kids.

Maruan

Am 17.02.2015 um 22:40 schrieb Ilya Kantor <iliakan@gmail.com>:

> My question is actually simpler.
> 
> I only need to insert the first page, no messing with nested trees.
> 
> ---
> Best Regards,
> Ilya Kantor
> 
> 2015-02-18 0:37 GMT+03:00 Tilman Hausherr <THausherr@t-online.de>:
> 
>> Don't know, but there is this issue about a similar wish:
>> https://issues.apache.org/jira/browse/PDFBOX-2400
>> 
>> Tilman
>> 
>> Am 17.02.2015 um 22:27 schrieb Ilya Kantor:
>> 
>>> Hi Maruan,
>>> 
>>> Thanks, you were very precise, that's my fault to close the thing twice.
>>> Now it works.
>>> 
>>> Can I insert the new page as the first one?
>>> 
>>> For PDFBox 1.8.8 did it this way:
>>> ======
>>> doc.getDocumentCatalog().getPages().getKids().add(0, (PDPage)
>>> cover.getDocumentCatalog().getAllPages().get(0));
>>> ========
>>> 
>>> ---
>>> Best Regards,
>>> Ilya Kantor
>>> 
>>> 2015-02-18 0:16 GMT+03:00 Maruan Sahyoun <sahyoun@fileaffairs.de>:
>>> 
>>> Maruan also meant to tell you not to close coverDoc before saving :-)
>>>>> 
>>>>> thx Tilman - as usual I wasn't precise enough :-)
>>>> 
>>>> 
>>>> Tilman
>>>>> 
>>>>> Am 17.02.2015 um 22:08 schrieb Ilya Kantor:
>>>>> 
>>>>>> Hi,
>>>>>> 
>>>>>> Still getting the error
>>>>>> 
>>>>>> That's the updated code:
>>>>>> =================
>>>>>> PDDocument doc = PDDocument.load(inputFile);
>>>>>> PDDocument coverDoc = null;
>>>>>> 
>>>>>> if (coverFile != null) {
>>>>>>     coverDoc = PDDocument.load(coverFile);
>>>>>>     PDPage coverPage = coverDoc.getPage(0);
>>>>>>     doc.addPage(coverPage);
>>>>>>     coverDoc.close();
>>>>>> 
>>>>> <===================================================
>>>> 
>>>>> }
>>>>>> 
>>>>>> PDDocumentOutline outline = new PDDocumentOutline();
>>>>>> // ...
>>>>>> doc.getDocumentCatalog().setDocumentOutline(outline);
>>>>>> 
>>>>>> doc.save(outputFile);
>>>>>> if (coverDoc != null) coverDoc.close();
>>>>>> =================
>>>>>> 
>>>>>> I'm getting the error in doc.save():
>>>>>> =================
>>>>>> Exception in thread "main" java.io.IOException: COSStream has been
>>>>>> 
>>>>> closed
>>>> 
>>>>> and cannot be read. Perhaps its enclosing PDDocument has been closed?
>>>>>>   at
>>>>>> 
>>>>> org.apache.pdfbox.cos.COSStream.getFilteredStream(COSStream.java:163)
>>>> 
>>>>>   at
>>>>>> 
>>>>>> org.apache.pdfbox.pdfwriter.COSWriter.visitFromStream(
>>>> COSWriter.java:1151)
>>>> 
>>>>>   at org.apache.pdfbox.cos.COSStream.accept(COSStream.java:298)
>>>>>>   at org.apache.pdfbox.cos.COSObject.accept(COSObject.java:156)
>>>>>>   at
>>>>>> 
>>>>> org.apache.pdfbox.pdfwriter.COSWriter.doWriteObject(COSWriter.java:542)
>>>> 
>>>>>   at
>>>>>> 
>>>>> org.apache.pdfbox.pdfwriter.COSWriter.doWriteBody(COSWriter.java:449)
>>>> 
>>>>>   at
>>>>>> 
>>>>>> org.apache.pdfbox.pdfwriter.COSWriter.visitFromDocument(
>>>> COSWriter.java:1035)
>>>> 
>>>>>   at org.apache.pdfbox.cos.COSDocument.accept(COSDocument.java:464)
>>>>>>   at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1312)
>>>>>>   at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1220)
>>>>>>   at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:950)
>>>>>>   at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:922)
>>>>>>   at PdfBookPolisher.run(PdfBookPolisher.java:129)
>>>>>>   at PdfBookPolisher.main(PdfBookPolisher.java:69)
>>>>>>   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>>>   at
>>>>>> 
>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(
>>>> NativeMethodAccessorImpl.java:57)
>>>> 
>>>>>   at
>>>>>> 
>>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(
>>>> DelegatingMethodAccessorImpl.java:43)
>>>> 
>>>>>   at java.lang.reflect.Method.invoke(Method.java:606)
>>>>>>   at
>>>>>> 
>>>>> com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
>>>> 
>>>>> ================
>>>>>> 
>>>>>> ---
>>>>>> Best Regards,
>>>>>> Ilya Kantor
>>>>>> 
>>>>>> 2015-02-18 0:05 GMT+03:00 Maruan Sahyoun <sahyoun@fileaffairs.de>:
>>>>>> 
>>>>>> try closing the coverDoc after you've saved doc.
>>>>>>> 
>>>>>>> BR
>>>>>>> Maruan
>>>>>>> 
>>>>>>> Am 17.02.2015 um 22:00 schrieb Ilya Kantor <iliakan@gmail.com>:
>>>>>>> 
>>>>>>> Hi,
>>>>>>>> 
>>>>>>>> I'm trying to import a page from one document into another
one and
>>>>>>>> 
>>>>>>> getting
>>>>>>> 
>>>>>>>> an error with PDFBox 2.0.0 snapshot.
>>>>>>>> 
>>>>>>>> That's the code:
>>>>>>>> ==================
>>>>>>>> PDDocument doc = PDDocument.load(inputFile);
>>>>>>>> 
>>>>>>>> if (coverFile != null) {
>>>>>>>>    PDDocument coverDoc = PDDocument.load(coverFile);
>>>>>>>>    PDPage coverPage = coverDoc.getPage(0);
>>>>>>>>    doc.importPage(coverPage);
>>>>>>>>    coverDoc.close();
>>>>>>>> }
>>>>>>>> 
>>>>>>>> PDDocumentOutline outline = new PDDocumentOutline();
>>>>>>>> // ... I'm also working with the outline
>>>>>>>> doc.getDocumentCatalog().setDocumentOutline(outline);
>>>>>>>> 
>>>>>>>> doc.save(outputFile);
>>>>>>>> =================
>>>>>>>> 
>>>>>>>> And here's the error when saving (the last line):
>>>>>>>> 
>>>>>>>> ================
>>>>>>>> Exception in thread "main" java.io.IOException: COSStream
has been
>>>>>>>> 
>>>>>>> closed
>>>> 
>>>>> and cannot be read. Perhaps its enclosing PDDocument has been closed?
>>>>>>>> at
>>>>>>>> 
>>>>>>> org.apache.pdfbox.cos.COSStream.getFilteredStream(COSStream.java:163)
>>>> 
>>>>> at
>>>>>>>> 
>>>>>>>> org.apache.pdfbox.pdfwriter.COSWriter.visitFromStream(
>>>> COSWriter.java:1151)
>>>> 
>>>>> at org.apache.pdfbox.cos.COSStream.accept(COSStream.java:298)
>>>>>>>> at org.apache.pdfbox.cos.COSObject.accept(COSObject.java:156)
>>>>>>>> at
>>>>>>>> 
>>>>>>> org.apache.pdfbox.pdfwriter.COSWriter.doWriteObject(
>>>>>>> COSWriter.java:542)
>>>>>>> 
>>>>>>>> at
>>>>>>>> 
>>>>>>> org.apache.pdfbox.pdfwriter.COSWriter.doWriteBody(COSWriter.java:449)
>>>> 
>>>>> at
>>>>>>>> 
>>>>>>>> org.apache.pdfbox.pdfwriter.COSWriter.visitFromDocument(
>>>> COSWriter.java:1035)
>>>> 
>>>>> at org.apache.pdfbox.cos.COSDocument.accept(COSDocument.java:464)
>>>>>>>> at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1312)
>>>>>>>> at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1220)
>>>>>>>> at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:950)
>>>>>>>> at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:922)
>>>>>>>> at PdfBookPolisher.run(PdfBookPolisher.java:128)
>>>>>>>> at PdfBookPolisher.main(PdfBookPolisher.java:69)
>>>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>>>>> at
>>>>>>>> 
>>>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(
>>>> NativeMethodAccessorImpl.java:57)
>>>> 
>>>>> at
>>>>>>>> 
>>>>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(
>>>> DelegatingMethodAccessorImpl.java:43)
>>>> 
>>>>> at java.lang.reflect.Method.invoke(Method.java:606)
>>>>>>>> at
>>>>>>>> 
>>>>>>> com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
>>>> 
>>>>> ======
>>>>>>>> 
>>>>>>>> The problem does not happen when I do not import page.
>>>>>>>> 
>>>>>>>> P.S. Can I insert the new page as the first one, not the
last one?
>>>>>>>> Something like doc.getDocumentCatalog().getPages().getKids().add(0,
>>>>>>>> (PDPage) cover.getDocumentCatalog().getAllPages().get(0));
>>>>>>>> But for 2.0.0.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> ---
>>>>>>>> Best Regards,
>>>>>>>> Ilya Kantor
>>>>>>>> 
>>>>>>> 
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: users-unsubscribe@pdfbox.apache.org
>>>>> For additional commands, e-mail: users-help@pdfbox.apache.org
>>>>> 
>>>>> 
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscribe@pdfbox.apache.org
>>>> For additional commands, e-mail: users-help@pdfbox.apache.org
>>>> 
>>>> 
>>>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@pdfbox.apache.org
>> For additional commands, e-mail: users-help@pdfbox.apache.org
>> 
>> 


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


Mime
View raw message