[poppler] Getting a raster image like pdf2ppm

Albert Astals Cid aacid at kde.org
Wed May 20 13:25:39 PDT 2009


A Dimecres, 20 de maig de 2009, Angus March va escriure:
> Albert Astals Cid wrote:
> > A Dimarts, 19 de maig de 2009, Angus March va escriure:
> >> Adrian Johnson wrote:
> >>> Angus March wrote:
> >>>> I tried using Poppler to get a Cairo surface and then saving the
> >>>> surface to a PNG. Unfortunately, the resulting image was of
> >>>> disastrously low quality.
> >>>
> >>> Without seeing your code or the output you are getting I can only
> >>> guess at what the problem might be. Did you alter the cairo scale to
> >>> get the desired image dpi?
> >>
> >>     It was definitely an improvement, but I think the only thing that
> >> did improve was the resolution. The old problems that caused me to
> >> abandon Cairo persisted, which are: gradients have ugly stripes on them,
> >> a background that should be white and opaque is black and transparent,
> >> and some text that has a shadow in the PDF doesn't in the image. I don't
> >> suppose you know of a way to deal w/those problems.
> >>
> >>     But this is my code for the Splash solution I was using, derived
> >> from the pdftoppm code I found. Again, my problems there are
> >> segmentation faults, which valgrind reported on. I won't repeat those
> >> reports, unless someone asks me to. Don't be fooled by the word
> >> "thread".
> >
> > Poppler works perfectly inside threads.
>
>     If so, then this is out-of-date:
> http://lists.freedesktop.org/archives/poppler/2007-November/003083.html

Yeah, i wonder why Jeff said that, poppler has always been ok running in a 
thread afair.

>
> >> It's a throwback to when I had an MT solution. This solution,
> >> as I'm sure you'll figure out, is multi-process. This is the entirety of
> >> my Poppler and Splash code. Do you see anything that I missed?
> >
> > C++ courses ;-)
> >
> >     PDFDoc &doc = *m_pdoc;
> >     splashOut->startDoc(doc.getXRef());
> >
> > is one of the weirdest things i've ever came across, why not just
> >
> >     splashOut->startDoc(m_pdoc->getXRef());
>
>     Because I had previously had doc allocated on the stack as a PDFDoc.
> When I moved the instance to the heap and made its pointer a member of
> the class I decided to put that there, rather than change all the
> references to "doc". If you don't like that, you'd probably hate a lot
> of my code.
>
> > ?
> >
> > I don't see anything obviously wrong.
> >
> > Basically it is:
> >  * Create PDFDoc
> >  * Create SplashOutputDev
> >  * Call SplashOutputDev::startDoc
> >  * Call PDFDoc::displayPageSlice
>
>     Well there definitely is something wrong, because it works with
> pdftoppm. I thought of things like the __attribute__((constructor))
> attribute, or static objects, but I don't see any evidence of the
> attribute and I wouldn't know how to find a static object in all that
> code. Maybe multiple processes causes problems for Splash. 

How can multiple process create problems if processes are totally separated? 
Besides i run various pdftoppm in parallel usually and there's no problem.

> It's hard to know where to go.

The crashes you pasted are from poppler compiled with -O2? If so remove the -
O2 and substitute -g by -g3. Optimized poppler backtraces are really 
misleading.

Albert

> _______________________________________________
> poppler mailing list
> poppler at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/poppler




More information about the poppler mailing list