The Document Foundation Planet


May 25, 2018

Official TDF Blog

Video: How many file and document formats can LibreOffice open?

LibreOffice is a truly universal office suite – it’s available in over 100 languages, across many operating systems, and it opens a huge range of document formats. But just how many? Check out the short video we made…

by Mike Saunders at May 25, 2018 01:17 PM

Mike Kaganski

Auto-hiding empty mail merge fields

Managing empty fields: the status quo

When doing mail merge, it’s often (even usually) desirable that if a database field is empty for a recipient, then the corresponding line be hidden in the generated document. LibreOffice has always allowed doing this using special Hidden paragraph fields – which is very flexible, though not too user-friendly, because of its complexity in creation and support. E.g., one needs to remember to move the field along with the database field when one edits the document; or change the field’s conditions when renaming database fields or combining fields in a single paragraph.

There are situations when using Hidden paragraph fields is even impossible. Since the condition in the said field depends on a registered database name, it cannot be used when there’s no registered database (which happens when one wants to connect to data sources dynamically, when one is actually performing the merge).

Meet the convenience

Today we have released the new Collabora Office 5.3-49, which includes the improvement that we at Collabora Productivity have implemented: now database fields also hide paragraphs themselves when the field value is empty: now there’s no need to use separate fields for that. This allows for easier creation and management of the auto-hiding empty database values.


With the change, we are also more interoperable with other office suites that behave that way, including Microsoft Office.

This feature is controlled by a new compatibility option, which is enabled by default in all new documents. If one wants to return to old behaviour, however, one can easily do that using Writer’s compatibility options.


As usual, the improvement is also available in the next major release of LibreOffice, which is to be released in August.

by mikekaganski at May 25, 2018 12:49 PM

Even easier configuration of AD integration for LibreOffice

What we had achieved previously

After we at Collabora Productivity had improved existing LDAP configuration backend to be relatively easily configurable for Windows clients in ActiveDirectory-based domain environment, we started to prepare a further improvement in this area, which purpose was to overcome the problems of LDAP-based backend. The said problems are caused by the fact that LDAP backend needs to have proper credentials for server connection explicitly configured, which leads to requirement to have a dedicated restricted service account which would have a fake password (which would be written in clear text on each configured workstation), and which only purpose is connecting to LDAP server and retrieving user information. The said approach hardly fits into Active Directory’s concept with single sign-on (SSO) in its heart. Of course, the preferable solution would be to have a configuration backend that could get user data from AD using current user’s credentials, without the need to have a service account for that.

Collabora makes the next step

In the past weeks, we have merged a brand new backend plugin (WinUserInfoBe), which uses the improvements in core made when working on LDAP backend, and which implements the said concept. It is, naturally, even easier to configure than LDAP backend (the only thing required is to set a user data field to be taken using the said plugin); neither server connection configuration, nor further LO data field to LDAP object property mapping is needed. And of course, we have made the necessary changes to our ADMX template to make this configurable using convenient GPO editor interface.

Upgrade and benefit

This change is immediately available in the released Collabora Office 5.3-49 for our customers – why not upgrade now and have a play? – and it will also be in the next major release of LibreOffice 6.1 due to be released in August 2018.

by mikekaganski at May 25, 2018 07:38 AM

May 24, 2018

Official TDF Blog

Final week of the Month of LibreOffice, May 2018

At the start of this month, we kicked off a new Month of LibreOffice, celebrating contributions all across the project! So how many stickers have been won so far? Well…

To see if your name (or username) is on the list, click the number above. If you’re not there, there’s still time to get involved! There are many ways you can help the LibreOffice project and claim a sticker:

  • Help to confirm bugs: go to our Bugzilla page and look for new bugs. If you can recreate one, add a comment like “CONFIRMED on Windows 10 and LibreOffice 5.4.6”. (Make sure you’re using the latest version of LibreOffice.)
  • Contribute code: The codebase is big, but there are lots of places to get involved with small jobs. See our Developers page on the website and this page on the wiki to get started. Once you’ve submitted a patch, if it gets merged we’ll send you a sticker!
  • Translate the interface: LibreOffice is available in a wide range of languages, but its interface translations need to be kept up-to-date. Or maybe you want to translate the suite to a whole new language? Get involved here.
  • Write documentation: Another way to earn a badge is to help the LibreOffice documentation team. Whether you want to update the online help or add chapters to the handbooks, here’s where to start.
  • Answer questions from users: Over on Ask LibreOffice there are many users looking for help with the suite. We’re keeping an eye on that site so if you give someone useful advice, you can claim a shiny sticker.
  • Spread the word: Tell everyone about LibreOffice on Twitter! Just say why you love it or what you’re using it for, add the #libreoffice hashtag, and at the end of the month you can claim a sticker. (We have a maximum of 100 stickers for this category, in case the whole internet starts tweeting!)

So don’t miss out! There’s one week to go – help other users, update our documentation, translate the software and help to make LibreOffice better for millions of users around the world!

by Mike Saunders at May 24, 2018 08:20 AM

Saurav Chirania

GSoC 18 work report - 23rd May

The coding period of GSoC started 10 days ago. I'm working with LibreOffice's UI logger. The aim of first two weeks is to support logging for UNO commands, dialogs, radiobuttons, checkboxes, and buttons.
To get a summary of what has been done so far, let's perform a couple of steps and look at the generated log file.

1) Click on "Writer Document" button
2) Go to Format -> Character to open the Character Properties Dialog.
3) Check the radiobutton 90 degrees and check the checkbox "Fit to line".
4) Click ok
5) Type "hi" in the main wrier_edit window


The generated log file contains the following -
  1. ButtonUIObject Action:CLICK Id:writer_all Parent:
  2. CommandSent
  3. ModalDialogExecuted Id:CharacterPropertiesDialog
  4. RadioButtonUIObject Action:CLICK Id:90deg Parent:CharacterPropertiesDialog
  5. Action on element: 90deg with action : CLICK
  6. CheckBoxUIObject Action:CLICK Id:fittoline Parent:CharacterPropertiesDialog
  7. Action on element: fittoline with action : CLICK
  8. ButtonUIObject Action:CLICK Id:ok Parent:CharacterPropertiesDialog
  9. DialogClosed
  10. SwEditWinUIObject Action:TYPE Id:writer_edit Parent:UNKNOWN {"TEXT": "h"}
  11. SwEditWinUIObject Action:TYPE Id:writer_edit Parent:UNKNOWN {"TEXT": "i"}

As evident, the log file logs about-
1) Opening and closing of dialogs
2) UNO commands
3) Radiobuttion, checkbox and button click
4) Keys pressed

I'm stuck with printing the top parent of a generic UI element (so that the Parent:UNKOWN in the log file in lines 10 and 11 start giving some useful information)

The code of my work can be found here:

Suggestions for what I have done so far, or what I should be working on next are welcome!

by Saurav ( at May 24, 2018 05:28 AM

May 22, 2018

Andreas Kainz

Breeze icon theme

The breeze icon theme was my first task for LibreOffice back in 2014. 4 Months later I proudly present the new LO Breeze icon set with more than 2.500 icons for LibreOffice.


Breeze get the default icon theme for the KDE desktop with LibreOffice 5.0. Ubuntu switch to breeze cause they stop the development of there own icon theme and prefer breeze. As LibreOffice Online was announced 2016 they ship breeze cause it was the only icon theme with full svg support. And Breeze was also the default on OSX cause sifr lack of icons.

With breeze big success story started. If you’d like to be part of the story become a Patreondownloads_wordmark_white_on_coral2x.jpg

You can read the full story on the following blog posts:

by kdeonlinux at May 22, 2018 10:22 PM

Michael Meeks

2018-05-22 Tuesday.

  • Mail chew, code reading, mgmt call, built ESC stats. Visited West Suffolk Urology for some fun camera action. Home. Call with Jona & Eloy.
  • Tried to mend Galaxy S4 burning up its motherboard on start - some internal short in a chip ? froze the electronics and manage to get it to an unlock-screen before thermal cut-out. Downer - even cooks itself in the recovery screen; hard to debug.
  • Pleased to get OpenShot working nicely - despite my generic horrors at AppImages: no security/signing and encouraging people to download & execute random stuff (cf. horrors of Windows virii) - it worked well.

May 22, 2018 09:00 PM

Official TDF Blog

Coming up on May 28: Bug Hunting Session for LibreOffice 6.1 Beta 1

LibreOffice 6.1 is being developed by our worldwide community, and is due to be released in early August – see the release notes describing the new features here. You can help us to test it, and make it super reliable!

After the first Bug Hunting Session for LibreOffice 6.1, which was held on April 27th 2018, we’re glad to announce the Second Bug Hunting Session on May 28th – this time being held on a Monday.

In order to find, report and triage bugs, the tests during the Second Bug Hunting Session will be performed on the first Beta version of LibreOffice 6.1, which will be available on the pre-releases server on the day of the event. Builds will be available for Linux (DEB and RPM), macOS and Windows, and can be run in parallel with the production version – so you can test without affecting your existing stable installation.

Mentors will be available on May 28th 2018, from 8AM UTC to 8PM UTC for questions or help in the IRC channel: #libreoffice-qa (connect via webchat) and its Telegram bridge. Of course, hunting bugs will be possible also on other days, as the builds of this particular Beta release (LibreOffice 6.1.0 Beta1) will be available until the beginning of July.

During the day there will be two dedicated sessions focus on two of the tenders implemented in LibreOffice 6.1: The first to test the improvements on the image handling between 10AM UTC and 12AM UTC, and the second to test the HSQLDB import filter for firebird between 14PM UTC and 16PM UTC.

What happened during the first Bug Hunting Session ?

Since LibreOffice 6.1 Alpha 1 was released on week 17 of 2018, 91 bugs have been reported against Alpha 1 by more than 30 people, of which 26 have been already closed.

In total, 8 of these bugs have been categorized as critical, and 4 already fixed by the development team.

Base and Writer are the components with more reports, both having 18 each.

Many thanks to the top 5 reporters: Drew Jensen, Emil Tanev, Xisco Faulí, Telesto and Pander.

So join us on Monday, and we look forward to – and appreciate – your help!

by Mike Saunders at May 22, 2018 12:47 PM

May 21, 2018

Michael Meeks

2018-05-21 Monday.

  • Mail chew; attemped again to use the ICO's failing web registration process. Calc code & patch review. Status report.
  • Code reading with Marco on a calc validation feature. Prodded at parallel XML parsing fun.

May 21, 2018 09:00 PM

Andreas Kainz

LibreOffice 6.1 fits Windows 10

LibreOffice is an office suite for ALL operating systems. With the Breeze icons for LibreOffice 5.0 it is integrated into the Plasma desktop. With LibreOffice 6.0 it get Elementary support, so one of the last platform where LibreOffice didn’t follow the OS brand is Windows.

With the coming LibreOffice 6.1 release LibreOffice will fit Windows (10) perfectly with the new Colibre icon theme.


Initial charliecnr work on a Office 2013 clone, but as this theme has some licence issues, I start the complete new icon theme Colibre. Colibre follow the icon design guidelines from Microsoft, which mean Colibre will use the same color scheme than MS Office. The typologie of the icons follow Breeze and Elementary.

So with LibreOffice 6.1 Windows get the first Office Suite that fits perfect the operation system style.

Download LibreOffice 6.1

If you like my work, become a Patreondownloads_wordmark_white_on_coral2x.jpg

CoLibre 10.png

by kdeonlinux at May 21, 2018 04:52 PM

Official TDF Blog

Guide Revision Sprint Week

We are announcing a Revision Sprint Week, starting Monday May 21st and ending on Sunday May 27th to review the contents of all chapters of the Getting Started Guide 6.0.

The task consist of downloading a chapter and review it. Then send it back to documentation at libreoffice dot org when revision is finished.

Volunteers are invited to visit our Wiki page and have a deep reading on the contents.


Please use our communication channels described there to access us for interaction.

Happy Revision Sprint Week!

by Olivier Hallot at May 21, 2018 03:45 PM

May 20, 2018

Michael Meeks

2018-05-20 Sunday.

  • Played at Church; Cornerstone project meeting afterwards - focused on making our Victorian flint church more open & inviting; interesting. Back for a roast lunch, badmington & volley-ball in the garden - out for a walk with J. and H. Read the Economist.
  • Started to watch Startup; sickened by the increasingly explicit and gratuitous hyper-sexualization / pornography; needs an '(21+)' rating or something, quit part way through episode 1; shame. Why do they do that ?

May 20, 2018 09:00 PM

Muhammet Kara

Added Gear Menu to the LibreOffice Customize Dialog

LibreOffice’s recently revamped Customize dialog was missing some features which allow carrying out certain operations on the toolbars and the menus. With recent patch series I have submitted, the first three tabs are mostly feature complete.

It is now even easier to customize toolbars and top level menus according to your taste, thanks to the newly added gear button/menu of the Customize dialog (Tools â–¸ Customize…).

With the new gear menu on the Toolbar and the Menu tabs, you can now:

  • rename the custom toolbars and menus, and the standard sub-menus,
  • move and rearrange the top-level menus,
  • see the current display style of toolbars, and change it with a single click.

The plus and minus buttons, which allow you to add or remove top-level menus and toolbars, are also coming as options of the new menu, reducing the clutter on the UI.

Gear menu in the Menus tab Gear menu in the Menus tab

Gear menu in the Toolbars tab Gear menu in the Toolbars tab

Links for more info:

These changes/improvements will reach the end users with LibreOffice 6.1.

by Muhammet Kara ( at May 20, 2018 12:00 AM

May 19, 2018

Michael Meeks

2018-05-19 Saturday.

  • Up earlyish, off to Cambridge, train to London. Enjoyed the British Museum with the babes, Pizza Express with R&A for lunch - on to see a Les Miserables matine - an excellent performance.
  • Train home; Astronomy GSCE practice with H. took her to Tashie's - back, put babes to bed, hacked on unit tests finally defeating them; bed late.

May 19, 2018 09:00 PM

May 18, 2018

Michael Meeks

2018-05-18 Friday.

  • Out for a run with J. Partner call. Sync with Miklos, finally some hacking & debugging of odd online unit test failures - interesting. Watched SHIELD in the evening with the babes.

May 18, 2018 09:00 PM

Official TDF Blog

How donations helped us to improve LibreOffice in 2017

Donations to The Document Foundation help us to grow our community, maintain our infrastructure, and continue to improve LibreOffice. Here’s a graphic showing some things that donations enabled us to do in 2017…

by Mike Saunders at May 18, 2018 11:43 AM

May 13, 2018

Andreas Mantke

First Steps With The LMS Ilias

I researched a bit about Learn Managment Systems (LMS) and came across a system named Ilias. This LMS is used by some institutions, e.g. the Fachhochule fĂźr Verwaltung Nordrhein-Westfalen (a university of applied science in North Rhine Westfalia). I currently got an user account at their LMS and could do some work in a user space. The LMS and their instance seemed to have a lot of features. The development of the Ilias LMS seemed to be very active. They publish regularly minor releases.

But I was also curious about the admin site of the Ilias LMS and thus I took the time to install an instance on my notebook. I used the current version 5.3.5 and copied all files to a webcontent directory of the Apache webserver. Once I pointed my browser to that directory I got a webpage with the check of the installation requirements. I installed the missing ones and set the necessary permissions. Then I followed the next steps of the Ilias installation. I got an issue with the database installation, because the setting for ‚max_allowed_packet‘ didn’t suit the needs of Ilias. I fixed that on the command line of  MariaDB. I logged into MariaDB with admin rights and typed on the command line: ‚SET Global max_allowed_packet = [new value];‘. Then everything went fine and the database was created and populated.

Once I finished the further steps of the installation, I got an adminstrator account. I could log into this account with the standard password and replace this with my own one. I created a new user and configured its settings, e.g. the language setting. I took a short look at the available tools of the LMS, especially those for the learn managment. Ilias came with an impressive set of such tools by default. I’ll examine this tools and will look for additional plugins next time.

by Andreas Mantke at May 13, 2018 08:53 PM

Switched A New WordPress Site Live

I worked with a small team on a WordPress website project for some month. We finished the site during the last weeks and decided to replace the old website with this new WordPress site today. Because the new website lives in a subdirectory of the webspace I had to make some edits inside the WordPress admin backend (e.g. changing some general URLs) and fix some hard coded links. This took some effort but in the end I managed to get the site live.

This project is technically done yet. I’m looking forward to some further projects using FOSS software to support the work of this organization of  volunteers.

by Andreas Mantke at May 13, 2018 02:02 PM

May 12, 2018

Naruhiko Ogasawara

LibreOffice mini conference 2017 Japan movies & LibreOffice Kaigi 2018

Just sharing: videos of LibreOffice mini conference 2017 Japan were published. Thanks to openSUSE.Asia 2017 Tokyo team and MNU (video sponsor)

Of course, you can find some lightning talks related to LibreOffice in the YouTube playlist. Enjoy! And Today May 12th, 2018, we, Japanese LibreOffice community have an annual LibreOffice Kaigi 2018 in Osaka (Japanese event page). Now I'm heading to the venue (this post is written in my laptop in the train ;). Hope I'll post some news from this soon.

by Naruhiko Ogasawara ( at May 12, 2018 12:25 AM

May 11, 2018

Collabora Community

Meet us in Spain and Japan!

This weekend you can find us in two different conferences, where our team members will conduct a talk.

In Almeria, Spain…

From 11th to 13th May – we will be in Almeria, Spain to speak at National Congress on Software Development (SUPERSEC) conference. Michael Meeks will talk about securing your documents online. His talk with be on Saturday, May 12th at 4 pm.

LibreOffice and Online – securing your documents

Speaker: Michael Meeks
Time: 16:00
Day: Saturday, May 12

In Osaka, Japan…

Around the same time, we will be attending another event as well. On May 12th we will be in Osaka, Japan. One of our engineers, TomaĹž Vajngerl, will explain the changes in LibreOffice 6.x from a developer point of view.

LibreOffice 6.x from a developer point of view

Speaker: TomaĹž Vajngerl
Start: 13:10
Day: Saturday, May 12
End: 13:55

Say hi to us!

If you will be around and would like to have a chat with us drop us an email at and we would be happy to see you there.

The post Meet us in Spain and Japan! appeared first on Collabora Productivity.

by Jona Azizaj at May 11, 2018 10:49 AM

May 10, 2018

Andreas Mantke

LibreOffice Extensions Site ‚Housekeeping‘

I worked a bit inside the virtual machine which runs the LibreOffice extensions and templates website today and reordered the files and moved some of them inside new subfolders. The directory with the Plone instance is much cleaner again.

I had also a look on the content of the site and reviewed some template projects. I had to remove two of them because they didn’t fit the terms of use.

by Andreas Mantke at May 10, 2018 04:04 PM

May 09, 2018

Olivier Hallot

Fixing the switchinline transform for Help

Last week I spend quite amount of time chasing a bug on the new Help XSL transformation (XSLT) to implement the <switchinline> tag of the Help.

The initial idea was to map the <switchinline> into a javascript <switch> which is a straightforward to implement, but since the devil is in the details, I had hard times to realize that I set the output of a XSL transform as html, and when it comes to javascript, assigning a string to the output of the transform brings many issues.

Specifically, I had the issue when approaching an output like

<![CDATA[case "MAC" : text = "]]>\

with the output of the <xsl:apply-templates/>call resulting in strings with carriage return, apostrophes and quotes, which can't be put inside a javascript string unless adding a post processing to remove at least the LF and CR characters. So I implemented the <switchinline>inside a outer wrapping <span>and each each <case> content output into an inner <span> tag.

<span hidden="true" id="{$auxID}">\

Then I played with the "hidden" attribute, emulating the javascript "case" with logic inside the wrapping <span>.

by Olivier Hallot ( at May 09, 2018 12:56 PM

Bringing Localization to New Help UI

As usual, we have a clear vision of the goal we want to achieve and we know it fits perfectly in the framework available, but sometimes we don't get the smart idea the first time you look at the issue.

It was easy to do the proof of concept for the new help and the style sheet transformations, but in the hurry to get the concept, I used a pair of clutches, or plain bad solution, hoping to be able to come back later.

So time has come to fix the localization of the new Help strings, and to work to use the translation infrastructure of The Document Foundation.

The trick was under my eyes for long time. It is called  document() function in XSLT. With the document() function, I can open an external document, and process it while transforming a XML file.

So why not call an auxiliary help file, with all User Interface strings translated, and use the results inside your main transformation? That is what I did in my latest patch, where I created a help file (browserhelp.xhp) with all terms of my User  Interface.

So here is an excerpt of the document() function usage in the XSLT:

<!-- Strings for the help UI page -->
<xsl:variable name="tmp_href_ui"><xsl:value-of select="concat($urlpre,'text/shared/help/browserhelp.xhp')"/></xsl:variable>

<xsl:variable name="tmp_doc_ui" select="document($tmp_href_ui)"/>

<xsl:variable name ="ui_contents"><xsl:apply-templates select="$tmp_doc_ui//variable[@id='contents']"/></xsl:variable>

where I get the right location in tmp_href_ui and the document in tmp_doc_ui, and just after I get the string which identifier is 'contents'.

Later, I used the string 'contents' in the page like

<xsl:value-of select="$ui_contents"/>

 VoilĂ . And while we are refactoring, I drop most the the other XSLT I was using as clutch (localized.xsl) and exercised some synapses in using the <xsl:for-each> statement to traverse the list of entries in the languages drop-down selector.

Happy translating!

by Olivier Hallot ( at May 09, 2018 12:56 PM

Screenshots in LibreOffice Help

An image worth a thousands words.

Indeed, a textual description of a software feature is too often hard to read, but a simple picture tells much about.

So I patched the LibreOffice Math help pages with screenshots taken by the ScreenShot_Test helper designed by bubli and added them to the help pages. To avoid handling images in too many scattered help files, I collected the in a new help file named screenshots.xhp under /06/ folder of the module. This way,  the images are embedded at the right page and if the screenshot has to be modifies, it is enough to edit the screenshot.xhp file instead of the target help file, which by the way can be multiple.

The Math module has only 8 screenshots under the module/ folder so it makes it easy to evaluate the impact on the size of the data. For all the supported languages (--with-lang=ALL) it adds 19M bytes of images.

While I was addressing this patch I also had to fix a folder naming issue with the helper, which bubli was so kind to approve and also a fix in the XSLT to handle the special case of the default language, en-US.

See it at work:

by Olivier Hallot ( at May 09, 2018 12:56 PM

Reworking Special Tables in New Help.

Continuing the enhancement of the new help pages, I made some changes in the XSL transformation and CSS file to remove some special tables and sections. In this case I used CSS properties available in HTML5, such as display:flex; .

Many tables were used to position elements in the page. Depending on the CSS class of the table, the purpose of the table changes. Here are the predefined roles worked so far:

onecell: As the name says, the xml table has only one cell. The html table was replaced by a div and proper css, followed by a line break.

icontable: this type of table type is constructed when the first tablecell contains an image. The html table replacement is rendered row by row by a wrapping div with display: flex; attribute and internal divs for the remaining cells in the row.

howtoget: The section "How to get" has now a wrapping div with display: flex;  and flex-direction: columns; to stack the heading and contents divs.

Notes, Tips and Warnings: The special paragraphs were mapped into tables and now are mapped in divs with display:flex;

All divs are also associated with named classes, and therefore the CSS can be tweaked independently.

The remaining tables are left as is but will also undergo some cleanup in the near future.

Happy CSS tweaking!

by Olivier Hallot ( at May 09, 2018 12:56 PM

New LibreOffice Help is also an UNO Extension Package

Today I finished a patch for LibreOffice 6.1 that displays the new Help when it is installed as a UNO extension package.

The patch consider the extension valid when the extension is installed (from  XPackageInformationProvider service) and the extension version matches the product version. When both situations are true, LibreOffice opens the HTML help pages from the extension in your default browser.

The fall-back logic implemented for LibreOffice help activation is now:
  1. The extension help (this one). If not,
  2. The new help in distribution package format (when it becomes available). If not,
  3. The old, ancient local help. If not,
  4. The new online Help.

The extension identifier is a critical parameter and is formed with the <locale> of the user interface. No big deal, the identifier will take the shape of <locale>

The extension can be assembled from the offline build of the new help. Pass the param --with-help=html to your autogen.input and build the help. Then zip the files needed for your locale.

Preliminary tests  indicates that the extension will be of size above 12MB per language. It contains all necessary files for autonomous navigation, that means, all internal links are reachable within the pages of the extension. Media files were added too.

For the next LibreOffice 6.1, you can test master build only and download a temporary Help package from


by Olivier Hallot ( at May 09, 2018 12:56 PM

May 06, 2018

Thorsten Behrens

LibreOffice Hamburg Hackfest – a retrospective

Let me join Mike, Miklos and Bjรถrn in the blog reporting on last month’s LibreOffice Hackfest in Hamburg (a good old tradition):

LibreOffice Python hacking

With a nice round number of 100000 (decimal 32) participants and surprisingly non-rainy and warm April weather in Hamburg, we met at very stylish offices that also generously provided us with food and beverages. Further shout-outs to TDF (and all its donors) for providing travel support for our volunteers and, equally importantly, sponsoring CIB’s very own Armin Le Grand fulltime mentoring on and off site.

You can find more details on contributions and work done on the event’s wiki page, and also for the simultaneous German community meetup (wiki, blog); just as much here: code-wise, we had 55 commits from hackfest participants over the weekend –

11  Zdenฤ�k Crhonek
 9  Stephan Bergmann
 5  Christian Lohmaier
 5  Katarina Behrens
 5  Sophia Schrรถder
 4  Armin Le Grand
 3  Michael Meeks
 3  Tamas Bunth
 3  Heiko Tietze
 2  Markus Mohrhard
 2  Miklos Vajna
 1  Linus Behrens
 1  Nithin Kumar Padavu

and probably another 15 or so landing in the weeks after, but with substantial work carried out during the hackfest. I’m really quite happy with the outcome, as well as with the number of new and old names in the above list!

I’d like to highlight one particular area of work (as it’s not reflected yet in the list above i.e. no commits on master yet), namely Regina’s ongoing endeavour to improve LibreOffice ODF conformance (or alternatively the ODF specification, if instead she believes LibreOffice gets it right and the spec has it wrong). This is especially noteworthy as it’s purely volunteer work, including weekly attendance and contribution to ODF technical committee phone meetings. Regina spent the weekend poring over LibreOffice drawing subsystem minutiae with CIB’s Armin Le Grand, and in the end wrote up a plan on making the layer functionality in Draw/Impress more useful and compliant to how ODF specifies layers: Make drawing layers ODF conform .

For myself, I (almost) didn’t get any hacking done but instead spent time mentoring, getting face time with many people, providing hackers with (mostly double) espressos, and had a handful of quite excellent discussions that only tend to happen with enough of smart people in the same room:

  • discussed opportunities around GPG signing and encryption for the public sector with Lothar Becker
  • pondered the future of application development (electron vs. browser-only vs. native ports – and all kinds of in-betweens) with Tim, Michael, and Benjamin
  • got the latest news around autocrypt, memory hole and from Bjรถrn Petersen
  • went through a number of sticky problems TDF is facing with regard to upcoming GDPR end of May, with K-J, Uwe, Florian and Eike.
    • BTW for the record, I consider GDPR a broadly good thing & not an undue burden, and a useful motivation also for volunteer and charity organisations to live up to some data protection ideals.

And last but not least thanks to Armin, Bubli, Michael and Siegmund for being the local CIB posse on the ground for that hackfest; and of course thanks to CIB for letting us have such an outstanding LibreOffice team – and to all volunteers donating a full weekend to LibreOffice!

Here are some impressions from the event (thx to Sweetshark for sharing his pictures – that work is (C) 2018 Bjรถrn Michaelsen, as noted in the image description):

by thorstenb at May 06, 2018 11:48 AM

May 04, 2018

Miklos Vajna

Lazy reading images from Microsoft formats in LibreOffice

I worked on improving document load performance of Microsoft formats in general, and DOC/DOCX in particular in LibreOffice recently. First, thanks to TDF and users that support the foundation by providing donations for funding Collabora to make this possible.

I built on top of the great work of Tomaz, focusing on these secondary, but important formats.

The idea is that if you load an Microsoft binary or OOXML file, it should not be necessary to parse all images at load time, it’s enough to lazy read it when we first render e.g. a Writer page containing that image.

The focus here was documents containing large images. I tested with an Earth photo of size 8000x8000 pixels from NASA, making little modifications to it, so each picture has a different checksum, embedding them into a binary DOC file.

I measured the time from the soffice process startup to rendering the first page. We defer the work of loading most images now, as you can see on the chart. In contrast, we used to decompress all images on file import in the past. This means the new cost for e.g. 4 images is 37% of the original.

All this is available in master (towards LibreOffice 6.1), or you can grab a daily build and try it out right now. :-)

May 04, 2018 07:59 AM

May 03, 2018

Florian Reisinger

Kotlin SI-GUI – A quick update

It’s about time for a quick update đŸ™‚

Firstly, as the initial issues are resolved there won’t be any updates for the traditional SI-GUI anymore (I may add a hint to the new version after some time)

Regarding my questions in Kotlin re-implementaion of SI-GUI:

  1. Changing the root folder should not be needed, therefore I hid it. It was not easy as either one used this feature a lot or not at all….
  2. Default folders in Java are very difficult. I tried to guess the Desktop folder – but that honestly is not more than a guess…. For downloading and installing temp folders are used. This will work, however, this might be unexpected. Have a look at the options
  3. Hardcoding anything is a bad idea. Therefore the current implementation fetches the list of available languages from here. at the moment. So new helppack languages are sadly only included, if they are found here. I hope that this a good limitation.
  4. The Bootstrap.ini file will always be modified
  5. Linux version IS possible, but not supported at the moment
  6. There is a early version of an Android build: CLICK ME

There are 2 things I want to task about in the rest of this post, the desktop UI and the Linux support.

I made an update to the desktop UI (and speed improvements on certain operations). Please give it a try DOWNLOAD. I do not know if the new color scheme causes eye cancer….

Linux support

I do not have a Linux VM at the moment. Therefore I cannot test / validate if what I wrote is correct (and besides of that I would have extreme problems to troubleshoot everything.

There does exist an instruction here. I hope I find a volunteer, which helps me out and creates a script which does the following:

  • Defines 2-4 variables: 1-3 files (MAIN, HP, SDK) and the target folder
    • For the script one of those files e.g. only MAIN would be enough as the rest is just copy and paste
  • Implement the instructions, so that the file(s) will be installed in the folder. The target folder should be created if it does not exist yet.
  • If possible absolute paths should be used
  • Temporary files should be deleted afterwards
  • If possible there should be a short console output (“Starting installation”, “Extracting files”,”Cleanup”,”Done!” or similar), so that the user gets an idea about the process
  • LibreOffice should be installed in a way that the “program” folder within LibreOffice is a direct child of the defined install location in the first step

That’s about what’s missing for Linux support. Startup / downloading files should work by now. Especially Linux users: Please keep in mind that the desktop app uses JavaFX, which is bundled in Oracle JDKs, but has to be installed seperatly for openjdk. (Soon that will be also true for Oracle JDKs…). “OpenJfx” should be the package name you are looking for,

PS: The icons are temporary, Andreas Kainz might create a better looking icon soon.

by Florian Reisinger at May 03, 2018 05:41 AM

April 27, 2018

Mike Kaganski

Configuring LibreOffice using GPO to take user data from Active Directory

Introducing the problem

User data in LibreOffice (Options→LibreOffice→User Data) is used for a number of purposes; among them are setting authors of documents, comments and modifications (when in Change Tracking mode); and saving cursor position in documents (so that the authors would jump right to the place they worked at last time, while other readers would see the document from the beginning).

When the data is missing, collaborative work may suffer from e.g. anonymous changes or comments appearing in documents; that’s why it’s usually important for organizations to care that LibreOffice instances have this information filled in properly – and of course, the configuration should be centralized.

Pre-existing (awkward) solution

LibreOffice has always had ability to get user data using LDAP (a protocol to communicate with different directory services). Using that, it was already possible to setup LibreOffice to take user data (name, organization, address, etc.) from Active Directory (which is also accessible using LDAP) by doing some post-deployment steps: creating a custom .xcd file from a template (oo-ad-ldap.xcd.sample) shipped with LibreOffice, and deploying it to share\registry sub-folder of LibreOffice installation on client systems. However, this is not a “native” way to centrally configure Windows applications in an Active Directory domain; among other things, one needs to invent a mechanism to deploy the .xcd (e.g., using a .bat file at startup, or modifying MSIs used to install LibreOffice); debug it, and support (like when LibreOffice install path changes, as happened with LibreOffice 6.0, which now installs into LibreOffice – previously install path included major version number; and .bat script would need to account for that, and possibly also work in an environment where different LO versions exist on different systems).

A new shiny way to do this

Starting with Collabora Office 5.3-48, and coming with LibreOffice 6.1 in August, it is also possible to use a GPO Administrative Template that we at Collabora Productivity created for our partner Studio Storti, to setup this, which allows system administrators running Active Directory domains to perform the configuration conveniently using familiar tools and workflow. Please see the documentation file describing this in details, in the folder with the ADMX file.

by mikekaganski at April 27, 2018 06:58 AM

April 25, 2018

Florian Reisinger

Please say hello to the new SI-GUI

Hello everyone,

With this post the original C# version is being deprecated. In this post “Kotlin SI-GUI” (Separate Installation GUI in Kotlin) will be introduced.

For Windows the basic functionality should work.

This excludes:

  • Bering able to start *.exe files
  • A good error message when trying to parallel install *.exe files
  • Window icons are missing ATM

Without further ado I present the new GUI (which not necessarily means that it is better looking)


Biggest features compared to the old version:

  • List of thinderboxes does not need to be maintained
  • Downloads are grouped by architecture
    • In a future Linux version:
      • DEB 32
      • DEB 64
      • RPM 32
      • RPM 64


Additionally after clicking “start download” you get a nice Window where you can select which files you want to download. I chose “bo” as my helppack language and a 64 bit build.


Settings is also improved.

The list of helppack languages is not hard coded either (looking at /latest build from archive BTW).

Download types for Windows are: EXE, 32-bit and 64-bit. If you are only interested in a subset of these types, you can choose it. This will be considered for the next update.

And by the way, shortcuts can not only be created on the desktop đŸ˜‰ By default the download and installation folder are temporary locations, the desktop folder is only guessed. So please review these settings!


Some minor functionalities are still missing, but it is pretty usable for testing MSI builds.

You can download Kotlin SI GUI here. (You download an updater app. This updater app will download the latest version of Kotlin SI-GUI. The current version of the updater does not display the download progress, so please be patient on first installation). Java 8 required!

If you have feedback regarding the UI, please comment!

by Florian Reisinger at April 25, 2018 05:23 PM

April 23, 2018

Tomaž Vajngerl

Improving the image handling in LibreOffice - Part 3

GraphicObject refactoring

GraphicObject and the implementation of XGraphicObject (UnoGraphicObject) and XGraphic (UnoGraphic) were located in module svtools, which is hierarchically above vcl. This is problematic when creating new instances like in Graphic.GetXGraphic method, which needs to bend backward to make it even work (ugly hack by sending the pointer value as URL string to GraphicProvider). The solution to this is to move all GraphicObject related things to vcl, which surprisingly didn't cause a lot problem and once done, it looks like a much more "natural" place.

Regarding the UNO API of XGraphicObject - what is left to do here is to properly clean up the uniqueID, as it is not possible to use it anymore for anything else as a uniqueID (used only in filters for the image names, if the name is not yet known).

Managing memory used by images

Figure1: Hierarchy before refactoring

Previously the memory managing was done on the level of GraphicObjects, where a GraphicManager and GraphicCache (see figure 1) were responsible to create new instances from uniqueID and manage the memory usage that GraphicObject take. This is not possible anymore as we don't operate with uniqueIDs anymore, but always use Graphic and XGraphic objects  (in UNO), so we need to manage the creation of Graphic object or more precisely - ImpGraphic (Graphic objects are just ref. counted objects of ImpGraphic). 
Figure 2: Hierarchy after refactoring
So to make this possible GraphicManager and GraphicCache need to be decoupled and removed from GraphicObject and a new manager needs to be introduced between Graphic and ImpGraphic, where the manager controls the creation and accounts for the memory usage (see Figure 2).

Graphic swapping and swapping strategy

In the To release the memory of graphic objects, we swap them out to a temp file and read back (swap-in) when we need them again. In the previous implementation this was partially directed by the SdrGrafObj (common image implementation) and SwGrfNode (Writer image implementation). For each graphic object there was a timer when to trigger an automatic swap-out + the swap-out that can happen when a memory limit is exceeded.

For the new code external swapping directed from SdrGrafObj and SwGrfNode was removed, so they can't influence when swapping will happen (maybe in the future they can provide hints when it is a good time to do swapping). There is now a global timer which triggers checking of all Graphic objects if any of them can be swapped out in case we exceed memory limit. Same code is triggered when a new object is created too. A object will be swapped out if it is not used for a certain amount of time. Each object tracks the timestamp when it was last used.

A swap-in happens if the object is swapped-out (obviously) and certain data is needed (under-laying bitmap, animation or metafile). This is checked at the same code-path where the timestamp updating happens.

The new swapping strategy is relatively simple - if a lot of memory is needed by graphic objects in a certain time, we let it use it and don't try to over-aggressively try to free it. In the past this cased swap-out and swap-in cycle that made the application completely unusable. In the future, external hints when a certain Graphic object can be swapped out may be added, so we can perform swapping more effectively. There are also several other ideas which will increase performance and reduce memory usage that can be implemented now with the new hierarchy where most all of the swapping is contained inside the Graphic itself, but all of this is currently out of the scope of this work.

Other changes to Graphic

Another changes to Graphic done were related to lazy loading. When a document is loaded, we don't want to load Graphic into memory, if it is not needed yet (for example we display the first page but the graphic is on page 10). In document filters (ODF for example) we previously transported the URL of an external or internal graphic to the document model, where it was lazily loaded when it was actually needed. This is not possible now anymore as we need to create a XGraphic object already in the document filter. To overcome this we need to to have an unloaded Graphic, which is created already in a swapped-out state and swapped-in when needed.

The GraphicFilter didn't allow something like this, so I needed to add a new method, which doesn't actually load the image, but just gathers what kind of the image is loaded and its metadata (image size) and creates a GfxLink object that includes the (compressed) image data. The metadata is needed as we don't want to actually force a load when this basic information is requested. Actually we want to load the image as late as this is possible.

Another issue is also that we can have an external image (loaded from a file or even URL on the internet). The issue is similar to the lazy loading scenario, but it is different that a Graphic now must know the URL with which it was created and can be created completely empty (no loading of any kind). The reason for this is that loading is directed by the LinkManager, which is part of the document model. For security reasons the LinkManager can not allow that a Graphic is loaded so loading is directed by the LinkManager on demand (first usage). LinkManager also takes care of all URLs of various external resources. The user can look at those resources and change the URL of them or trigger an update. Changing URL and updating an object was previously done in SdrGrafObj and SwGrfNode, but now this is moved to the common code in Graphic object where SdrGrafObj and SwGrfNode only direct what to do. There are still rooms to improve things here, however not the scope of this work.

Next steps

Finishing up this work by revising the UNO API and fixing known bugs.


Many thanks to Collabora ProductivityTDF and users that support the foundation by providing donations, to make this work possible.

To be continued...

by Tomaž Vajngerl ( at April 23, 2018 02:59 PM

April 20, 2018

Dennis Roczek Resources has a great web archive – containing many archived revisions of all web pages. You might even know that – if not, try it out! Even sites are archived which are offline since ages! works since 1998(!) – shortly after the beginning of the internet itself!


Why do I write this blog post? What does this have to do with LibreOffice?

It’s rather easy: eskiwiki and trwiki (which I do try to integrate into tdfwiki) do both based on a not maintained server where nobody has access. There is a great tool and initiative out there called wikiteam, who does try to archive and make dumps of wikis accessible (not only mediawiki).

I do know that there are requests to get content of the “wiki Pardus” (the offline wiki of the Linux distribution Pardus) and what a luck there is a backup of the Pardus wiki in their archives.


So again: If you know a great resource (even offline) for help pages, FAQ pages, tutorials, wikis, etc. pp. then ask us.

by dennisroczek at April 20, 2018 11:40 PM

April 19, 2018

Florian Reisinger

Kotlin re-implementaion of SI-GUI


Just a few questions I would be interested to hear am answer.

  1. How often do you change the root folder for your parallel installations? (How often do you change the folder right beneath the “should subfolders be created automatically”?)
  2. What should be the default folder for the above option? (Empty not allowed)
  3. Do you need a list of available helppack languages? Would it be acceptable to connect to the internet for fetching the possible helppack language or do you prepare it hardcore.
  4. Do you need the option not to touch bootstrap.ini file?
  5. Would you like to have a Linux version?
  6. Do you want an Android version (parallel installation does not work on Android, it c only be used to download APKs and offer them to be installed)
  7. Yes duplicate.. please don’t answer! Would you be using it on Linux as well?

Thank you for your feedback! Repository of the re-implementaion!

by Florian Reisinger at April 19, 2018 07:19 PM

April 18, 2018

Björn Michaelsen

LibreOffice Hamburg Hackfest 2018 After Action Report and: Where’s next?

Freedom’s just another word for nothin’ left to lose
Nothin’, it ain’t nothin’ honey, if it ain’t free

— Janis Joplin singing “Me and Bobby McGee” by Kris Kristofferson

Years ago, I opened one of the first LibreOffice Hackfests in Hamburg with the motto inscribed in the Hamburg city hall: “Libertatem⁠ quam peperere maiores digne studeat servare posteritas”. This year, the LibreOffice Hackfest came back to Hamburg: to the office of

Carolin, Jessica and Lena from helping me opening the Hackfest
(c) 2018 Thorsten Behrens. All rights resevered.

If your German is as good as your Latin, you will find some common ground between those facts about the 2013 and 2018 Hackfests: freedom.

On the other hand, a lot has changed: For one, the 2018 one more explicitly invited the local LibreOffice community too to support a better exchange of ideas between non-code and code contributors. This was natural in the earlier days, when the project was smaller, but now is something we need to have actively focus on.

Even more importantly, this was the first “Hackfest: the next Generation” and we had two mentors sponsored by the Document Foundation to help contributors to improve LibreOffice in ways they deem important: Armin Le Grand from CIB and Miklos Vajna from Collabora. Armin worked with Regina on layers in Draw, a topic Regina requested as a topic for the Hackfest. Miklos helped a lot of contributors with a wide set of issues, his own report has the details.

Armin and Regina churning away on layers in LibreOffice Draw.
(c) 2018 Bjoern Michaelsen. All rights resevered.
Miklos on one of his many mentoring missions in Hamburg.
(c) 2018 Bjoern Michaelsen. All rights resevered.

Of course, there was a lot more going on, and Mike has written an excellent overview of all the good things that happened.

Personally, I was extremely pleased with these results and think the “Hackfest: the next generation” format should be repeated. The question is: Where? The key to answer that question is finding a location that will be attended by people who profit from mentoring the way those that worked with Miklos and Armin in Hamburg did.

So if you think: “A Hackfest is an awesome thing and I want one in my local community”, collect ideas that people — existing and future contributors — who would attend are interested in working on. Reginas reply (linked above) is an excellent example of how to do that.

If there are topics to work on, a local Hackfest should be easy to support. I will likely call for such proposals again soon, but should you already have concrete topics and locations you want to share, dont hesitate to send them to Board Discuss on your own initiative. Rest assured we will welcome them!

Hackfest or Barcamp? Your Call!
(c) 2018 Bjoern Michaelsen. All rights resevered.

Finally: Thanks again to for hosting us!

by bmichaelsen at April 18, 2018 08:30 AM

April 17, 2018

Dennis Roczek

Eskiwiki and trwiki

There are many old – often read-only – resources out there. Sometimes still based for and thus heavily outdated. Many creators and administrators of these sites are either no longer active (in neither LibreOffice nor OpenOffice communities) and many of these resources have been made read-only for some reasons.

Original I got the request from the German community to recreate somehow the content of the old back to live. The doing is on my To-Do-List since ages, and it will happen at some time. First I do want to test some easier conversation of a straight on two Turkish wikis: Eskiwiki (“old wiki”) and TRWIKI. Both are based on MediaWiki and can be merged first within in itself (so the real content without spam goes from Eskiwiki to TRWIKI). After the first migration a rather short test-migration should happen to the test instance of the TDFwiki. Hopefully everybody involved will give ones go to move than to the live-TDFwiki. Of course we will try to preserve working links and contributions (who made the edits) as much as possible / the license allows. All these tasks are not always easy nor clear, e.g. do we can preserve the links without any breakage; or can we preserve the attribution of the edits or map these to the correct account.

All in all these involves many steps even in such relative easy example as the TRWIKI; but getting to pages like the read-only “only in HTML format” OOoWiki requires some more steps. OOowiki original based on MoinMoin-Wiki and the generated HTML was optimized and simplified. So this is not a simply straight forward like in the two Turkish wikis which simply need to export the XML content (of all relevant revisions) and import this into another MediaWiki instance. But with a few additional steps (and maybe a little bit manually work) we also get the old OOoWiki editable again and with a bit luck the German community can bring the content up to date.

For any language community – if you have somewhere resources (even not under your control) and you want to get them under somehow control of the TDF (and I’m not only talk about wikis!) ask the infra team and me. Very likely we can find a solution to get the stuff working.

by dennisroczek at April 17, 2018 10:45 PM

Collabora Community

Using Collabora Online to accelerate document conversion

Nowadays we have different ways of converting our documents, using different tools that are available online. One option is JODConverter: (for Java OpenDocument Converter) a widely used tool that automates document conversions. Supported formats include OpenDocument, PDF, HTML, Microsoft Office formats (DOC/DOCX/RTF, XLS/XLSX, PPT/PPTX) and many others. Usage can be as a Java library, a command line tool, or a web application. Traditionally the JODConverter uses a LibreOffice process for its conversion but newer versions of JODConverter can use Collabora Online directly.*

We built a dedicated page on our website explaining why you should consider switching to either the Collabora Online backend or more simply talk directly to Collabora Online itself.

What are the main benefits of using Collabora Online for document conversion?

  • Improved performance compared to startup-convert-shutdown approach;
  • The REST API is more reliable than starting LibreOffice in server mode and communicating via remote UNO;
  • More secure because the conversion happens in an isolated environment and this layered approach protects your infrastructure (from outer to inner layers):
    • It is easy to run it in a Virtual Machine / Docker Container;
    • Document data isolation into per-document chroots;
    • Seccomp-bpf: inside that chroot (almost) no system calls are allowed;
    • Extremely sparse filesystem inside the chroot: no shell etc.

For more details checkout our page that explains more about the benefits, performance, and how to try out JODConverter with its Collabora Online backend. If you have questions, feel free to send us an email.

Check it out!

The post Using Collabora Online to accelerate document conversion appeared first on Collabora Productivity.

by Jona Azizaj at April 17, 2018 09:30 AM

April 16, 2018

Caolán McNamara

Some Native GTK Dialogs in LibreOffice

When the GTK3 backend is active in current LibreOffice master (towards 6.1) some of the dialogs are now comprised of fully native GTK dialogs and widgetery. Instead of VCL widgetery themed to look like GTK, they're the real thing.

So for these dialogs this means f.e that the animated effects for radio and checkbuttons work, that the scrolling is overlay scrolling, and that the visual feedbacks that scrolling has reached its limit, or that available content is outside the scrolling region are shown. In the above demo, the GtkNotebook is the real thing.
I'm particularly pleased with the special character dialog because it has a custom character grid widget which comes with accessibility support which remains working when reworked as a native gtk widget with custom drawing and interaction callbacks.

by Caolán McNamara ( at April 16, 2018 03:34 PM

April 14, 2018

LibreOffice Design Blog

Easyhacking: How to make a feature optional

Working on the user experience often means making a feature optional. Some users may need a feature while others may find it distracting. An example is the tooltip shown on tracked changes.

Overlapping tooltips as reported in tdf#114523

Figure 1: Overlapping tooltips as reported in tdf#114523.

While this tooltip is useful for the review, it just overlaps the text when editing, as long the information is not shown in the document margin (tdf#34355) or if you don’t use the Track Changes deck in the sidebar for some reason.…

The post Easyhacking: How to make a feature optional appeared first on LibreOffice Design Team.

by The LibreOffice Design Team at April 14, 2018 09:14 PM

April 11, 2018

Andreas Mantke

Update LibreOffice Extensions Site With Fix

I updated the LibreOffice extensions website with the source code fix that I added yesterday. The  issue with documentation files is gone now.

by Andreas Mantke at April 11, 2018 08:48 PM