[ 
https://issues.apache.org/jira/browse/PDFBOX-2981?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14900840#comment-14900840
 ] 

Evgeniy Muravitskiy commented on PDFBOX-2981:
---------------------------------------------

If you will use this patch can you change method 
PDDocument.prepareIncrement(COSDocument) from:
{code}
...
COSBase object = cosDoc.getObjectFromPool(cosObjectKey).getObject();
if (object != null && cosObjectKey!= null && !(object instanceof COSNumber))
{
    objectKeys.put(object, cosObjectKey);
    keyObject.put(cosObjectKey,object);
}
...
{code}
to:
{code}
COSObject objectFromPool = cosDoc.getObjectFromPool(cosObjectKey);
COSBase object = objectFromPool.getObject();
if (object != null && cosObjectKey!= null && !(object instanceof COSNumber))
{
        if (!incrementalUpdate || objectFromPool.isNeedToBeUpdated() ||
                        (object instanceof COSDictionary && ((COSDictionary) 
object).isNeedToBeUpdated()))
        {
                                        objectKeys.put(object, cosObjectKey);
                                        keyObject.put(cosObjectKey, object);
                                }
                          }
{code}


> Not correct support of incremental save
> ---------------------------------------
>
>                 Key: PDFBOX-2981
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-2981
>             Project: PDFBox
>          Issue Type: Bug
>          Components: Writing
>    Affects Versions: 2.0.0
>            Reporter: Evgeniy Muravitskiy
>         Attachments: Incremental_save_fix.patch
>
>
> When write code like follows:
> {code}
> try {
>                       PDDocument document = PDDocument.load(new 
> File(SOURCE_PATH));
>                       // SOME_OBJECT is not object number of catalog, info 
> dictionary or encrypt
>                       COSObjectKey key = new COSObjectKey(SOME_OBJECT, 0);
>                       COSObject objectFromPool = 
> document.getDocument().getObjectFromPool(key);
>                       COSDictionary object = (COSDictionary) 
> objectFromPool.getObject();
>                       object.setItem(COSName.getPDFName("Test"), 
> COSBoolean.TRUE);
>                       object.setNeedToBeUpdated(true);
>                       OutputStream writer = new BufferedOutputStream(new 
> FileOutputStream(OUTPUT_PATH));
>                       document.saveIncremental(writer);
>                       writer.close();
>                       document.close();
>               } catch (IOException e) {
>                       e.printStackTrace();
>               }
> {code}
> in result file I`ve got nothing. It`s related with next problem: when we use 
> {{PDDocument.save(OutputStream)}} - {{OutputStream}} is real output stream 
> (for example, {{FileOutputStream}} or {{BufferedOutputStream}}), but 
> incremental save use {{ByteArrayOutputStream}} which not store data in some 
> file and only keep it in memory. Also when save is incremental data from 
> source file is not send to result file.



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

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to