This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
gsoc:google-summer-code-2017-openprinting-projects [2017/01/16 12:36] till [Flattening non-static content (like filled forms) in PDF files for printing (1 student)] |
gsoc:google-summer-code-2017-openprinting-projects [2017/01/27 14:08] (current) till [Common Print Dialog for desktop applications and mobile devices (up to 3-4 students)] |
||
---|---|---|---|
Line 17: | Line 17: | ||
To make printing easy for the users of desktop systems and mobile devices he once needs a well-designed print dialog where he can easily find the right printer under the available printers, set general, printer-specific, and document-specific options, preview the printout, and send the job. But he also neds consistence between applications, printing should work the same way from every application, the print dialog should be the same all over the system. | To make printing easy for the users of desktop systems and mobile devices he once needs a well-designed print dialog where he can easily find the right printer under the available printers, set general, printer-specific, and document-specific options, preview the printout, and send the job. But he also neds consistence between applications, printing should work the same way from every application, the print dialog should be the same all over the system. | ||
- | For the dialog itself there is already a design of how the user interface could look like. It was done by the design team of Canonical (the company behind Ubuntu) and can be found [[https://wiki.ubuntu.com/Printing|on the Ubuntu Wiki]]. The dialog should support twoways of obtaining available printers: Most importantly it should list the local CUPS queues and get printer properties and options through CUPS. I also should be able to pick IPP network printers from the network via Bonjour/DNS-SD and query the printer's properties via IPP (mainly for mobile devices to use IPP Everywhere and AirPrint printers). | + | For the dialog itself there is already a design of how the user interface could look like. It was done by the design team of Canonical (the company behind Ubuntu) and can be found [[https://wiki.ubuntu.com/Printing|on the Ubuntu Wiki]]. The dialog should support three ways of obtaining available printers: Most importantly it should list the local CUPS queues and get printer properties and options through CUPS. It also should be able to pick IPP network printers from the network via Bonjour/DNS-SD and query the printer's properties via IPP (mainly for mobile devices to use IPP Everywhere and AirPrint printers). The third way is to connect to the user's Google account to list the Google Cloud Print printers which the user has registered. |
- | To allow for the print dialog being provided by the currently running desktop (Unity, GNOME, KDE, ...) or mobile environment while the different applications use different GUI toolkits (GTK, Qt, ...) the print dialog and the application should be implemented in different executables which communicate by D-Bus. An appropriate D-Bus interface got already [[:openprinting:cpdapi|designed earlier]]. Probably the designe can already be used as it is, perhaps it needs some slight modifications. | + | To allow for the print dialog being provided by the currently running desktop (Unity, GNOME, KDE, ...) or mobile environment while the different applications use different GUI toolkits (GTK, Qt, ...) the print dialog and the application should be implemented in different executables which communicate by D-Bus. An appropriate D-Bus interface got already [[:openprinting:cpdapi|designed earlier]]. Probably the design can already be used as it is, perhaps it needs some slight modifications. |
- | The task for the student(s) is to implement the dialog with a major toolkit (GTK or Qt) or to add the D-Bus interface to call the Common Print Dialog to a major toolkit or an aimportant application. | + | The task for the student(s) is to implement the dialog with a major toolkit (GTK or Qt) or to add the D-Bus interface to call the Common Print Dialog to a major toolkit or an important application. |
At OpenPrinting there has already been worked on a similar project earlier. See the resources [[:openprinting:commonprintingdialog|here]]. | At OpenPrinting there has already been worked on a similar project earlier. See the resources [[:openprinting:commonprintingdialog|here]]. | ||
Line 27: | Line 27: | ||
This project will be divided under several students (GTK dialog, Qt dialog, D-Bus interfaces for applications/GUI toolkits, ...). | This project will be divided under several students (GTK dialog, Qt dialog, D-Bus interfaces for applications/GUI toolkits, ...). | ||
- | Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Ubuntu GUI developers TBD | + | Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Aveek Basu (basu dot aveek at gmail dot com), Ubuntu GUI developers TBD |
Desired knowledge: C/C++ programming, GUI programming, GTK, Qt, D-Bus | Desired knowledge: C/C++ programming, GUI programming, GTK, Qt, D-Bus | ||
Line 35: | Line 35: | ||
For printing a job usually applications generate PDF files and send them to the printing system ([[http://www.cups.org/|CUPS]]), where a post-processing filter (pdftopdf of [[:openprinting:cups-filters|cups-filters]]) does manipulations like N-up (N pages per sheet), scale page to fit sheet size, printing pages in reverse order, printing only even/odd, pages, selected pages, ... and the resulting PDF file is passed through further filters to turn it into a format which the printer understands. | For printing a job usually applications generate PDF files and send them to the printing system ([[http://www.cups.org/|CUPS]]), where a post-processing filter (pdftopdf of [[:openprinting:cups-filters|cups-filters]]) does manipulations like N-up (N pages per sheet), scale page to fit sheet size, printing pages in reverse order, printing only even/odd, pages, selected pages, ... and the resulting PDF file is passed through further filters to turn it into a format which the printer understands. | ||
+ | This works very well with PDF files especially generated for printing. Generally, PDF files can have so-called synamic content, content which can easily get exchanged after creating the PDF file. Here are especially to mention PDF files containing a form which the user can fill in, like tax forms, registration forms, ... The user sometimes is supposed to send back the form by e-mail, which is no problem, but sometimes he has to print it, sign it, and return it as paper. Especially if it gets sent to the printer from a file manager or from the command line the PDF file with the filled form gets sent to the printing system and if the pdftopdf filter tries to do manipulations on it, the form content gets lost in the printout. | ||
+ | To avoid this, the pdftopdf filter needs to recognize that the input has dynamic content and before doing any manipulations this content needs to get flattened, meaning that it needs to get turned into static content, which will be the task of the student taking this project. | ||
- | Mentors: Tobias Hoffmann (smilingthax at googlemail dot com), Jay Berkenbilt (ejb at ql dot org) TBD | + | pdftopdf uses the [[http://qpdf.sourceforge.net/|QPDF library]] to manipulate PDF files without rendering them. To keep it simple and to improve the capabilities of the QPDF library, the best solution would be to implement this as a new feature of the QPDF library (and make pdftopdf only calling the appropriate function(s)). |
+ | |||
+ | See also the following bug reports which lead to this project: [[https://bugs.launchpad.net/ubuntu/+source/qpdf/+bug/1564249|in Ubuntu]], [[https://bugs.linuxfoundation.org/show_bug.cgi?id=1315|in cups-filters]] | ||
+ | |||
+ | Mentors: Jay Berkenbilt (ejb at ql dot org), Tobias Hoffmann (smilingthax at googlemail dot com) | ||
Desired knowledge: C/C++ programming | Desired knowledge: C/C++ programming | ||
+ | |||
+ | Code License: MIT, Artistic 2.0 | ||
+ | |||
+ | =====Google Cloud Print: Desktop-integrated solution for registering local CUPS printers (1 student)===== | ||
+ | |||
+ | [[https://developers.google.com/cloud-print/docs/overview|Google Cloud Print]] is a service from Google which allows to print from anywhere with internet access to anywhere else with internet access, for example from a mobile phone to printer at home or in the office. | ||
+ | |||
+ | To do so, one needs a Google account and there one registers one's printers so that they can accept jobs sent into the print facility of this Google account. | ||
+ | |||
+ | On Linux there is already a way to share the local CUPS printers into Cloud Print: The Chrome/Chromium Browser. In its settings you can activate Google Cloud Print and the local queues get registered. The Browser even leaves a user daemon running when one closes it to continue keeping the printers available for Cloud Print. | ||
+ | |||
+ | The disadvantage of this is that the functionality is bound to a web browser, so it is awkward for people who use Firefox for example. | ||
+ | |||
+ | Do not suggest now to make the CUPS daemon (daemon which handles the print jobs) or cups-browsed (daemon which browses the network for printers and automatically creates local queues for them) registering the printers, as they are system-wide services and Google Cloud Print is based on the user's Google account, and so something which belongs to a single user. | ||
+ | |||
+ | What is needed is a user daemon which starts when logging in and stops when logging out, running with the rights of the user, connecting to the user's Google account registering the local CUPS printers the user is allowed to print on. It will need integration with the desktop for starting and stopping the daemon and for configuration in the desktop's settings utility. | ||
+ | |||
+ | Ideally it should work with the widespread Unity desktop but also GNOME support would be great. | ||
+ | |||
+ | [[https://developers.google.com/cloud-print/docs/devguide|Google documentation for printer registration]]. | ||
+ | |||
+ | Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Ubuntu/Unity/GNOME GUI developers TBD | ||
+ | |||
+ | Desired knowledge: C/C++ programming, GUI programming, GTK | ||
=====Improve the pdftopvp filter to not need copying Poppler source code or unstable APIs and/or make it Ghostscript/MuPDF-based (up to 3 students)===== | =====Improve the pdftopvp filter to not need copying Poppler source code or unstable APIs and/or make it Ghostscript/MuPDF-based (up to 3 students)===== |