On Thu, 2007-03-29 at 23:52 -0700, Don Hopkins wrote:
> I've been working on a PDF eBook reader activity for the Internet Archive. 
> 

Hello,

what is the internet archive?

> The goal is to make a light weight efficient PDF file reader that can search 
> and download books from the Internet Archive. 
> 
> I'm basing it on the xbook activity, but adding support for browsing the 
> Internet Archive, and changing the way it renders. 
> The xbook activity uses evince to render PDF, which runs in a separate 
> process, and supports different formats besides PDF. Instead, I want to 
> integrate the poppler PDF library into Python, and use it to write a 
> light-weight PDF book reader that draws with Cairo directly. 
> 

This is not quite correct. The xbook activity binds the evince view API,
it's not a separate process.

I think binding poppler is probably the right thing to do now, given the
Ebook requirements and how the sugar graphics API is shaping up.

> (See Irvin Probst's goal "2/ write a minimal set of python bindings for 
> libpoppler")
> http://www.mail-archive.com/[email protected]/msg00710.html
> 
> I made a Python module named "poppler" (in a project named pypoppler) that 
> can read PDF files and render them by calling Cairo directly (instead of 
> making an intermediate bitmap with its own renderer or running a separate 
> process). It can take a pycairo context as a parameter. So now I can render 
> PDF files into Cairo contexts from Python, at any scale or rotation or 
> clipping region! 
> 
> I used SWIG to define a "poppler" Python module with wrappers around C++ 
> classes for Document and Page. They wrap the corresponding poppler glib 
> objects.
> 

I'm not that happy about SWIG, since poppler has a glib API and most of
sugar API is gobject based. Though using poppler directly might give us
more flexibility. In the end I don't think it's a big issue, so I'm fine
with whatever it's easier for you.

> I put in the most important methods that will be useful to us now (count 
> pages, get a page, measure the page, render the page through Cairo), but 
> haven't fleshed it out with support for all the other things you can do with 
> PDF files (annotations, fonts, index, form fields, etc).
> 
> I found some m4 macros for configuring Python extensions with SWIG, which 
> helped make the configuration process easier.
> The header file popplerwrappers.h is SWIG-friendly valid C++ header defining 
> Document and Page classes with inline function definitions, and it gets 
> processed by SWIG as well as included in the generated wrapper.
> 
> The "poppler.i" SWIG file defines some headers and initialization code, 
> defines some typemaps, and loads some typemaps from "pycairo.i".
> It defines some initialization code that imports the pycairo interface (so we 
> can pass pycairo.Context in and get the cairo_t to draw with), and initalizes 
> the glib object system.
> It defines some typemaps for out parameters (so functions like size and 
> getCropBox can return multiple numbers).
> 
> The "pycairo.i" SWIG library defines typemaps that let you convert between C 
> cairo_t pointers and Python pycairo.Context objects (which 
> could be used by other projects).
> 
> Typemaps let you tell SWIG how to pass and convert parameters in and out of 
> functions (like the Cairo context).
> 
> I've found some cool Python libraries for generating charts and reports in 
> PDF (PyChart and ReportLab). Is anyone considering including stuff like that 
> in the standard distribution, and are there any favorites? SimCity could use 
> PyChart and ReportLab to display its history graphs and statistics. Here are 
> some ideas I wrote about the eBook reader and related projects that people 
> could work on:
> 
> http://wiki.laptop.org/go/Summer_of_Code/2006
> 
> ebook reader
> 
>     Mentor: Don Hopkins 
> 
> Work with a crossmark/html book reader, or produce tools for converting 
> to/from this format, to give children annotatable access to the worlds 
> digitized books.
> 
> Don Hopkins is developing a PDF based eBook reader for the Internet Archive, 
> using the "poppler" library to draw with Cairo. It will have a simple book 
> reading user interface to search, page, zoom, pan, rotate, arrange pages in 
> various configurations, follow links, navigate the index, etc. It should be 
> fully usable in "book mode" with the game controller. It will be able to 
> browse and search the Internet Archive eBook library, and download eBooks to 
> read. It can use the Internet Archive RSS feeds and web services to get lists 
> and descriptions of books, and search the archive, and download XML meta-data 
> and PDF documents.
> 
> Other interesting eBook related projects:
> 
> Optimizing eBook activity and libraries for low power and memory consumption. 
> Optimizing Cairo library image rendering. Reusing the "poppler" PDF rendering 
> module for other purposes. Integrate useful PDF generation modules (i.e. 
> PyGraph, ReportLab). Write some useful components and applications using PDF 
> generation and rendering modules. Extending Poppler's API to support editing 
> PDF documents. Developing a simple PDF editor component (for annotating 
> eBooks and editing graphics).
> 
> Collaborative shared eBook reading activity: synchronize the document, page 
> and a cursor over the network, so kids can take turns reading an eBook out 
> loud together, with special support for plays and scripts. Each child chooses 
> one or more characters to read, and the eBook parses the text to know who 
> speaks each line, and prompts each child to read their lines by zooming and 
> highlighting the text to read.

Awesome! Do you have a public repository for this work? As soon as it
doesn't regress xbook functionalities I'd like to get it into the
builds.

Marco


_______________________________________________
Sugar mailing list
[email protected]
http://mailman.laptop.org/mailman/listinfo/sugar

Reply via email to