Your editor spends a
lot of time dealing with PDF files. The
proliferation of "profit through litigation" business models has not helped
in this regard, but, even without the legal profession's contributions,
much text of interest comes in the PDF format. As a result, a great deal
of your editor's time is
spent working in PDF viewers. PDF viewing hassles can rival the holiday
season in their ability to make an editor
grumpy. There is little to be done about
the latter, so it seems like a good time to review the state of the art in
free PDF viewers. Maybe, in that realm, something better can be found.
In theory, PDF viewers require little in the way of features. They should
present the contents of a file in a quick and readable manner, allow
navigation through the file, support printing of (parts of) a PDF file,
etc. So it should not be that hard to get things right. One would think.
In practice, your editor has found that the quality of the available PDF
viewers varies significantly, both in terms of the interface they provide
and how well they simply work.
There are two base platforms upon which PDF viewers are built. Some are
front ends to the ghostscript
utility. Ghostscript is a large, complex, and not entirely bug-free
utility (it is also a crucial part of many Linux systems); its strengths
and shortcomings will be reflected in any PDF viewers built on it. Most
other viewers are built on xpdf. We'll start with the ghostscript-based
viewers.
GNOME Ghostview (ggv)
The GNOME PDF viewer of long standing is ggv. Interestingly, this utility
seems to lack a web site, though there is an
online manual available which is only slightly out of date. The most
recent ggv release was in September of 2004, as part of the GNOME 2.8
package. It is a ghostscript-based viewer.
The ggv screen includes a left-hand side bar which allows instant access to
any page in the document. Pages can also be marked, either directly with a
mouse click or with buttons which mark all pages, or just the even or odd
ones.
There is an option which can be used to print only the pages which have
been marked. The "print" button in the menu bar, however, just dumps the
entire file into the print subsystem without providing any opportunity for
the user to redirect the job or cancel the operation entirely. Your
editor, who prefers to fire up his monster duplexing laser printer for the
rare large print job, gets grumpy indeed at utilities which throw output at
the little inkjet printer without even asking. One should not be able to
dump hundreds of pages onto a printer with a single click.
ggv does not take a whole lot of clues from the document regarding its
orientation; a file which looks to be in portrait mode, but which has pages
that are wider than they are tall, can be presented (and printed!) in the
wrong orientation. The window size is always whatever the user used the
last time around, and does not react to the orientation of the document.
It is possible to ask ggv to zoom the document to fit within the window it
has (a nice feature), but doing so disables the manual zoom operations
(which is not). The scrollwheel may be used to move within a single page,
but it will not scroll between pages, making it mostly useless.
Every now and then your editor encounters a document which ggv is unable to
render. With such documents, the usual result is a blank window, which is
not particularly edifying.
The visual quality of ggv's output is good; it runs ghostscript in a
high-quality, antialiased mode. There is a reasonable set of configuration
options for a number of aspects of ggv's operation, including how it uses
ghostscript. If it were not for occasional reliability
problems and a number of user interface issues, it would be a contender for
this editor's favor.
kghostview
The KDE contribution in the PDF viewer arena is kghostview,
shipped as part of the kdegraphics package. Like ggv, kghostview uses
ghostscript as a back end; as a result, it tends to fail on the same PDF
files that confuse ggv. In many ways, kghostview comes across like ggv
with a KDE look; it provides many of the same features. There are some
differences, however.
Like ggv, kghostview provides a navigation bar on the left side; it also
allows for the marking of articles. The kghostview version is different,
however, in that it includes thumbnail images of each page. These
thumbnails take space, making it more likely that the user will have to
scroll the navigation bar. They are, however, very nice to have when one
is looking for a specific page - the beginning of a section, say, or the
end of an interminable table of contents. The thumbnails, alone, make
kghostview a nicer tool to use than ggv.
kghostview has a friendlier interface for printing, allowing just about any
behavior to be configured. Among other things, kghostview can do 2-up or
4-up printing, which can be useful for many documents. Printing can be
restricted to marked pages. And, crucially, nothing is actually sent to
the printer until the user has confirmed the operation.
Scrolling through the document with the scrollwheel is supported. If the
user scrolls several pages, the application does the right thing - it does
not take the time to render the pages in the middle. A single keystroke
will fit the rendered document into the current window without disabling
the regular zoom operations. If you are currently only viewing part of a
page, you can drag a box around in a special thumbnail image to move to any
part of that page.
In general, the interface provided by kghostview is as nice as any PDF
viewer your editor has been able to find. It is clearly a tool which has
received some serious thought - and use - by its developers.
xpdf
xpdf differs from the viewers we
have seen thus far in that it is not based on ghostscript; instead, it
contains its own PDF interpreter and rendering engine. A couple of the immediate consequences
of that difference are (1) xpdf is rather faster than the
![[xpdf]](/images/ns/grumpy/xpdf-sm.png)
ghostscript-based viewers, and (2) xpdf can often display documents
which are not viewable with the other tools. In other words, xpdf is an
important tool for those of us who end up working with PDF files often.
It is worth noting that, unlike the ghostscript-based viewers, xpdf (and
others built on it) cannot handle PostScript files. That is a fundamental
limitation, but, perhaps, also the source of xpdf's speed and robustness.
Compared to the GNOME and KDE viewers, xpdf is a minimalist tool. There
are no menu bars, no fancy configuration widgets, and no navigation side
bars. A small set of buttons at the bottom of the screen allows for
movement through the file, including the ability to go to an absolute page
number. A small menu gives a set of zoom options, including a couple of
"fit to page" modes. Your editor notes that, when "fit to page" is
enabled, the application responds poorly when its window is resized; it
fails to skip intervening X resize events, and thus has to render the page
numerous times.
If you drag the corner of an xpdf window around for a few seconds, you can
end up waiting for some time before it catches up.
The apparent simplicity of the xpdf interface hides a couple of vastly
useful features. One of those is a "find in text" button,
cleverly disguised as a pair of binoculars. If you have ever tried to find
a particular string in a PDF file, this capability is priceless. Equally
useful, if you are one of those strange people who writes articles about
things found in PDF files, is the ability to cut and paste text from those
files. Both of these functions silently fail if the file's text is in an
image format - as is the case with many scanned legal documents. But, when
they work, they are highly useful.
According to its web site, xpdf has the ability to work with encrypted PDF
documents. Your editor, not having any such documents sitting around, was
not able to try out that capability.
Navigation through PDF files is quick and straightforward, though it would
be nice to have a side bar for going directly to pages. xpdf maintains a
navigation history which can be useful for bouncing back and forth between
specific pages. The scrollwheel works as one would expect. Printing
support is minimal, but it has the features one really needs: the ability
to print a (contiguous) subset of the file, and to specify which printer is
to be used.
gpdf
gpdf is a
GNOME-based PDF viewer built upon xpdf. As such, it shares the robustness
and speed of xpdf. The gpdf developers, however, have added some new
![[gpdf]](/images/ns/grumpy/gpdf-sm.png)
features of their own - and left others out.
gpdf provides a rather confusing toolbar at the top of the page. It is far
from clear, for example, how the buttons marked "next" and "previous"
differ from those marked "forward" and "back". There are two
downward-pointing arrows; experimentation shows that one brings up a file
history menu, while the other contains anything which doesn't fit in the
toolbar at the current window width. There is a side bar in gpdf. It
looks as if, someday, it is meant to contain page thumbnails, but, with
gpdf 2.8.0, it renders pages as blank white rectangles with drop shadows.
For whatever reason, it uses a two-column format, requiring the user to
make the side bar very wide, or to do a bunch of horizontal scrolling.
gpdf uses the GNOME printing widget, so it provides a higher degree of
control over printing than xpdf. It can put multiple PDF file pages onto
each printed page. Better printing support is a definite improvement over
xpdf.
On the other hand, gpdf lacks xpdf's scrollwheel support. It does not
provide the "find in text" and "cut and paste" capabilities, which, it
seems, are unique to xpdf. It is not clear why those features are missing;
one might guess that gpdf forked the xpdf code base before they were
added.
kpdf
The first impression one gets of kpdf is that it looks much like
kghostview. It has essentially the same icon layout, and a very similar
![[kpdf]](/images/ns/grumpy/kpdf-sm.png)
side bar with page thumbnails. kpdf, however, is an entirely different
application, built on xpdf. Like gpdf, it seems to have left out many of
the unique xpdf features.
kpdf is a relatively immature work. Its rendering is poor, by far the
worst of any of the PDF viewers reviewed. Somehow, kpdf does not appear to
understand font information well, leading to strange spacing between
letters on both Fedora and Debian platforms. kpdf is speedy, however, and
many of the important features are there.
It does appear that further work is being done with kpdf, at least if one
goes by some screenshots
linked to by KDE.News. The images suggest that the current development
version supports multiple-page displays, string searches, and more. A future
kpdf could well be be best PDF viewer of them all; the current version is
too unfinished to be usable, however.
Concluding notes
This review has concerned itself with free PDF viewers. No review of this
application space can really get away with ignoring Adobe
Reader (acroread), however. This tool is certainly not free software,
but there is a free-beer version available for x86 Linux systems. It is an
old version; Adobe Reader 6 is not available for Linux. Even the
older version, however, has its value. Occasionally a PDF file will come
along that is so strange that no free viewer can cope with it. Acroread
can be counted upon to work in such situations. It is, thus, one of
exactly two proprietary programs on your editor's system.
Happily, free PDF viewers have come far enough along that having to fall
back to acroread is a rare event.
The free PDF viewer state of the art has advanced in recent years, which is
a good thing. This is an area where, for quite some time, the free
alternatives lagged far behind. Now we have a wealth of viable programs to
choose from. Too many, perhaps. Your editor might like it better if the
development community would come together on, say, two viewers, and
cooperate on making those two the best they can be. The history of these
projects suggests that will not happen, however. There are two rendering
engines (ghostscript and xpdf), multiplied by two desktop systems.
Crossing those lines can be hard. We are likely to have a large set of
actively-developed PDF viewers for some time yet.
(
Log in to post comments)