2018-05-14

This RSS feed URL is deprecated

This RSS feed URL is deprecated, please update. New URLs can be found in the footers at https://news.google.com/news

How to convert xls to ods?

I'm using POI library to make a xls file. I get a task to convert xls to ods. It is not a problem to make xls file but I want to convert that xls file to ods. I find some library such as Apache ODF toolkit and LibreOffice. Is there any good open source library for converting xls to ods?


2018-05-13

2018-05-13 Sunday.

  • Breakfast, to the conference, Jules' talk on Facebook's use of Infer - to find various classes of problem, interesting. Bid 'bye & kindly dropped to the airport by a friendly organizer.
  • Poked at socket code on the plane.

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 …

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 …

2018-05-12

2018-05-12 Saturday.

  • Overslept, taxi to the conference; tried to learn Spanish by listening to security talks - with mixed success. Lunch - presented some slides on our security fun: Update on security challenges of the LibreOffice code-base
    Almeria is a lovely place - GUADEC should be amazing here.
  • Walking tour of Almeria in the evening, passed a marching band, and a statue being propelled by lots of apparently dis-embodied legs; interesting. Party in the evening.

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.

2018-05-11

2018-05-11 Friday.

  • Up unfeasibly early; coach to STN, fight to Almeria, worked on slideware; admin; short sleep - I feel so Spanish - more work, out for a lovely dinner with Ismael & a number of other interesting folk. Tapas, bed late.

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 hello@collaboraoffice.com and we would be happy to see you there.

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


2018-05-10

2018-05-10 Thursday.

  • Mail, poked at slides, sales & marketing call. ESC call, chat with Caolan - more sliding for Almeria.

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. …

LibreOffice and VolunteerMatch: Welcoming new contributors

Free and open source software, such as LibreOffice, is all about community. Anyone can get involved, and many people join the LibreOffice community because they want to improve something in the software – features, compatibility, translations, documentation, marketing and more. As we’ve seen in the ongoing Month of LibreOffice, we have hundreds of volunteers active […]

2018-05-09

2018-05-09 Wednesday.

  • Mail, chat with Markus. Interested to see Excel adding Javascript functions. We have some horrific, ancient Rhino - JS implementation that is built on Java; so in theory we're already there - but ... I suspect a modern JS engine would perform better and run everywhere; then again - it is always fun to see how many separate garbage collectors we can fit in one process sharing the same signals etc. mix and match Java, C# & JS ... who do you hand your SEGV handler to next ?
  • Sync with Kendy, Miklos, chat with Lubos; much massaging of text. Up late chasing a very interesting file corruption issue.

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: https://help.libreoffice.org/6.1/en-US/text/smath/01/05030000.html?&DbPAR=MATH&System=UNIX




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 = "]]>\
<xsl:apply-templates/>\
<![CDATA[");]]>

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}">\
<xsl:apply-templates/>\
</span>

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

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>.help.libreoffice.org.

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
https://helponline.libreoffice.org/Help_en-US_6.1.oxt

Enjoy!








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!





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!

The Document Foundation announces LibreOffice 6.0.4

Berlin, May 9, 2018 – The Document Foundation (TDF) announces LibreOffice 6.0.4, which represents the bleeding edge in terms of features, and as such is targeted at early adopters, tech-savvy and power users. For mainstream users and enterprise deployments, TDF provides the alternative download of LibreOffice 5.4.6. TDF suggests to deploy LibreOffice in production environments […]

2018-05-08

Month of LibreOffice, May 2018 – The first week in

On May 1st, we started a new Month of LibreOffice, celebrating contributions all across the project. Everyone who gets involved will be awarded a cool sticker for their work – so how many stickers have been won so far? 148 So that’s almost 150 community members who’ve helped to improve LibreOffice in the last week […]

2018-05-07

Welcome gla11y, the user interface accessibility checker!

LibreOffice is designed with great attention to accessibility, to make the suite convenient and comfortable to use, and to cater to users with special needs. Last year The Document Foundation published a Tender to Implement Accessibility Improvements regarding user interface widgets that are added to the suite but which have accessibility shortcomings. French company Hypra, […]

2018-05-06

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): 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 freiheit.com offices that also generously provided us with food […]

2018-05-04

Having fun together: The Nepalese LibreOffice Community

Who makes LibreOffice? And who can get involved to make it even better? The answer is – everyone! For instance, the Nepalese LibreOffice community spent much of April 2018 localising the software, and at the end of the month, they had a fun meetup: Saroj Dhakal summarised what they did: The FOSS Nepal Community and […]

2018-05-03

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: Changing the root folder should not be needed, therefore I …

2018-05-02

GDS makes new push on ODF usage - UKAuthority.com (press release) (blog)


UKAuthority.com (press release) (blog)

GDS makes new push on ODF usage
UKAuthority.com (press release) (blog)
UK and on using ODF. GDS is also planning to review historic documents that are often downloaded and work with departments on republishing in ODF or HTML formats, and to collect quarterly statistics on which files have been uploaded and downloaded.


2018-04-29

1OH2: odt is actually zipped archived

odt is actually zipped archived

← Previous revision Revision as of 12:25, 29 April 2018
Line 106: Line 106:
 
}}
 
}}
   
The '''Open Document Format for Office Applications''' ('''ODF'''), also known as '''OpenDocument''', is an [[XML]]-based [[file format]] for [[spreadsheet]]s, [[chart]]s, [[Presentation program|presentations]] and [[word processor|word processing]] documents. It was developed with the aim of providing an open, XML-based file format specification for office applications.<ref>{{cite web |url=https://www.oasis-open.org/committees/office/charter.php |title=OASIS Open Document Format for Office Applications (OpenDocument) TC |publisher=Organization for the Advancement of Structured Information Standards |date=19 January 2005 |accessdate=6 October 2013}}</ref>
+
The '''Open Document Format for Office Applications''' ('''ODF'''), also known as '''OpenDocument''', is a [[Zip_(file_format)|ZIP]]-compressed<ref>Extract an odt file with unzip on Linux to see the actual resource hierarchy</ref> [[XML]]-based [[file format]] for [[spreadsheet]]s, [[chart]]s, [[Presentation program|presentations]] and [[word processor|word processing]] documents. It was developed with the aim of providing an open, XML-based file format specification for office applications.<ref>{{cite web |url=https://www.oasis-open.org/committees/office/charter.php |title=OASIS Open Document Format for Office Applications (OpenDocument) TC |publisher=Organization for the Advancement of Structured Information Standards |date=19 January 2005 |accessdate=6 October 2013}}</ref>
   
 
The standard was developed by a technical committee in the [[OASIS (organization)|Organization for the Advancement of Structured Information Standards]] (OASIS) consortium.<ref>{{cite web |url=http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=office |title=OASIS Open Document Format for Office Applications (OpenDocument) TC |publisher=[[OASIS (organization)|Organization for the Advancement of Structured Information Standards]]}}</ref> It was based on the [[Sun Microsystems]] specification for [[OpenOffice.org XML]], the default format for [[OpenOffice.org]], which had been specifically intended "to provide an open standard for office documents."<ref>{{citation |url=http://xml.coverpages.org/openoffice-xml_specification_draft200012.pdf |format=PDF |title=StarOffice XML File Format Working Draft, Technical Reference Manual, Draft 9, December 2000 |date=December 2000 |accessdate=2010-08-08}}</ref>
 
The standard was developed by a technical committee in the [[OASIS (organization)|Organization for the Advancement of Structured Information Standards]] (OASIS) consortium.<ref>{{cite web |url=http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=office |title=OASIS Open Document Format for Office Applications (OpenDocument) TC |publisher=[[OASIS (organization)|Organization for the Advancement of Structured Information Standards]]}}</ref> It was based on the [[Sun Microsystems]] specification for [[OpenOffice.org XML]], the default format for [[OpenOffice.org]], which had been specifically intended "to provide an open standard for office documents."<ref>{{citation |url=http://xml.coverpages.org/openoffice-xml_specification_draft200012.pdf |format=PDF |title=StarOffice XML File Format Working Draft, Technical Reference Manual, Draft 9, December 2000 |date=December 2000 |accessdate=2010-08-08}}</ref>

2018-04-27

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…

2018-04-25

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 …

2018-04-23

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.

Credits


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

To be continued...

OASIS Launches New DITA XML.org Technical Publishing Community Portal

New Web Site Sponsored by Adobe, Congility, and IBM Brings DITA Users Together to Share Information

23 April 2018--The OASIS international standards consortium today introduced the new DITA XML.org portal (http://dita.xml.org). This newly re-engineered website serves as the official online community gathering place and information resource for the Darwin Information Typing Architecture (DITA), an international openstandard that builds content reuse into the authoring process.

read more


2018-04-20

Archive.org Resources

archive.org 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! Archive.org works since 1998(!) – shortly after the beginning of the internet itself!   Why do I write this blog […]

2018-04-19

Kotlin re-implementaion of SI-GUI

Hi, Just a few questions I would be interested to hear am answer. 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”?) What should be the default folder for the above option? (Empty not allowed) Do you …

2018-04-18

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…

2018-04-17

Eskiwiki and trwiki

There are many old – often read-only – resources out there. Sometimes still based for OpenOffice.org 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 […]

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.


2018-04-16

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.

2018-04-14

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.…


2018-04-11

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.

Cybersecurity Companies Demo Support for STIX and TAXII Standards for Automated Threat Intelligence Sharing at RSA 2018

Anomali, EclecticIQ, Fujitsu, Hitachi, IBM Security, New Context, NC4, ThreatQuotient, and TruSTAR Demo STIX and TAXII Support

16 April 2018 -- Nine companies from around the world come together at the RSA 2018 conference this week to demonstrate automated cyber threat intelligence sharing in action. Members of the nonprofit OASIS standards consortium will showcase an array of products that support the STIX™ and TAXII™ standards. The demos are being held from 16-19 April, in Booth 1701.

read more


Latest Advances in OASIS KMIP and PKCS #11 Encryption and Cryptographic Standards Demonstrated by 10 Companies at RSA Conference 2018

Cryptsoft, Fornetix, IBM Security, Kryptus, Micro Focus, P6R, Quintessence Labs, Thales eSecurity, Unbound Tech, and Utimaco Demo KMIP Interoperability and/or PKCS #11 Support

16 April 2018 -- At the RSA Conference 2018, members of the OASIS international consortium collaborate to demonstrate their support for new features in two of the industry’s most widely-adopted security standards, the Key Management Interoperability Protocol (KMIP) Standard and the Public-Key Cryptography (PKCS) #11 Standard. The demos are being held from 16-19 April, in Booth 1601.

read more


GreenC bot: Rescued 1 archive link; reformat 1 link. Wayback Medic 2.1

Rescued 1 archive link; reformat 1 link. Wayback Medic 2.1

← Previous revision Revision as of 16:06, 11 April 2018
Line 221: Line 221:
 
* The TAC (Telematics between Administrations Committee), composed of e-government policy-makers from the 25 [[European Union]] Member States, endorsed a set of recommendations for promoting the use of open document formats in the public sector.<ref name="ec.europa.eu">{{cite web|url=http://ec.europa.eu/idabc/en/document/3197.html|title=IDA promotes the use of open document formats for e-government interoperability|work=IDA Report 22|date=June 2004|publisher=IDABC|accessdate=10 September 2012}}</ref>
 
* The TAC (Telematics between Administrations Committee), composed of e-government policy-makers from the 25 [[European Union]] Member States, endorsed a set of recommendations for promoting the use of open document formats in the public sector.<ref name="ec.europa.eu">{{cite web|url=http://ec.europa.eu/idabc/en/document/3197.html|title=IDA promotes the use of open document formats for e-government interoperability|work=IDA Report 22|date=June 2004|publisher=IDABC|accessdate=10 September 2012}}</ref>
 
* The free office suites [[Apache OpenOffice]], [[Calligra]], [[KOffice]], [[NeoOffice]] and [[LibreOffice]] all use OpenDocument as their default file format.
 
* The free office suites [[Apache OpenOffice]], [[Calligra]], [[KOffice]], [[NeoOffice]] and [[LibreOffice]] all use OpenDocument as their default file format.
* Several organisations, such as the [http://opendocumentfellowship.com/ OpenDocument Fellowship]{{dead link|date=March 2018 |bot=InternetArchiveBot |fix-attempted=yes }} and [http://opendocsociety.org/ OpenDoc Society] were founded to support and promote OpenDocument.
+
* Several organisations, such as the [https://web.archive.org/web/20071027064136/http://opendocumentfellowship.com/ OpenDocument Fellowship] and [http://opendocsociety.org/ OpenDoc Society] were founded to support and promote OpenDocument.
 
<!-- * The [http://www.oidi.org OIDI.org] (Open Interoperative Document Initiative) is committed to encouraging efforts by governments at all levels, around the globe, to implement changes necessary to ensure public documents are open and interoperable and thus available to all citizens/residents without the need for specific vendor software. -->
 
<!-- * The [http://www.oidi.org OIDI.org] (Open Interoperative Document Initiative) is committed to encouraging efforts by governments at all levels, around the globe, to implement changes necessary to ensure public documents are open and interoperable and thus available to all citizens/residents without the need for specific vendor software. -->
 
* The UK government has adopted ODF as the standard for all documents in the UK civil service<ref>{{cite web | url=https://www.gov.uk/government/news/open-document-formats-selected-to-meet-user-needs|title=Open document formats selected to meet user needs}}</ref>
 
* The UK government has adopted ODF as the standard for all documents in the UK civil service<ref>{{cite web | url=https://www.gov.uk/government/news/open-document-formats-selected-to-meet-user-needs|title=Open document formats selected to meet user needs}}</ref>
Line 278: Line 278:
 
** [[Slovakia]]
 
** [[Slovakia]]
 
** [[Sweden]]<ref>{{cite web |title=Öppna standarder - Programvaror och tjänster 2014 |url=https://www.avropa.se/contentassets/c5e98243c85f4ac997f905555e504f3b/oppna-standarder---programvaror-och-tjanster--v-1.00--20150617.pdf}}</ref>
 
** [[Sweden]]<ref>{{cite web |title=Öppna standarder - Programvaror och tjänster 2014 |url=https://www.avropa.se/contentassets/c5e98243c85f4ac997f905555e504f3b/oppna-standarder---programvaror-och-tjanster--v-1.00--20150617.pdf}}</ref>
** [[United Kingdom]]<ref>{{cite web |url=https://www.gov.uk/government/publications/open-source-open-standards-and-re-use-government-action-plan |title=Open source, open standards and re-use: government action plan |publisher=[[Government of the United Kingdom]] |date=27 January 2010 |deadurl=no<!--present in archive.com-->}}</ref>
+
** [[United Kingdom]]<ref>{{cite web |url=https://www.gov.uk/government/publications/open-source-open-standards-and-re-use-government-action-plan |title=Open source, open standards and re-use: government action plan |publisher=[[Government of the United Kingdom]] |date=27 January 2010 }}</ref>
 
{{endflatlist}}
 
{{endflatlist}}
 
{{startflatlist}}
 
{{startflatlist}}

2018-04-10

New Fix For The LibreOffice Extensions Site

I worked on an issue that a contributor to the LibreOffice extensions and templates website (https://extensions.libreoffice.org) forwarded to me. I had to investigate the source code for the connection to the uploaded documentation file for an extension and submitted a fix for this issue today the TDF github repository. The fix will be available within …

2018-04-07

Final steps of LibreOffice database migration

It is my third post about implementing HSQL migration inside odb documents in connection with a TDF tender. The previous posts were about creating the schema import, and the import of binary data. Today I will write about the final steps which has to be made in order to toggle off experimental feature from Firebird …

2018-04-06

Anomalocaris: {{nowrap}} can't wrap {{longitem}}

{{nowrap}} can't wrap {{longitem}}

← Previous revision Revision as of 08:01, 6 April 2018
Line 10: Line 10:
 
| datastyle = line-height:1.35em;
 
| datastyle = line-height:1.35em;
 
| data4 = {{nowrap|'''[[Filename extension]]s'''<br/>{{mono|.odt{{nbsp|2}}.fodt}}}}
 
| data4 = {{nowrap|'''[[Filename extension]]s'''<br/>{{mono|.odt{{nbsp|2}}.fodt}}}}
| data5 = {{nowrap|'''[[Internet media type]]''' {{longitem|{{mono|application/vnd.oasis.<br/>opendocument.text}}}}}}
+
| data5 = {{nowrap|'''[[Internet media type]]'''}} {{longitem|{{mono|application/vnd.oasis.<br/>opendocument.text}}}}
 
| data7 = {{nowrap|'''[[Uniform Type Identifier|Uniform Type Identifier (UTI)]]'''<br/>{{mono|org.oasis.opendocument.text}}<ref name="uti">{{cite web |url=http://www.huw.id.au/filetypes.html#OpenDocument |title=Filetypes |author=Huw Alexander Ogilvie |accessdate=20 June 2008}}</ref>}}
 
| data7 = {{nowrap|'''[[Uniform Type Identifier|Uniform Type Identifier (UTI)]]'''<br/>{{mono|org.oasis.opendocument.text}}<ref name="uti">{{cite web |url=http://www.huw.id.au/filetypes.html#OpenDocument |title=Filetypes |author=Huw Alexander Ogilvie |accessdate=20 June 2008}}</ref>}}
 
| data8 = {{nowrap|'''UTI conformation'''<br/>{{mono|org.oasis-open.opendocument<br/>public.composite-content}}}}
 
| data8 = {{nowrap|'''UTI conformation'''<br/>{{mono|org.oasis-open.opendocument<br/>public.composite-content}}}}
Line 37: Line 37:
 
| datastyle = line-height:1.35em;
 
| datastyle = line-height:1.35em;
 
| data4 = {{nowrap|'''Filename extensions'''<br/>{{mono|.odp{{nbsp|2}}.fodp}}}}
 
| data4 = {{nowrap|'''Filename extensions'''<br/>{{mono|.odp{{nbsp|2}}.fodp}}}}
| data5 = {{nowrap|'''Internet media type''' {{longitem|{{mono|application/vnd.oasis.<br/>opendocument.presentation}}}}}}
+
| data5 = {{nowrap|'''Internet media type'''}} {{longitem|{{mono|application/vnd.oasis.<br/>opendocument.presentation}}}}
 
| data7 = {{nowrap|'''Uniform Type Identifier (UTI)'''<br/>{{mono|org.oasis.opendocument.presentation}}<ref name="uti"/>}}
 
| data7 = {{nowrap|'''Uniform Type Identifier (UTI)'''<br/>{{mono|org.oasis.opendocument.presentation}}<ref name="uti"/>}}
 
| data8 = {{nowrap|'''UTI conformation'''<br/>{{mono|org.oasis-open.opendocument<br/>public.composite-content}}}}
 
| data8 = {{nowrap|'''UTI conformation'''<br/>{{mono|org.oasis-open.opendocument<br/>public.composite-content}}}}
Line 62: Line 62:
 
| datastyle = line-height:1.35em;
 
| datastyle = line-height:1.35em;
 
| data4 = {{nowrap|'''Filename extensions'''<br/>{{mono|.ods{{nbsp|2}}.fods}}}}
 
| data4 = {{nowrap|'''Filename extensions'''<br/>{{mono|.ods{{nbsp|2}}.fods}}}}
| data5 = {{nowrap|'''Internet media type''' {{longitem|{{mono|application/vnd.oasis.<br/>opendocument.spreadsheet}}}}}}
+
| data5 = {{nowrap|'''Internet media type'''}} {{longitem|{{mono|application/vnd.oasis.<br/>opendocument.spreadsheet}}}}
 
| data7 = {{nowrap|'''Uniform Type Identifier (UTI)'''<br/>{{mono|org.oasis.opendocument.spreadsheet}}<ref name="uti"/>}}
 
| data7 = {{nowrap|'''Uniform Type Identifier (UTI)'''<br/>{{mono|org.oasis.opendocument.spreadsheet}}<ref name="uti"/>}}
 
| data8 = {{nowrap|'''UTI conformation'''<br/>{{mono|org.oasis-open.opendocument<br/>public.composite-content}}}}
 
| data8 = {{nowrap|'''UTI conformation'''<br/>{{mono|org.oasis-open.opendocument<br/>public.composite-content}}}}
Line 87: Line 87:
 
| datastyle = line-height:1.35em;
 
| datastyle = line-height:1.35em;
 
| data4 = {{nowrap|'''Filename extensions'''<br/>{{mono|.odg{{nbsp|2}}.fodg}}}}
 
| data4 = {{nowrap|'''Filename extensions'''<br/>{{mono|.odg{{nbsp|2}}.fodg}}}}
| data5 = {{nowrap|'''Internet media type''' {{longitem|{{mono|application/vnd.oasis.<br/>opendocument.graphics}}}}}}
+
| data5 = {{nowrap|'''Internet media type'''}} {{longitem|{{mono|application/vnd.oasis.<br/>opendocument.graphics}}}}
 
| data7 = {{nowrap|'''Uniform Type Identifier (UTI)'''<br/>{{mono|org.oasis.opendocument.graphics}}<ref name="uti"/>}}
 
| data7 = {{nowrap|'''Uniform Type Identifier (UTI)'''<br/>{{mono|org.oasis.opendocument.graphics}}<ref name="uti"/>}}
 
| data8 = {{nowrap|'''UTI conformation'''<br/>{{mono|org.oasis-open.opendocument<br/>public.composite-content}}}}
 
| data8 = {{nowrap|'''UTI conformation'''<br/>{{mono|org.oasis-open.opendocument<br/>public.composite-content}}}}

LibreOffice Hackfest – once more in Hamburg

After 2010, 2012, 2013 and 2015, another LibreOffice HackFest will take place in Hamburg this coming weekend, April 7th and 8th. Want to meet hackers from one of the largest FLOSS projects, see what’s going in the world of large-scale C++ & document freedom, and try your hand at some easy hacks? We’ve Armin, one […]

2018-04-05

Meet us this weekend in Hamburg!

The LibreOffice community during the Hackfest at Betacowork in Brussels, Belgium.

When…

On 7th to 8th April – this weekend- we will be in Hamburg, Germany to attend LibreOffice Hackfest. It’s again the time to meet other contributors to the project to “hack” all together. At the Hackfest will be EasyHacks prepared for anyone wanting to do their first code contributons to the project and we will be around to help every interested newcomer.

Will you join us?

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

Check out the wiki page for more details.

See you soon! 🙂

The post Meet us this weekend in Hamburg! appeared first on Collabora Productivity.


Remote and Biometric eSignatures with ViDSigner

Remote and Biometric eSignatures with ViDSigner admindocxp Thu, 04/05/2018 - 12:11

Docxpresso now integrates biometric and remote legally binding electronic signatures thanks to our collaboration with ViDSigner (a DocuSign partner).

ViDSigner is the eSignature solution of validatedID a company specialized in digital identification.

VidSigner integration allows Docxpresso to incorporate Biometric eSignatures following the ISO/IEC 19794-7 standard compatible with the eIDAS and eSign regulations.

Biometric eSignatures incorporate information like pressure, speed and inclination that help forensic experts to identify the authorship of a signature.

The usage of ViDSigner within Docxpresso is extremely simple.

You should first include your ViDSigner credentials within Docxpresso via the eSignatures > Config eSignatures main menu entry:

ViDSigner Docxpresso config interface

Once configured Docxpresso detects that ViDSigner has been activated and automatically offers the possibility of forwarding any generated document to the ViDSigner platform for a biometric signature or a standard remote eSignature.

We know pass to show how this can be done in detail.

1. Prepare your template for eSignature

To prepare a Docxpresso template for eSignature is straightforward. You just have to include a “placeholder image” (where you want the signature to be placed) in your Word template and tag it with an alternate text of “##signature##” (multiple signatures are possible just by incorporating more placeholder images tagged with ##signature_1##, ##signature_2## and so on):

Prepare word template for eSignature

 

2. Uploading the template to Docxpresso

After uploading the document to the Docxpresso interface the platform will recognize that the template includes an eSignature.

Whenever a document is generated with that document the backoffise users will be offered the possibility to send it for signature with ViDSigner:

Sample usage

By clicking on the ViDSigner button the user is redirected to an interface where (s)he can choose:

  • The biometric device (that has to be previously activated in the ViDSigner account) or user email where the document will be forwarded for signature.
  • The name and ID number of the signer or signers if multiple signatures are requested (if the Docxpresso template incorporate those variables they will be automatically added otherwise they should be inserted via the web interface).
Request eSignature

 

After providing the required data the document will be forwarded to the chosen device and the end user will be able to sign it:

Signing on a tablet by a doctor

The document will be automatically captured after signature by Docxpresso (without further user interaction) where it can be downloaded or simply stored for future use.

The signing status can be checked directly in the document listings:

eSignature listings

 

And the signed document can be retrieved, for example, from that document interface:

Downloading eSigned document

No paper exchanged and no hassle. An eSignature process that completely eliminates the need of printing, scanning and resaving the data in the company databases: you create the document and the client signs it within an integrated interface that keeps track of all the process and data!!


2018-04-04

A bird's eye tech view of Docxpresso

A bird's eye tech view of Docxpresso admindocxp Wed, 04/04/2018 - 19:49

Docxpresso is a web app that once installed and correctly parametrized allows any of its backend users to gather data from third parties (humans or machines) and generate dynamical documents based on Office (Word, Libre Office, Open Office, ...) templates without additional plugins or help from an IT department.

In a few words Docxpresso converts a “Word document” into a web app that:

  • Can be immediately shared with end users via a link (sent by email or embedded in a web page).
  • Allows for the interaction of end users with the document via a web browser.
  • Integrates external data from different data sources: directly provided by end users, databases, external services, CSV files, …
  • Generates dynamical documents integrating all gather data within the original Office template.
  • Separates presentation (final document) from data so the latter can be parsed, stored and forwarded, if required, to a third party service.

Most importantly Docxpresso is architectured as a service so it is very simple to integrate it into a third party tool like a ERP, CRM, BPM, etcetera or it can be simply used as a “web form interface” for any other web app, website or corporate portal.

The Docxpresso platform is sustained over four different pillars:

  • Web app: Docxpresso from the point of view of its end users is just a responsive web app that runs on a browser regardless of the supporting device: desktop computer, tablet or smartphone.
  • API Core: this is the software library that acting behind the curtains allows for the generation of all the required documents in Open Document Format.
  • Conversion Engine: this subpackage is the one in charge of making all necessary conversions among all the allowed document formats, namely: Word (docx and doc), Open Document Format (odt), Portable Document Format (pdf), Rich Text Format (rtf) and HTML5 + CSS (html).
  • integrated Rest Services and SDK: the Docxpresso Software Development Kit is designed to permit the programmatic interaction with Docxpresso databases and document repositories in a secure and remote way through the integrated Docxpresso REST Services.

In the following we will offer a concise technical presentation of all of these.

Web interface

Docxpresso is a web app developed over PHP using Simfony as MVC framework and Doctrine as ORM.

Symfony and Doctrine incorporate out of the box the following security standards:

  1. HTTPS: Docxpresso is compatible with the standard Secure/Transport Socket Layer allowing for secure communications with clients and third party applications.
  2. Authentication: Symfony integrates all standard authentification features:
    1. LDAP: users in corporate enviroments are able to authenticate via the LDAP or Active Directory service.
    2. Password encryption: all passwords are stored encryted to ensure identity protection.
  3. Access control: Symfony incorporates a complete hierarchy of roles that may be customized to be adapted to specific corporate requirements.
  4. SQL injections: Doctrine uses internally prepared statements that are safe regarding injections.
  5. CSRF protection: Symfony forms are automatically token protected regarding CSRF attacks.
  6. XSS: all input data in public interfaces is properly escaped to avoid Cross Site Scripting attacks.

Besides the standard security measures described above Docxpresso incorporates its own security measures for the exchange of data with end users and/or external data sources.

Each shared link or data exchange is identified with a unique token that is generated by HMAC from a string that incorporates:

  • A random unique id (public)
  • A timestamp (public)
  • A base64 encoded strings of all the URL parameters (public)
  • A private key that is unique to each installation

This assures that the token is uniquely associated to a Docxpresso transaction of a given installation and is uncrackable unless the private key is exposed to third parties.

Docxpresso incorporates 5 different security levels associated with this token protection scheme:

  • Level 0: public access granted.
  • Level 1: APIKEY or token required. The APIKEY is generated out of all the request parameters, a timestamp, a custom unique id, URL parameters and a secret private key. The offered link may be reused at any time.
  • Level 1.5: the same as level 1 but with expiring timestamps (default 24 hours). The offered link may be reused at any time before expiration.
  • Level 2: The APIKEY expires after its first use so the link may be only used once.
  • Level 2.5: The APIKEY expires after its first use or by an expiring timestamp whatever happens first.

Depending of the particular needs you can set up the most adequate security level to guarantee that only authorized users, both of the front and backoffice, can access the app contents.

Docxpresso API Core

The Docxpresso API Core is a standalone PHP package responsible of the generation of documents in Open Document format out of the provided Office templates and the required data.

One could say that the Docxpresso app is just a web interface to this API Core package that eliminates the need of PHP programmers.

Among many other things the API Core package:

  • Transforms back and forth from HTML5 + CSS to Open Document format.
  • Generates all kind of document elements from scratch: paragraphs, rich text, lists, tables, charts, textboxes, sections, forms, etcetera.
  • Clones and replace content in a given Office template.
  • Handles variable properties.
  • Merges documents.

This API Core is extremely performant: it has been benchmarked to generate almost 1.000.000 documents in one hour in an 8 core CPU with 8GB of RAM.

The Docxpresso API Core incorporates natively XXE protection against attacks that may produce, if not avoided, a buffer overflow and the consequential security risks.

Docxpresso Conversion Engine

Most of the times Open Document format is not the desired output format for the requested documents.

Although documents generated in Open Document format may be opened by Word many users prefer to handle directly with Word native formats and also more often than not the required output format is PDF because is “allegedly” non-editable, at least by not highly skilled users.

Both cases require a conversion from ODT to DOCX, DOC (RTF is also supported) or PDF format of the final document.

This is achieved by using one or multiple instances (for high availability or in order to avoid a single point of failure) of Libre Office that take care of the conversion through a Docxpresso macro that should be installed via the command line interface.

Docxpresso API Core comes equipped with a daemon that should run in the background and that it is responsible of managing the conversion queue.

The process is basically as follows:

  • Install Libre Office in one or multiple servers.
  • Install the Docxpresso macro as a shared extension in each LibreOffice installation.
  • Every time Docxpresso is required to generate a document in PDF, DOCX, DOC or RTF format the native ODT document is generated and added to a conversion queue (that is handle via the file system or a database in HA systems)
  • The Docxpresso Daemons manage that queue and sequentially send the document to be converted to the first available Libre office instance based on a simple LIFO algorithm.
  • The converted documents are saved into the required location.

The whole process is asynchronous making it very resilient to peaks in the number of requests.

We have installations that have been running by now for almost two years and generated millions of documents with no downtime whatsoever.

Docxpresso SDK and REST Services

Docxpreso incorporates a plethora of integrated web services that greatly simplify its integration with corporate databases and third party services and apps.

In order to give an idea of the power of the Docxpresso REST interface we pass to enumerate some of the things that can be easily achieved:

  • Remotely obtain a list of document templates organized by categories in a browsable tree.
  • Request for the remote generation of a document based upon a template and data obtained directly from the Docxpresso databases or provided by POST in JSON format.
  • Retrieve final documents (with attachments if available) previously generated via the Docxpresso interface.
  • Open remotely Docxpresso web interface, load data and forward data to an external service.
  • Search Docxpresso databases for end user data and documents.
  • Get statistical usage data.
  • List users

All of these exchanges of information with Docxpresso is protected with HMAC generated tokens that guarantee that only authorized requests are attended.

The Docxpresso SDK is designed to simplify all these tasks so with a simple call to a SDK method the link with all the security parameters and request parameters is generated so one can skip all the nitty-gritty details (that otherwise are not so difficult anyway).

Software Requirements

From the server side Docxpresso requires:

  • PHP > 5.4.* although PHP 7.* is highly recommended
  • Besides the standard PHP modules Docxpresso requires the Tidy and LDAP extensions (if LDAP authentication is required).
  • Database: although most tested with MySQL and MariaDB because of its integration with Doctrine ORM is also compatible with Postgress, Oracle, SQL Server and SQLite.
  • Database drivers: that may depend on the chosen database (PDO_MySQL, OCI8, …)
  • Web server: apache or nginx.
  • Libre Office 5.* for the Docxpresso conversion engine.

Docxpresso has been thoroughly tested in different LINUX flavors (Ubuntu, RedHat, CentOS, Debian,…) and Windows systems and in principle any OS that allows for the installation of the software described above will due.

The client side only requires a reasonable recent version of the more used current Internet browsers. Chrome, IE, Firefox, Opera, etcetera.

The Docxpresso backoffice and end user interfaces do not require the installation of any plugin or browser add-on.

Hardware requirements

The minimum hardware requirements are:

  • Reasonably recent Intel CPU (at least one core should be dedicated to Docxpresso conversion engine)
  • 2GB of RAM
  • 10GB of storage space.

This should be enough for a few editors and up to a thousand of documents per hour (of course, the storage space may depend on the total number of documents generated).

In the case of High Availability environments the Docxpresso app is easily scalable using the standard methods of HA websites, namely:

  • Load balancers
  • Reverse proxies
  • HA proxies
  • DB clusters
  • Etcetera

Format conversions

The most CPU consuming task is the format conversion for final documents, i.e. the generation of PDF and Word files (the generation of native odt file only takes a few hundredths of a second).

Docxpresso first generates an Open Document File (that may be open directly with Word) that if requested should be transformed to PDF or any other available format. As explained before this is done via a daemon or service that calls a conversion macro on a Libre Office instance.

The architecture of the application allows for having multiple instances that share a queue of documents to be converted. In order to dimension correctly the number of Libre Office instances required (which is tantamount to the number of cores) we should take into consideration:

  • The number of documents per hour
  • The throttling or the peak number of documents per second

Taking into account that the conversion of a document can take from 0.1 to 1 second, depending of its number of pages and complexity, this implies that a single core can easily accommodate the generation of a thousand documents per hour with a peak concurrence of less than four/five documents per second.

Although the details may depend on the particular needs of the client, for example documents with multiple charts or many large images may take longer than others to get converted, we may say that a system with two cores dedicated to the conversion engine may easily handle:

  • More than 500.000 documents per month
  • Peaks of up to 8-10 documents per second

2018-04-01

Getting java.lang.NoClassDefFoundError: org/apache/xerces/dom/ElementNSImpl with Apache ODF Toolkit

I am trying to read an ods file using Apache ODF Toolkit. I am getting java.lang.NoClassDefFoundError error while while trying to load the Spreadsheet using below code-

SpreadsheetDocument data = SpreadsheetDocument.loadDocument(file);

Below is the error trace-

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xerces/dom/ElementNSImpl
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at test.read.ODSFile.ReadODS.main(ReadODS.java:33)
Caused by: java.lang.ClassNotFoundException: org.apache.xerces.dom.ElementNSImpl
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 25 more

Below is the project structure, which shows the classpath- Eclipse screenshot

Is there any dependencies missing?


How can the Page Size, Page Orientation, and Page Margins of an ods Spreadsheet Be Set Using ODFDOM?

The Apache Incubation Project ODFDOM allows users to programmatically read and create various open document format files, including spreadsheets.

I am trying to set various print options for a spreadsheet I am creating, using their re-vamped "Simple API", however it does not appear they have yet exposed an easy way to modify document properties such as page margin, page size (height/width), and page orientation (landscape/portrait).

I need to get from a SpreadsheetDocument to something that will allow me to modify these values.


  • http://googleforwork.blogspot.nl/
  • https://blogs.office.com/?feed=rss2
  • OASIS News and Announcements https://www.oasis-open.org/feed
  • https://www.oasis-open.org/news/feed
  • Best content in OpenDocument Format | Diigo - Groups https://groups.diigo.com/group/open_document-format/rss
  • ODF software recipe http://recipes.opendocsociety.org/recipes/;rss
  • OpenXML/ODF Translator Team Blog http://odf-converter.sourceforge.net/newblog/rss.php
  • OpenDocument - Revision history https://en.wikipedia.org/w/index.php?title=OpenDocument&feed=atom&action=history
  • The Document Foundation Planet http://planet.documentfoundation.org/atom.xml
  • A blog by Jos van den Oever http://www.vandenoever.info/index.rss
  • Active questions tagged odf - Stack Overflow http://stackoverflow.com/feeds/tag/odf
  • Rob Weir: An Antic Disposition http://feeds2.feedburner.com/robweir/antic-atom
  • Apache OpenOffice https://blogs.apache.org/OOo/feed/entries/atom
  • Moved by Freedom – Powered by Standards http://standardsandfreedom.net/index.php/feed/
  • http://www.computerworlduk.com/blogs/rss
  • News http://www.docxpresso.com/rss.xml
  • https://joinup.ec.europa.eu/news/all/feed
  • File Formats Blog http://www.blogger.com/feeds/9361273/posts/default
  • odf format - Google News odf format - Google News http://news.google.com/news?pz=1&ned=us&hl=en&q=odf+format&output=rss