When you get to the second half of the list, getAnnot(x) probably fails because you don't have as many items in the list. You should either traverse the annotation list in reverse order (from n_annots to 0), or always remove annotation 0 in your "for" loop.

Pierre-Luc


On 17-07-14 11:35 AM, Jannick wrote:

Dear All,

my code snip below suggests that ‘a.pdf’ is copied to ‘b.pdf’ AFTER

removing all annotations of a.pdf. However, b.pdf still contains all

annotations seen in a.pdf.

Am I missing something obvious here?

Thanks,

J.

// main.cpp:

#include <stdio.h>

#include <stdlib.h>

#include <PDFDoc.h>

#include <GlobalParams.h>

int main(int argc, char** argv)

{

    const char* f_in = "test_in.pdf";

    const char* f_out= "test_out.pdf";

    GooString gf_in(f_in);

    GooString gf_out(f_out);

    globalParams = new GlobalParams();

    PDFDoc * doc = new PDFDoc(&gf_in);

    if ( doc->isOk() )

    {

        int i_pages = doc->getNumPages();

        for ( int i_page = 1; i_page <= i_pages; i_page++ )

        {

            Page * page = doc->getPage(i_page);

            if( page )

            {

                Annots * annots = page->getAnnots();

                int n_annots = annots->getNumAnnots();

                for ( int i_annot = 0; i_annot < n_annots ; i_annot++ )

annots->removeAnnot(annots->getAnnot(i_annot));

            }

        }

doc->saveAs(&gf_out,writeForceRewrite);

        delete doc;

    }

    else

    {

        fprintf(stderr, "error when opening '%s'\n", f_in);

    }

    delete globalParams;

    return 0;

}



_______________________________________________
poppler mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/poppler

_______________________________________________
poppler mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/poppler

Reply via email to