Improvements in LibreOffice’s PowerPoint presentation support

LibreOffice’s native file format is OpenDocument, a fully open and standardised format that’s great for sharing documents and long-term data storage. Of course, LibreOffice does its best to open files made by other office software as well, even if they’re stored in pseudo-“standards” with cryptic and obfuscated contents. Compatibility with PowerPoint PPT(X) presentations is therefore a challenge, but developers are working hard on improvements…

A few months ago, we announced an initiative to improve the support of PPT and PPTX files in LibreOffice. Lots of great work happened since then and the results are collected below!

Everyone is invited to participate in the PowerPoint support initiative, either in development or testing. If you are interested in joining, please send an email to ilmari.lauhakangas@libreoffice.org.

Import/export

Stephan Bergmann (Red Hat):

Speed up loading a PPT file with equation objects


Noel Grandin (Collabora):

Speed up loading a PPT file with equation objects


Miklos Vajna (Collabora):

Add PPTX import/export for semi-transparent shape text

Transparent text before Miklos’s implementation
Transparent text before Miklos’s implementation
Transparent text after Miklos’s implementation
Transparent text after Miklos’s implementation

PPTX import: don’t set shape fill from the style in case the background fill is already set

Shape fill before Miklos’s fix
Shape fill before Miklos’s fix
Shape fill after Miklos’s fix
Shape fill after Miklos’s fix

PPTX import: fixed duplication of math objects

Math objects before Miklos’s fix
Math objects before Miklos’s fix
Math objects after Miklos’s fix
Math objects after Miklos’s fix

Tamás Zolnai (Collabora):

PPTX export: don’t change shape’s background transparency

Background transparency before Tamás’s fix
Background transparency before Tamás’s fix
Background transparency after Tamás’s fix
Background transparency after Tamás’s fix

PPTX export: don’t lose the gradient background fill of a slide

Gradient fill after Tamás’s fix
Gradient fill after Tamás’s fix

Xisco Faulí (TDF):

PPTX import: display shapes with washout mode

Shapes not displayed before Xisco’s fix
Shapes not displayed before Xisco’s fix
Shapes displayed after Xisco’s fix
Shapes displayed after Xisco’s fix

PPTX export: handle image colour/graphics modes correctly

Colour modes handled incorrectly before Xisco’s fix
Colour modes handled incorrectly before Xisco’s fix
Colour modes handled correctly after Xisco’s fix
Colour modes handled correctly after Xisco’s fix

PPTX import: don’t lose text highlighting in table cells

Text highlighting not displayed before Xisco’s fix
Text highlighting not displayed before Xisco’s fix
Text highlighting displayed after Xisco’s fix
Text highlighting displayed after Xisco’s fix

PPTX export: save text highlighting

No highlighting before Xisco’s fix
No highlighting before Xisco’s fix
Highlighting after Xisco’s fix
Highlighting after Xisco’s fix

PPTX import: respect no fill colour for text

Text visible before Xisco’s fix
Text visible before Xisco’s fix
Text invisible after Xisco’s fix
Text invisible after Xisco’s fix

Gülşah Köse (Collabora):

PPTX import: implement z-rotation of 3D text transformation

Text not rotated before Gülşah’s implementation
Text not rotated before Gülşah’s implementation
Text rotated after Gülşah’s implementation
Text rotated after Gülşah’s implementation

PPTX export: preserve textbox rotation attribute

Text goes bonkers before Gülşah’s fix
Text goes bonkers before Gülşah’s fix
Text stays put after Gülşah’s fix
Text stays put after Gülşah’s fix

Tamás Bunth (Collabora):

PPTX import: custom date as custom XTextField

Dates before Tamás’s fix
Dates before Tamás’s fix
Dates after Tamás’s fix
Dates after Tamás’s fix

Mark Hung (PPT/X team):

PPTX import/export: handle complex text properly

PPTX import: reset font settings, if necessary

Text before Mark’s fix
Text before Mark’s fix
Text after Mark’s fix
Text after Mark’s fix

Luke Deller (PPT/X team):

PPTX import: Fix IsTransparent() for unloaded graphics

Blue line not displayed before Luke’s fix
Blue line not displayed before Luke’s fix
Blue line displayed after Luke’s fix
Blue line displayed after Luke’s fix

Housekeeping

Julien Nabet:

Save/restore locking properly in ImplSdPPTImport::Import

sd: prefix members of SdrPowerPointImport

cppcheck: fix 2 funcArgOrderDifferent


Various

Mike Kaganski (Collabora):

PPTX export: disable undo during save

Thanks to everyone for their great work!

LibreOffice Macro Team: progress report

Macros help users to automate common tasks in LibreOffice, and in September, we announced a new team in our community to work on macro support.

So, what has happened in the meantime? This article is a collection of the work done by the LibreOffice Macro Team in the past few months, as well as any other macro-related things in the project. If you are interested in contributing to the macro team (development, testing or documentation), we’d love to hear from you – please send an email to ilmari.lauhakangas@libreoffice.org and we’ll get in touch.

Quality assurance work

Tomoyuki Kubota and Alain Romedenne reorganised the macro meta bug, creating several subcategories for macro issues and feature requests.

Wiki docs

Soon after the announcement of the macro team in early September, we were contacted by Nathan Ullberg, who promptly started contributing to the wiki documentation. Nathan is keeping notes on the progress of his work on his wiki user page. Alain is collaborating with Nathan on the wiki effort, which includes creating new articles with example macros, reviewing old ones and translating them from French to English.

Code contributions from macro team members

Tomoyuki Kubota:

Andreas Heinisch:

Alain Romedenne:

Code contributions from honorary associate members

Mike Kaganski (Collabora):

Stephan Bergmann (Red Hat):

Samuel Mehrbrodt (CIB):

Help content

Improved by Alain Romedenne:

Improved by Olivier Hallot (TDF):

Added by Olivier Hallot (TDF):

Finally, we have to highlight Alain’s presentation from the LibreOffice Conference 2019: Scripting LibreOffice Python macros, aka “Macros Well Kept Secrets”:

Please confirm that you want to play a YouTube video. By accepting, you will be accessing content from YouTube, a service provided by an external third party.

YouTube privacy policy

If you accept this notice, your choice will be saved and the page will refresh.

Big thanks to everyone for their contributions and special thanks to Alain for coordinating things and being a tireless macro educator! As mentioned, everyone is welcome to join our efforts to improve macro support in LibreOffice – you don’t need to be a developer. Help us with documentation, bug reports and more – and gain valuable experience on the way!

LibreOffice and Google Summer of Code 2019: The results

This year, LibreOffice was once again a mentoring organization in the Google Summer of Code (GSoC) a global programme focused on bringing more student developers into free and open source software development. We ran six projects – and all were finished successfully. Both students and mentors enjoyed the time, and here we present some of the achievements, which should make their way into LibreOffice 6.4 in early February!

Generating QR Codes in LibreOffice – by Shubham Goyal

The ability to print and display hyperlinks as quick response (QR) codes has been requested for many years (bug 62168), and eventually Shubham Goyal implemented this feature. You can insert a QR code at the current cursor position or the table cell per Insert > Object > QR Code… or edit the inserted object with the context menu. Learn more in the final report.

NotebookBar improvements – by Sumit Chauhan

LibreOffice introduced the optional NotebookBar user interface in version 6.2. Now, thanks to Sumit, users can customise the NotebookBar by changing the visibility of buttons, as shown here:

Please confirm that you want to play a YouTube video. By accepting, you will be accessing content from YouTube, a service provided by an external third party.

YouTube privacy policy

If you accept this notice, your choice will be saved and the page will refresh.

Users will be able to access this dialog from the menu: Tools > Customize, then go to the NotebookBar tab. Sumit explains some of the technical work behind this on his blog.

Another project Sumit worked on is extension support, which allows users to add extensions in the NotebookBar. There is an extension tab in all the NotebookBar interfaces where the added extension will be available (technical details here).

LibreOffice for Android (Online) – by Kaishu Sahu

In the last few years, LibreOffice for Android was lagging behind development of LibreOffice Online, because all the new features had to be re-implemented in Java. This year, a new approach to the LibreOffice Android app took place, reusing the Online work directly in the app. Kaishu Sahu’s code was important part of this effort – he has implemented features like inserting images, slideshows, save as, printing, sharing a document, dimming when inactive, and more.

Implement Chart Styles – by Gagandeep Singh

Previously, all chart formatting was directly applied. Chart styles allow users to quickly apply the same formatting presets to different charts and therefore make it easier to change them.

Wrapping up

Many thanks to all students who spent their summer time improving LibreOffice. You are awesome! And special thanks also to the mentors who always put some much love and energy into these tasks. That‘s what makes LibreOffice rock.

Now we are looking forward to next year’s GsoC. If you are interested, why not prepare early? Learn more at out wiki page where some ideas are listed.

LibreOffice and macOS Catalina

Apple has released macOS 10.15 Catalina on October 7, 2019. Mac apps, installer packages and kernel extensions that are signed with a Developer ID must be notarized by Apple to run on macOS Catalina. Although we have duly followed the instructions, when users launch LibreOffice 6.3.x – which has been notarized by Apple – the system shows the following scary message: LibreOffice.app cannot be opened because the developer cannot be verified, and provides only two options: Move to Bin (delete) and Cancel (revert the operation, i.e. do not run LibreOffice). Of course, this represents a problem for all Mac users who rely on LibreOffice for their office documents after they have upgraded to macOS Catalina.

To solve the issue and bypass the block, the user has to right-click with the mouse (or press Control on the keyboard while clicking with the mouse) on the LibreOffice icon and select Open. The system will show a less scary message: macOS cannot verify the developer of LibreOffice.app. Are you sure you want to open it?, and will eventually provide the Open option to launch LibreOffice.

There is also another solution, which does not bypass Gatekeeper forcing macOS Catalina to open LibreOffice as the solution just described (which is perfectly safe, in any case).

When the first scary message is on screen, the user has to click first on Cancel to close the window and then on the Apple menu to open the System Preferences window. Here the user has to open Security & Privacy and click on the Open Anyway button on the right side of the message LibreOffice.app was blocked from use because it is not from an identified developer to launch LibreOffice. Both solutions authorize LibreOffice to run without further authorizations. Of course, we will try to sort out the issue with Apple, in order to avoid similar issues in the future with macOS Catalina.

IMPORTANT NOTE: Screenshots have been grabbed while installing LibreOfficeDev.app (LibreOffice 6.4 Alpha) instead of LibreOffice.app, but do reproduce the same windows.

To complete the article, four screenshots of LibreOffice Writer, LibreOffice Calc, LibreOffice Impress and LibreOffice Draw (version 6.3.3.1) running on macOS Catalina.

Updates from the Document Liberation Project

We mostly focus on LibreOffice on this blog, but The Document Foundation also oversees the Document Liberation Project (DLP), which develops software libraries to import and export many different file formats. If you have some old documents or spreadsheets from legacy office software, for instance, the DLP can help you to access that data – giving control back to you.

Many well-known free and open source programs use DLP libraries, such as Inkscape, Scribus, Calligra and of course LibreOffice. A few days ago, there were some DLP updates, so here’s a quick summary:

libvisio 0.1.7

libvisio is a library that helps software to import documents from the Microsoft Visio diagramming and vector graphics application. It turns this:

Into this:

In libvisio 0.1.7, various conversion fixes were made, and a few memory leaks were plugged thanks to OSS-Fuzz. Check out the full release notes here.

libabw 0.1.3

Meanwhile, libabw was also updated. This is a library to import documents from AbiWord, a free software word processing tool. In libabw 0.1.3, a memory access error was fixed thanks to OSS-Fuzz, while expanding entities by the XML parser were disabled as well as a preventative measure.

Learn more and get involved!

The Document Liberation community is always looking for help: if you have old documents or files in legacy formats that you can’t open (or which don’t look right when opened in free software tools), let the project know! You can help the community to better understand file formats by submitting examples, and test new releases.

To learn more about DLP, check out this short video:

Please confirm that you want to play a YouTube video. By accepting, you will be accessing content from YouTube, a service provided by an external third party.

YouTube privacy policy

If you accept this notice, your choice will be saved and the page will refresh.

Annual Report 2018: LibreOffice development

In 2018, 17,473 commits were made to the LibreOffice source code, from 223 authors. Here’s an overview of what they worked on…

Behind the scenes of LibreOffice 6.2

Throughout the second half of 2018, the developer community worked on a new major release: LibreOffice 6.2. Details about the end-user-facing new features are provided on this page, and in the following video – so in the rest of this blog post, we’ll focus on developer-related changes.

Please confirm that you want to play a YouTube video. By accepting, you will be accessing content from YouTube, a service provided by an external third party.

YouTube privacy policy

If you accept this notice, your choice will be saved and the page will refresh.

So, let’s get technical!

In terms of system requirements, the macOS minimum version was bumped up to 10.9 (and will be 10.10 in LibreOffice 6.3). Similarly, binary Linux x86 (32-bit) releases from The Document Foundation were deprecated, so there will be no Linux x86 builds produced by TDF after LibreOffice 6.2. However, this does not mean that Linux x86 compatibility will be removed; Linux distributions can still opt to build 32-bit binaries. See here for more details.

On the user interface front, there were other changes. Two new VCL plugins (qt5 and kde5) were implemented (with the KDE5 plugin extending the Qt5 one), to provide integration with KDE Plasma 5 and other Qt5-based desktop environments. These were mainly implemented by Katarína Behrens (CIB) and Jan-Marek Glogowski (City of Munich).

If the kde5 and the gtk3_kde5 plugins are installed, the desktop detection will now prefer the kde5 one. The qt5 plugin must be explicitly selected via SAL_USE_VCLPLUGIN=qt5, as it’s never selected automatically.

Native copy and paste of spreadsheet data in Writer tables was implemented by László Németh (NISZ): previously, you could paste a copied table as image, object, plain text, and as RTF; the latter resulting in a new table in Writer. In LibreOffice 6.2 you can paste directly in an existing table.

Data Validation now supports custom formulas thanks to Marco Cecchetti (Collabora), while Edit > Track Changes > Show no longer severely impacts performance in documents with many tracked changes. The document view is now capable of hiding the tracked changes, so they do not have to be rearranged in the document model to be hidden – implemented by Michael Stahl (CIB).

LibreLogo, the programming interface for graphic design and education got unit testing, IDE and compiler fixes and improvements (László Németh – FSF.hu Foundation). Meanwhile, work continued on the native GTK3 UI, as demonstrated by Caolan McNamara (Red Hat) at FOSDEM 2018:

Please confirm that you want to play a YouTube video. By accepting, you will be accessing content from YouTube, a service provided by an external third party.

YouTube privacy policy

If you accept this notice, your choice will be saved and the page will refresh.

Google Summer of Code

The Google Summer of Code (GSoC) takes place every year, and provides university students with funding to work on free and open source software. For 2018, seven LibreOffice developers were accepted into GSoC, and they worked on various features and updates. These improvements were presented in a session at the LibreOffice Conference in Tirana, Albania.

Daniel Silva showed his work on the revamped print dialog, which reorganised options into two tabs, to make them easier to find: a General tab, covering all components of the suite, and then a separate tab for component-specific features (ie those found in Writer, Calc, Impress and so forth). Altogether, this makes it easier for end users to find the options they need, without having to look through many different tabs.

Meanwhile, Mert Tümer worked on the LibreOffice Android Viewer as part of GSoC: he produced 23 patches, made up of nine new features and 14 bug fixes. Some of the new features include Export to PDF, printing, customising worksheets, and better language support.

Saurav Chirania implemented a logger for user interface testing, which logs interactions and stores them in a file, while Vikas Mahato worked on features for importing data from external sources, along with transformations for the data (38 types of transformation were implemented). Finally, Hrishabh Rajput worked on updating listbox widgets to separate read values from input values, Kshitij Pathania added some improvements to the Notebookbar, and Shobhan Mandal focused on adding support for Python in the LOEclipse plugin.

A big thanks to everyone who contributed code last year! Why not join them?

You don’t need to be the world’s best C++ wizard to get involved – just some C++ knowledge and willingness to explore the codebase is great!

We have Easy Hacks to get your started, so check out this page for inspiration. Cheers!