Joachim Breitner's Homepage
Better PDF screenshots with gtk 3
Half a year ago, I experimented with gtk+ and cairo to extract a PDF screenshot out of a progam, i.e. a screenshot of the window that is not a table of colored dots as a regular PNG file would be, but rather a vector graphic that scales perfectly and has selectable text. The main use that I see is documentation: A scalable screenshots looks much better in print, and even in an online-PDF-file, having the full-text-search also find the text in the images is useful.
My experiments back then were successful in a proof-of-concept way, but they were very ugly hacks. With the new version 3 of gtk+, though, things become much easier, as only one cairo context is used, instead of each widget creating its own context to draw on.
By now, the first gtk-3 applications have reached Debian unstable, so I thought it would be time to re-do the experiment. And the result is very pleasing: The pdf screenshot program comes as a gtk module that you can load by setting an environment variable before launching a gtk-3 program. The application will run as usual, but there is an additional PDF screenshot button. If you click it, you get a “Save File” dialog (with a nice, live-updated preview of the screenshot, as an additional gimmick) that lets you save a PDF file. Its as easy as that. You can check out the resulting PDF file of gucharmap and a screencast of me creating that file, including copy’n’pasting from the resulting document.
PS: I would offer the video as well on YouTube, but it seems it does not accept Ogg Theora videos. I hope all of you can make use of the above links.
Update: By popular demand, I also created a SVG version. It even looks better because the embedded pixmaps have a higher resolution – probably gtk is confused by the resolution of the PDF cairo surface. The code is almost trivially the same. I guess I could add other formats (PNG, PS) as well. Now I just have to find out how to tame GtkFileChooser to offer this feature better.
Comments
I agree that SVG is a good idea, since most* people read documentation online on html/web pages.
*) it's my assumption anyway.
It is really amazing how exactly like the original program it looks.
Ideally, I’d like to take screenshots of any running program, not only those started with the right GTK module. But I don’t know if it is possible to hook into a running gtk program without resorting to too much hacks.
Or maybe the gtk module is included by default in all running applications, and activated by some signalling, e.g. via the X properties of the window.
But other than those bells and whistles, the code is ok so far.
It does not work in all cases, of course. It can only handle gtk-3 applications, and excludes those that do not use cairo for drawing (e.g. gnome-terminal’s vty widget).
It opens an interesting path for UI functional testing of GTK+ 3 apps.
but when i read it on golem at first i thought that text remains text...:)
would be pretty cool! no, it really would be awesome!!
i do not mean ocr stuff. i was thinking about exporting "selectable text" as text.
if you can select text as a user, it should be possible for a process as well, right?
ps: have you finished your double-diploma yet?
As for the diploma: I am waiting for the transfer of credits from India, then I should be done with the computer science diploma.
not checked pdf file yet, but man, that's awesome!
ps: thumbs up for finishing :)
pps: the text-selection color in this comment box is not distinguishable from the background color, intention or does something went wrong with css? (ff4, win7)
It is here. Try tilting your laptop screen, if I tilt mine down, it becomes indistinguishable.
This, on a desktop LCD with a backlight so bright that it'd fry your retina if you looked at it for too long. ;-)
(need to get some sun-glasses...)
Inkscape can convert Pdf to Svg, while asking you if you want to convert text to shape (or not).
A test made with the Joachim's PDF sample worked very well: I was able to edit and translate all texts from German to French, even the smileys! ;-]
Very useful to send translation in context (i. e. showing labels that are too short to contain a translated text), both in a portable manner (all modern browsers are indeed able to show svg graphics) and an indexable one (svg are text, easy to index and edit). Gzip compressed svgz graphics are generally lighter (i. e. 1/7 in this case) than equivalent png bitmaps. Very nice for good quality printing too!
Lots of advantages. Thanks to Joachim for this brilliant idea.
Anyways, I’m not too worried about that at the moment. The layout of the webpage is not too great any more anyways.
But Firefox might have changed a lot since then, so I can’t promise anything.
Have something to say? You can post a comment by sending an e-Mail to me at <mail@joachim-breitner.de>, and I will include it here.