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 > [email protected] > http://lists.freedesktop.org/mailman/listinfo/poppler _______________________________________________ poppler mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/poppler
