This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
gsoc:google-summer-code-2024-openprinting-projects [2024/01/19 03:19] till [Replace QPDF by PDFio as PDF manipulation library in libcupsfilters (cfFilterPDFToPDF() filter function and others)] |
gsoc:google-summer-code-2024-openprinting-projects [2024/01/20 22:12] till |
||
---|---|---|---|
Line 117: | Line 117: | ||
* [[https://github.com/OpenPrinting/ghostscript-printer-app/|Ghostscript Printer Application]] - Printer Application for printers using Ghostscript (and many other) drivers ([[https://snapcraft.io/ghostscript-printer-app|in the Snap Store]]) | * [[https://github.com/OpenPrinting/ghostscript-printer-app/|Ghostscript Printer Application]] - Printer Application for printers using Ghostscript (and many other) drivers ([[https://snapcraft.io/ghostscript-printer-app|in the Snap Store]]) | ||
* [[https://github.com/OpenPrinting/hplip-printer-app/|HPLIP Printer Application]] - Printer Application for most HP Printers ([[https://snapcraft.io/hplip-printer-app|in the Snap Store]]) | * [[https://github.com/OpenPrinting/hplip-printer-app/|HPLIP Printer Application]] - Printer Application for most HP Printers ([[https://snapcraft.io/hplip-printer-app|in the Snap Store]]) | ||
- | * [[https://github.com/OpenPrinting/gutenprint-printer-app/|Gutenprint Printer Application]] - Printer Application for hig-quality printing on Epson, Canon, and other inkjets and on many dye-sublimation printers ([[https://snapcraft.io/gutenprint-printer-app|in the Snap Store]]) | + | * [[https://github.com/OpenPrinting/gutenprint-printer-app/|Gutenprint Printer Application]] - Printer Application for high-quality printing on Epson, Canon, and other inkjets and on many dye-sublimation printers ([[https://snapcraft.io/gutenprint-printer-app|in the Snap Store]]) |
* [[https://github.com/michaelrsweet/lprint/|LPrint]] - Printer Application for label printers ([[https://snapcraft.io/lprint|in the Snap Store]]) | * [[https://github.com/michaelrsweet/lprint/|LPrint]] - Printer Application for label printers ([[https://snapcraft.io/lprint|in the Snap Store]]) | ||
* [[https://github.com/alexpevzner/sane-airscan/|sane-airscan]] - The "airscan" SANE backend, supports driverless eSCL and WSD scanning, IPP Scan support is planned | * [[https://github.com/alexpevzner/sane-airscan/|sane-airscan]] - The "airscan" SANE backend, supports driverless eSCL and WSD scanning, IPP Scan support is planned | ||
Line 133: | Line 133: | ||
=====Desktop integration: CPDB support for the print dialogs of Mozilla (Thunderbird/Firefox) and LibreOffice===== | =====Desktop integration: CPDB support for the print dialogs of Mozilla (Thunderbird/Firefox) and LibreOffice===== | ||
+ | |||
+ | 1-2 contributors full-size (350 hours). | ||
+ | |||
+ | Most print jobs are sent via the print dialog of a desktop application, like evince, Chrome, LibreOffice, DarkTable, … Print dialogs are usually, like “Open …” or “Save as …” dialogs, provided by the GUI toolkits, in most cases GTK or Qt, sometimes applications come also with their own creations, like LibreOffice or Firefox. | ||
+ | |||
+ | Problem here is usually not the design of the dialog itself, most are actually easy to use, but the way how they connect to CUPS (and also to other print technologies) and how well this connection code is maintained and kept up-to-date. | ||
+ | |||
+ | GUI toolkit projects are large projects, often with long release cycles and all with a certain inertia, and there are things which many people are eager to work on, and others, like print dialogs, which have to be there but no one is really motivated to push their development forward and do the needed maintenance work. | ||
+ | |||
+ | An important part of the maintenance of a GUI toolkit is that it interfaces well and correctly with the underlying operating system, graphics, sound, storage, …, and printing! The OS is under continuous development, things are changing all the time, components get replaced by others, printing is CUPS for 23 years, but within CUPS we have also changes, and they need to be taken care of in the print dialogs. | ||
+ | |||
+ | Several years back, CUPS started to create temporary queues for driverless IPP network printers (or remote CUPS printers, which are emulations of IPP printers), which are only physically available when they are accessed (capabilities are polled or job printed). Print dialogs used an old API which did not support this, the temporary queues did not appear in the dialog, a helper daemon, cups-browsed had to convert the temporary queues into physical queues as a workaround. The correct solution had been to change the print dialogs to a newer CUPS API which supports these queues, but no one at the GUI toolkit projects has felt responsible and taken the time for this update for many years. Only recently this got fixed. | ||
+ | |||
+ | This made me introducing the Common Print Dialog Backends (CPDB) back in 2017, a de-coupling of the print technology (CUPS, print-to-file, that time also Google Cloud Print) from the GUI. The GUI projects have to adopt the CPDB support only once and then OpenPrinting (or any upcoming cloud printing projects) takes care of the CPDB backend for the print technologies to be up-to-date with any changes. This way print technology projects can react quickly and are not dependent any more on the GUI toolkit’s inertia. | ||
+ | |||
+ | The print dialogs of the major GUI toolkits, GTK, Qt, got CPDB support added in GSoC 2022, but several applications come with their own creation of a print dialog. AFAIK these are Firefox/Thunderbird (Mozilla), Chromium/Chrome (Google), and LibreOffice. Also these dialogs need to get CPDB support to make CPDB universal. | ||
+ | |||
+ | Then we are especially prepared for the switch to CUPS 3.x which does not support PPD files any more, as the CUPS backend of CPDB is already using only CUPS APIs not handling PPD files. And we are also prepared for IPP infrastructure/cloud printing for which we also want to create a CPDB backend (see below). | ||
+ | |||
+ | The contributor's task is to get CPDB into the print dialogs upstream, the UI of them does not need to be changed. Dialogs to be treated are Mozilla for Firefox and Thunderbird, and also LibreOffice, and any other application-specific dialog if we have missed it by now. For LibreOffice there was already worked on CPDB support back in 2017, but in the meantime things have changed and the dialog needs to get updated, especially for the new features of CPDB 2.x (human-readable strings/translations, option groups, ...). | ||
+ | |||
+ | For the CPDB integration we do not need UI design work. | ||
+ | |||
+ | Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Gaurav Guleria (gaurav dot gen3 at gmail dot com), Firefox/Thunderbird/Mozilla developers, LibreOffice developers, TBD | ||
+ | |||
+ | Desired knowledge: %%C/C++%%, GTK or Qt, DNS-SD/Avahi, CUPS/IPP | ||
+ | |||
+ | Code License: MIT, GPL-2+ and LGPL-2+ | ||
=====Desktop Integration: Update system-config-printer for the New Architecture of printing===== | =====Desktop Integration: Update system-config-printer for the New Architecture of printing===== | ||
Line 140: | Line 168: | ||
=====Replace QPDF by PDFio as PDF manipulation library in libcupsfilters (cfFilterPDFToPDF() filter function and others)===== | =====Replace QPDF by PDFio as PDF manipulation library in libcupsfilters (cfFilterPDFToPDF() filter function and others)===== | ||
- | Like CUPS, libcupsfilters is principally written in regular C and not in C++. We want to avoid C++ as it has often problems with binary compatibility and the mechanism with which the Debian/Ubuntu build services auto-detect dependencies between Debian packages, get very awkward with C++. | + | 1 contributor full-size (350 hours). |
- | But libcupsfilters still depends on one library which is written in C++, QPDF, a library for manipulating PDF files: Scaling up and down, moving around on the page, rotating, combining several source pages on one destination page, turning filled PDF forms into straight PDF, ... QPDF is used by the filter functions cfFilterPDFToPDF(), cfFilterBannerToPDF(), cfFilterGSToRaster(), and cfFilterRasterToPDF(). | + | Like [[https://openprinting.github.io/cups/|CUPS]], [[https://github.com/OpenPrinting/libcupsfilters|libcupsfilters]] is principally written in regular C and not in %%C++%%. We want to avoid %%C++%% as it has often problems with binary compatibility and the mechanism with which the Debian/Ubuntu build services auto-detect dependencies between Debian packages get very awkward with %%C++%%. |
+ | But libcupsfilters still depends on one library which is written in %%C++%%, [[https://github.com/qpdf/qpdf/|QPDF]], a library for manipulating PDF files: Scaling up and down, moving around on the page, rotating, combining several source pages on one destination page, turning filled PDF forms into straight PDF, ... QPDF is used by the filter functions cfFilterPDFToPDF(), cfFilterBannerToPDF(), cfFilterGSToRaster(), and cfFilterRasterToPDF(). | ||
+ | Michael Sweet, author of CUPS, has some years ago started the [[https://www.msweet.org/pdfio/|PDFio]] project. This is a PDF handling and manipulation library, as QPDF is, but it is fully written in standard, regular C, not in %%C++%%. | ||
+ | Therefore we want to replace the use of QPDF by PDFio and this is what this GSoC project is about. | ||
+ | But for such a switchover we must take into account that QPDF is a complex and sophisticated project with a lot of features (it got even new features by two GSoC projects of OpenPrinting) while PDFio is a young project run as one of the many small projects by Michael Sweet and we must be very careful to see whether it does not miss any important feature. Especially we must look after correct printing of filled-in PDF forms and PDF annotations. | ||
+ | So part of the project will be investigation of suitability and perhaps also work with Mike to get needed features added. And after the switchover thorough testing is needed to avoid any regressions after this impactful change. | ||
+ | Mentors: Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Michael Sweet, author of CUPS and PAPPL (msweet at msweet dot org), Ira McDonald (blueroofmusic at gmail dot com), TBD | ||
- | The PDFio project is about completely eliminating the need of QPDF, whch isa PDF manipulation library written in C++ from libcupsfilters by replacing it with PDFio, a PDF manipulation library written completely in regular C. This makes libcupsfilters being completely in regular C and not using any C++ any more. C++ has often problems with binary compatibility and the mechanism with which the Debian/Ubuntu build services auto-detect dependencies between Debian packages, get very awkward with C++. | + | Desired knowledge: %%C/C++%%, CUPS |
+ | |||
+ | Code License: Apache 2.0 | ||
- | But for such a switchover we must take into account that QPDF is a complex and sophisticated project with a lot of features (it got even new features by two GSoC projects of OpenPrinting) while PDFio is a young project run as one of the many small projects by Michael Sweet and we must be very careful to see whether it does not miss any important feature. Especially we must look after correct printing of filled-in PDF forms and PDF annotations. | ||
- | So part of the project will be investigation of suitability and perhaps also work with Mike to get needed features added. | ||
=====CPDB backend for IPP infrastructure/cloud printers===== | =====CPDB backend for IPP infrastructure/cloud printers===== | ||