A new website dedicated to PDF generation using the CSS Paged Media approach
Today we lauched a new website www.print-css.rocks soley dedicated to CSS Paged Media.
CSS Paged Media is an approach for generating high-quality PDF document from XML or HTML as input and CSS for styling and layout.
print-css.rocks is both a showcase and a tutorial for CSS Paged Media. In a growing number of lessons we show different features of CSS Paged Media and we learn how different converters behave with the same input.
Join me at the XML Prague 2016 conference for hands-on-training on generating high-quality PDF documents from XML/HTML.
I will attend the XML Prague 2016 conference from February 11th to 13th and give a hands-on-training on
The training will involve a lot of live coding in order to show you what you ask and what want to see.
The training material will evolve over the next few weeks in our public repository https://github.com/zopyx/css-paged-media-tutorial.
The training consists of two slots:
- slot one will teach you the CSS Paged Media basics
- slot two involves styling of a real world content document (HTML source with lots of chapters, images and tables)
- Participants must have either PrinceXML 9/10 or PDFreactor 7/8 installed on their systems. Both converters are available for free for private or evaluation purposes. The trainer can assist you with the installation on Mac or Linux (not with Windows) but please make sure that you install the converter before the tutorial in order to safe time for the real cool stuff. We will eventually look at the new Vivliostyle Formatter.
- Particpants must have basic skills in HTML and CSS.
Andreas Jung is working in the electronic publishing business for almost 20 years. Andreas is a Python & Plone freelancer, works on large internet and web applications, publishing solutions and funder of the Produce & Publish and XML Director projects.
Further information on CSS Paged Media
Version 1.3 features support for much more cloud storage types.
I am pleased to announce the release of XML-Director Version 1.3.
Version 1.3 now supports much more storage backends like finally the local filesystem, Amazon S3, Alfresco, Owncloud and third-party storage integrations like StorageMadeEasy and Otixo. In addition a huge amount of effort went into testing XML-Director against various storages. Each single source commit is directly tested against more than a hundred unittests running agains 14 different software and storage combinations.
As a side project we started to create a new REST API for XML-Director which will make much easier to interact with XML-Director from third-party applications. The near future vision is being able to talk from Microsoft Word through a plugin directly to XML-Director. Saving a Word document over XML-Director will directly store the DOCX file within the XML-Director CMS and trigger arbitrary conversions (XML/HTML transformations in the first place). Support for Indesign & Oyxgen XML Editor are planned. Because of the generic design of XML-Director we will be able to support arbitrary XML dialects from Docbook to DITA.
Official and final support for Plone 5 has been pushed back until the release of Plone 5.1 due to serious issues with the Plone 5 resource registries.
Merry Christmas everyone!
May the angle brackets with you!
The "XML Director" add-on for Plone 4 and 5 allows you to mount external storage and web services into Plone using a unified approach and API. Many common protocols like WebDAV or S3 are supported out of the box. Services like Sharepoint, Evernote etc. can be connected with Plone through 3rd-party SaaS bridges.
The upcoming version 1.3 will feature improved support for various external storages
- BaseX 8.3
- eXist-DB 2.2 and 3.0
- local filesystem
- all WebDAV based services
- Amazon AWS S3
- support for OTIXO and StorageMadeEasy SaaS bridges
A significant amout of efforts was invested into automatic interoperability tests with different backends. As outcome of these efforts we are now able to run the XML Director test suite (about 100 tests) against various backends (either running in Docker containers or available as external service) through Travis-CI - both for Plone 4.3 and Plone 5.0. So all code changes to XML Director will trigger 1400 tests against the various software and backend combinations.
The latest XML Director release (Version 1.3 beta 1) is available from PyPI
Open issues that must be solved for the final 1.3 release
- complete Plone 5.0 compatibility (JS and CSS integration)
- improved automatic UI tests (URL escape issues in particular related to the local filesystem integration)
I had various discussions with people during the Plone Conference. The main topic was about a deeper integration into Plone (similar to Reflecto providing search integration through content proxies). In general I want to keep the current implementation small and minimal. I think that a deeper integration could be integrated as an layer on top. Necessary infrastructure in terms of notifications and hooks could be added in order to provide everything for higher level modules everything to make mounted content more usable and re-usable inside Plone. However a deeper integration into Plone must be well-thought since there a lot of edgecases to be considered. I am open for further discussions and suggestions...get in touch!
This is a followup posting to "Towards a generic integration of external data sources into Plone" that I wrote last year.
The key to mounting arbitrary filesystems (local and remote) into a Plone instance is my XML Director (xmldirector.plonecore) project. Don't be confused about the "XML" in the project but the project started as an integration solution for accessing XML databases from within Plone with a tight integration and access to Plone functionality. XML Director became very mature over the last month and works since some month smooth and without problems in production as part of the Onkopedia (www.onkopedia.com) project. The current release features support for accessing XML databases like eXistDB (2.2 and 3.0) and BaseX (8.2, 8.3). The integration is build on top of pyfilesystem which abstracts lots of different filesystem types and makes them accessible through a transparent and unified API. This means (in theory) that your code will run against a local filesystem in the same way as against S3 or a WebDAV server.
Levels of filesystem type integration with Plone
- "Mounting" - an arbitrary filesystem can be mounted into Plone (very similar to Reflecto). A persistent "connector" object in Plone represents a mount point. You can use URL traversal through the "connector" object for accessing resources on the other filesystem
- "Dexterity" - support for storing Dexterity values per-field on an a different filesystem (other than the ZODB). This mode uses its own directory layout on the other filesystem (which does not reflect any hierarchy aspect of Plone)
XML Director will see a new major release very soon that will extend the list of supported filesystems.
- eXistdB (2.2, 3.0): fully supported, running production
- BaseX (8.3): fully supported, running production
- support for local filesystem access (similar to Reflecto): almost working
- Owncloud: almost working
- Dropbox: almost working (using DropDAV bridge)
- Dropbox: testing phase (via native Dropbox Python driver for pyfilesystem)
- AWS S3: under consideration, partly working
- FTP/SFTP: under consideration, partly working
XML Director has a huge testsuite of over 100 tests that are used to check the functionality of XML Director against all support filesystem types. A general problem that must be addressed in some way are encoded filenames. Many filesystem types support UTF-8 encoded filenames, others only support ASCII. The problem becomes even more complicated with different filesystem encodings on the host running Plone and of course the local filesystem (if you upload files from your local computer). XML Director is fully supported for Plone 4.3. Full support for Plone 5.0 is very close (some JS/CSS registry issues remaining).
A better fulltext search for Plone based on Elasticsearch
Over the last few weeks I had been working on a new enhanced version of collective.elasticindex. collective.elasticindex was originally written and maintained by Infrae.
A better fulltext search in Plone was always demanded by customers of the last years. TextIndexNG3 solved this problem for a long time. However no solution is perfect and every software has its time. So it was straight forward moving forward to Elasticsearch.
Why not Solr? ...too boring...uses XML...not sexy enough. Elasticsearch in general has a lot of momentum right now and is easier to setup and maintain.
We extended collective.elasticindex in the following ways
- unified livesearch and extended user interface
- much better support for multi-lingual content by applying language specific analyzers to content and queries
- better configuration options of the language specific aspects
- support Plone 4.3 (Plone 5.0 support should also work soon..some issues with the Plone legacy bundle handling in Plone 5)
- Plone 5.0 support should also work soon..some issues with the Plone legacy bundle handling in Plone 5
- Requires Elasticsearch 1.6.X for now. Elasticsearch support 2.0 requires an updated very of pyes which does not deal very well with changes in the error messages of Elasticsearch 2.0
- collective.elasticindex is currently available from Bitbucket (https://bitbucket.org/dasgehirn/collective.elasticindex) in beta quality...there is a bunch of cleanup to be done.
Many thanks to Infrae for building the first version of collective.elasticindex.
Alternative approaches for the PDF generation from DITA maps.
Historically PDF conversion of DITA content is closely tied to XSL-FO. However there are alternative ways to get from DITA to PDF. The classic XML addicted will likely disagree but going from DITA XML to PDF through CSS Paged Media appears more reasonable and much easier. The first step is to generate a single-source (X)HTML file form a DITA map.
This can be done by either the DITA Open Toolkit
dita -f html5 -i my.ditamap -o out/my.html -Droot-chunk-override=to-content
ditac -c single -f xhtml my.html my.ditamap
pdfreactor -s mystyles.css my.html my.pdf
prince -s mystyles.css my.html my.pdf
All DITA class and outputclass attributes are carried forward into the HTML markup. This will make it easy to write specific CSS styles that match related DITA elements, topics or whatever.
- no XSL-FO needed
- all styling and layout accomplished by CSS
- less complexity, no XSL-FO expert needed
- reduced costs (cheaper converters, no XSL-FO guru needed)
- similar quality as with FO
- taking advantage of modern CSS features like CSS transformations etc.
- Publishing with CSS Paged Media – A review of existing tools and techniques (Slides, XML Prague talk)
- Andreas Jung (email@example.com)
This is a followup to my former blog post XML-driven Plone portal "Onkopedia" finally online".
RANT: The Docker developers are so serious about security
Docker recently launched the beta version of their new Docker image hub (hub-beta.docker.com), a registry for public and private Docker images.
How serious is Docker about security?
The first version of the new hub required a minimal password length of exactly one character. After laughing about their password security policy they changed it to four characters and recently the minimum password length is now finally six characters? What's next? Seven chars? Eight chars? This is the best example that the Docker devs do not have the slighest idea about basic security. All services moved forward to longer password, more complex passwords, two factor authentication and these untalented Docker dev kids introduce a one character minimum password policy for hub-beta.docker.com....find the problem yourself...
We are currently working on a better integration of Elasticsearch with Plone 4.3 and 5.0. The technical foundation of our work is the collective.elasticindex implementation by Infrae. While the collective.elasticindex add-on is working nicely out of the box, we have the need to bring the Elasticsearch integration of Plone a bit forward.
- support for Plone 4.3 and 5
- proper support for multi-lingual content
- language dependent analyzers on the Elasticsearch (german text should be analyzed in ES with the german analyzer etc)
- more flexible configuration of the ES indicies
- fast search feedback (find-as-you-type)
- "real-time" filtering of search results by meta data (similar to extended search)
- better highlighting support
- easier customization of the search result list using Mustache
Right now we are moving fast and ripping and replacing old code with new code where needed. We hope to create an alpha release within the next weeks that will hopefully run on Plone 4.3 and Plone 5.