[poppler] (1) blurred text (2) ownership of TextBoxes

Mark Summerfield mark at qtrac.eu
Wed Oct 22 00:10:37 PDT 2008


On 2008-10-21, Albert Astals Cid wrote:
> A Dimarts 21 Octubre 2008, Mark Summerfield va escriure:
> > Hi,
> >
> > I recently started using the poppler library with the Qt4 headers and
> > have found it easy to use and generally excellent.
> > For example, see http://www.qtrac.eu/diffpdf.html
> >
> > (1)
> >
> > I'm now trying to develop a console app that will do 2-up, 4-up, and so
> > on printing, optionally ignoring each page's margins to maximize the use
> > of space.
> >
> > But unfortunately, I'm getting blurred pages and don't know why.
> >
> > I create a QPrinter in PDF mode and switch render hints _on_ for the
> > poppler document which I render to a QImage. I then create a QPainter on
> > the printer and switch its render hints _off_---so that it will just
> > paint the QImage pixel for pixel.
> >
> > I've attached (the very rough first cut) of the source (since it is only
> > 160 lines), in case anyone has the time/inclination to have a look, esp.
> > since I'm hoping I just did something silly that you'll spot in a
> > moment:-)
> >
> > [Another problem with the program is that poppler seems to default to 72
> > dpi, but QPrinter depends on the actual printer driver, so in my case is
> > 75 dpi.]
>
> The problem with printing images that contain text is usually low
> resolution of the image, you should be able of fixing this asking for a
> huge image (setting a high xres and yres on renderToImage) that should give
> you acceptable printouts at cost of high memory usage. For example, the PS
> renderer when finds a image with transparency, that is not supported by PS,
> renders a image and puts it in the PS, the used DPI is 300, and some people
> still complain is too small.

Albert,

Thanks for this information, it has helped.

Another problem I've had is with resolution---poppler works at 72dpi but
QCoreApplication gives me 75dpi while QApplication gives me 96dpi on one
machine and 98dpi on another. What would help is if all the methods that
are dpi dependent could take dpi arguments. For example, you can pass
dpis to renderToImage() which is great, but not to
TextBox::boundingBox() which means you must do the conversion manually.

> > (2)
> >
> > In the docs it makes clear that you get ownership of Poppler::Document
> > and Poppler::Page and so must delete them---that's fine, I use
> > std::tr1::shared_ptr to handle that. But when you do
> > Poppler::Page::textList() it isn't clear whether you get ownership of
> > the Poppler::TextBoxes or not? I've assumed that you don't, but I'd like
> > to know.
>
> You assumed wrong, you need to take care of deleing the textboxes. I'll fix
> the documentation to clearly state that.

OK, I'll delete them once I've finished with them.

Thanks!


-- 
Mark Summerfield, Qtrac Ltd, www.qtrac.eu
    C++, Python, Qt, PyQt - training and consultancy
        "Rapid GUI Programming with Python and Qt" - ISBN 0132354187



More information about the poppler mailing list