Okay, I never blogged this, my bad.

To sum up, about 2.5 weeks ago, I had made Print capable of USB printing.

Here are some screen shots:

I have yet to test the integration with the print device icon. I suppose it will work fine, because
the device icon works just fine for any usb print activity (last i checked with a printer).
For now it works like a charm for any file viewed in Print and which prints to Cups-PDF.

Feedback pleeaaaaaase 😀

p.s. Oh, the Print Setup will have an incarnation as a print dialog, but that’s a poll. 😉


As the title speaks, Printing from Moodle just works.
A few things to note, the thing is still messed up. There is quite a lot of work to be done.
1) Add a settings page for the administrator (global File upload limit*)
2) Clean the UI messages
3) Get the messy XML-RPC code working! ( I cant figure out how to save the sent binary data as a pdf…)

If that’s done 85%-90% of this project will be done.

Tim (from Moodle) and Martin had suggested I redo my module as a block, BUT my idea was before I pull out something new, get at least this working completely so I have a backup.
So anyway, apologies for the late update, but fighting with xml-rpc is taking longer, and I had been travelling too.

Print Metamorphoses..

June 3, 2009


last week was pretty mundane, I was mostly with #moodle taking tips and trying to create a plugin for assignments that does printing, constraints uploads to PDFs and also displays them as thumbnails. Martin L had said there is definitely a much better way to do this, and we should be having a meeting this weekend.

From what I understood with moodle is the following:
Moodle has amazing extensibility:

1) It allows plugins to be placed with simple ‘tag’ code

2) You never have to build anything new for a moodle feature, It already exists within the core libraries (lib), you just need to properly play with it.

3) moodle has comments for every three lines of code

Only pitfall is, you can never figure out where to place new code, code which is non-moodle, that is:P

I had taken the existing upload assignments type plugin and made a new type print plugin, added new strings to get_string(). And played with the upload_lib.php so I could do pre-checks for PDF, and was looking up where exactly to put the thumbnail code. I guess this would have made my job quite trivial.



What I had proposed in my previous post is pretty much alive now. To sum up:

I made a 140 line basic print API that (for the time being only) parses filetypes like rtf and odt to cups-pdf, gets a temp pdf, and opens it in Print ( yes, this is the metamorphosis I was talking about, It is Print NOW!). And a new function in printactivity.py takes care of saving the pdfs. homunq had said saving a journal entry by default is good, I will have to edit it sometime.


*From my time with the pycups wrappers and system-config-printer, I’ve discovered that there is great scope to put print devices on share, or print to shared devices, display print queues, cancel jobs and what not. If only thing that might be of some work is, is the page config options. All this I sum upto a +300-400 lines of code in the print API.

Now comes the question of how to display all of this jargon to the sugar user. ‘How and When?’ .Tomeu had said he would help me on this one by posting a mail on the lists, I will also look up other activities and try to create mockups.

Andres and I got to do a few bugsquashing

And we were worried about Rainbow getting in the way, as cups-pdf could save to locations beyond rainbow provided freedom. Thanks to a discussion with Benjamin M. Schwartz, that got sorted out.

And I got around to making this function today:.

def _printPDF (self, _printer, _filename, _title = None):

Plan for the following week:
* Make Mock-ups
* Talk with Andres and team about where everything(such as queues, printer selection etc) would show up
* Talk with Martin and get the moodle plan sketched
* If all works out write out a rigid deadline for each week.

And when I’m not doing any of that:
* Code on elongating the sugar Print API

*trumpets and drums*
The Filter Code!
And thus, we have a filter for ODF!

The part that lagged this was the lack of my knowledge to do a chmod on the filter so that it could be written and read by all,
and SELINUX , and the lack of knowledge that a filter cant write to user directories (that was the biggest part, as the sample program would work but this wouldn’t)

Anyway, what you should do to make it work ( I will make a package for this soon)

1) Open terminal in SU mode 'gedit /etc/cups/odftops.types'
# Local MIME definition for ODT files
application/vnd.oasis.opendocument.text odt
and save
2) in terminal/konsole 'gedit /etc/cups/odftops.convs'
# Local ODT to PostScript filter for CUPS
application/vnd.oasis.opendocument.text application/postscript 100 odftops
and save
3) again do a 'gedit /usr/lib/cups/filter/odftops'
Paste the pastebin code in it and save
4) now do a 'chmod 777 (or 755) /usr/lib/cups/filter/odftops' under root
and then do a restorecon

and voila we have a odt filter set up. 🙂
of course libabiword is a dependency

I’m introduced to the sugar community through GSoC, and my project is adding print support to the XO laptops in a teacher controlled environment (which is the primary case) and the secondary would be to see to it that even network printing can be done.

And as for me I am a 3rd year engineering student from Chennai, India. I was always fascinated by this feature:
hit a button and see the object on screen move, it always made me think I was supreme if in a constrained environment.

Though I want to pursue more Mathematical/statistical and pure computer science specific research areas in the future,
User Interfaces and networking have been two things that are very integral to a programmers life. So I would like to learn some awesome things in this area with this project of mine.


CUPS-PDF can print from virtually any format, provided we have the filter for it (i.e. one can convert that mime type/ format to PostScript)
And so it happens that there isn’t a filter made for ODF to PS made yet, but there is still hope. People have already provided tutorials on how to add filters to CUPS. For instance IBM’s DVI Filter
tutorial is pretty handy. And this post seems to be pretty in-depth Filter Guide

I have already been working on a filter for ODT, it doesnt quite do an efficient job, and I messed it up bigtime (For the time being)

So anyway, it does conversion like this( since abiword cant directly write PS out of odt (due to bug 11247? ) for the current version)

converts odt ->doc->ps. There is notable quality drop, but not major, the pictures look a bit blurred out, thats about it.
All the formats, rulers etc are the same.

I will GIT this up as soon as I finish this. Got these exams to contend with for the time being 😦