Read Only Mirror fo Libreoffice-related git repos (see url for code submission) - LibreOffice.
A short post on how to convert PPTX file to images. There are two steps. Thefirst step is to convert PPTX to PDF, and the second step is convert PDF toJPEG image.
First, we need to install libreoffice:
To install the latest version of libreoffice, run the following command instead:
To convert PPTX to image, we need to first convert it to PDF
Use libreoffice directly
We can use
soffice provided by libreoffice to convert pptx to pdf directly:
This will create a file named
Apart from soffice, we can also use unoconv.Install related package first:
Then use unoconv to convert pptx to pdf:
I met the following error when I run unoconv:
For me the error is because unoconv is using the wrong python. In fact, unoconvis just a python script with a shebang:
Since I also installed python3 via Anaconda and add it to the system path, theabove shebang will actually use python3 from Anaconda, which is wrong.
uno.py package is located in
/usr/lib/python3/dist-packages/uno.py, andwe need to use the system python3.
So we need to change the shebang of unoconv to:
According to comment here, we can also sed to do this:
In order to turn PDF to images, we can use imagemagick or poppler.
We need to install imagemagick:
Then we can convert PDF file to image using
During conversion, two errors occur after issuing the convert command:
For the first error, you can edit
/etc/ImageMagick-6/policy.xml and changethe following line:
For the second error, this is because ghostscript has not been installed on thesystem. Try to install it:
After that, you should be fine to generate from PPTX to jpg/pngimages.
We need to install poppler-utils:
For further steps, refer to this post.
- 2020-12-24: Add how to convert pptx to pdf using unoconv.
A new feature named 'Styles Inspector' was requested by the design team at LibreOffice on Fall of 2019. This project caught my attention as I felt out of all the other projects this needs immediate attention. In particular when you receive documents from other people, it can be quite difficult to understand the applied formatting and to fix issues around.
I write this blog with the purpose of my final report with a slight glimpse of my journey during this summer. It’s been quite a challenging experience, certainly more challenging than I thought it would be when writing the proposal. Regardless, this experience has taught me a lot and I hope to continue learning and contributing to LibreOffice/open source going into the future.
How I started
I had wanted to contibute in Open Source through GSoC since long, this year i gave a very serious try. I chose LibreOffice because the codebase was mostly in C++: the language I am most familiar in. Most importantly GSoC is not just about writing code, its about doing some significant contribution in the organisation which in turns is contributing to the world. What could have been better than LO for that? the best alternative to MS Office which provides its awesome tools completely for free!!
I started getting involved with the organisation in around Feb 2020. Downloaded the code base in my local machine.. set up logerrit..find up a bug to solve from Bugzilla.. and you are good to go. With the help of Regina I was able solve my first bug and LO greets me with this beautiful mail which shows they take their contributors very seriously.
Gradually with every new bug fix, my confidence about the codebase increased and making propsal now seemed less difficult. I started discussing with my mentors how exactly would the Style Inspector function and according to that started looking into the codebase for similar functionality. You can check my propsal here. Also check out my timeline(top right) to know how i managed my time every week during the summer.
Overview of Work Done
Github Libreoffice Download
Working on the project was more challenging than i had thought. The UI design of the the panel was completed soon using Glade. My next patch was to make a property dump of all the attributes for the text at the cursor. I had presumed it to be completed in not more than 7 days, but during this time, a major cyclone Amphan hit most eastern part of India including my region which led to electricity and data blackout for about a week and i was totally cut off from my project. Around three weeks had passed since the community bonding period had started and i was stuck with nothing more than this empty panel.
I started losing confidence and a point came where it seemed I would fail. Fortunately my mentor Mike knew about this issue and helped me with a lot of code pointers. Life came back to the project and the property dump was finally completed. Yes, you could now see a beautiful list of more than 170 properties about the text at the cursor in the Styles Inspector!
The Inspector extensively uses the UNO API to detect the style attributes. Whenever we click on any text first for all the attributes it is checked if it was directly formatted or is a result of any applied Paragraph Style or Character Style. The hierarchy followed in terms of style attributes by UNO API is :-
Accordingly for each style at each level it was checked if its property state was beans::PropertyState_DIRECT_VALUE or beans::PropertyState_DEFAULT_VALUE, a property will be displayed in each category(DF, CS, PS) only if it is a DIRECT value and all the styles with DEFAULT state will be included in Default Paragraph Style as that is the 'mother' of all styles. The Inspector would now look like this
The nodes are divided into three types: Category, Simple and Complex. Category type nodes are basically the main categories (PS, CS and DF). Complex properties are those which are styles and have properties defined for them. Simple nodes are the properties having some value stored in them. Currently only PS, CS and DF categories are present in the Inspector but one can add say 'Table Styles', 'Frame Styles' or any other style according to will following the struct.
The next milestone was to grey out the properties which are directly modified at a category but are overriden by any different value defined at some higher level.
Things went smooth as the end of Second Evaluation approached, Inspector seemed stable and I wanted to remove the 'Experimental' tag from it which prevents users from accessing any feature by default(users have to manually go to Options->'Enable Experimental features' in LibreOffice Writer). As the completion of the project seemed close, a few crash bugs were filed by the LO team. Inspector uses the GetChgLink to capture any changes in the cursor and once any change is detected the Inspector is cleared and the whole panel is rerun. Now, GetChgLink is calcuted dynamically i.e its value is found at run time and changes every time we call it.
The issue was that GetChgLink was called multiple times in WriterInspectorTextPanel.cxx which brought different change links thus different cursors, different property sets.. this led to a crash. The solution was not very difficult, just declare a global variable and store the value of GetChgLink the first time it is called, later use this stored value to refer to the same cursor called before. A few more crashes were noted and fixed within time.
We had not yet added any shortcut to launch the SI. Every user wants some shortcut to do things. You do not always want to go to the sidebar..look for Inspector and do stuff. I added a patch that introduced Ctrl+Alt+5 as the shortcut key to launch the SI. Tada!!
Github Libreoffice Online
The most significant patches merged during the GSoC phase are:-
Libreoffice 5.3 Download
Check out all the merged patches here. The final work product :)
A couple of bug fixes remain to be solved. When opening the SI for the first time the panel shows empty, because the cursor is not really on any text. At such situations the panel should instead show the default state(Default Paragraph Style in PS, empty CS and and empty DF). The whole list of bugs that should/may be solved are located at bugzilla
At last, I want to sincerely thank my mentors Tomaz, Mike and Heiko for their continued support, without which it would have been impossible to make any progress. I also extend my gratitude to Caolan for always replying back to my UI related mails :-).
It was fun working with you awesome people together on this project.
Feel free to follow me on GitHub or contribute to LibreOffice.
What do you feel about this blog? Share your feedback here. Bye!