Hello World! Meet Bookmaker

The open-source bookmaking tool from Macmillan Publishers.

What Is Bookmaker?

Bookmaker is an open-source toolkit to make books out of Word .docx files and HTMLBook HTML files (it can accept either type of file as input). It was developed as part of a pilot project to try to make books with almost no budget, and it is currently in use today at Macmillan. (You can get the source code on GitHub.)

What Can I Convert?

Macmillan Word template

In order to get well-structured output files, you need at least somewhat well-structured input files. We created a set of styles to apply to the parts of a Word document, to provide the structure we need. Get the template here.

HTMLBook HTML

Just like with the Word files, we need to have some rules around how the HTML is structured, so bookmaker knows what to do with it. We used O'Reilly's HTMLBook spec, which you can read about here.

 

What's the Output?

HTMLBook HTML

HTML is Bookmaker's gateway to the PDF and EPUB formats, and paves the way for you to create Web versions of your content.

PDF

Bookmaker can create a PDF for the Web or to send to the printer, laid out without human intervention using CSS and the new CSS 3 Paged Media spec.

EPUB

Bookmaker uses O'Reilly's HTMLBook scripts to create an EPUB, the popular open-source ebook format that can be read on most ereader devices.

 

How Does It Work?

Bookmaker is fully configurable for your system and workflow. In the config.rb file, you tell it what kind of system you have and where you want to keep the files it creates. You can also configure each project in a config.json file, to give Bookmaker your project metadata, CSS design files, cover files, and so on. You can run each component Bookmaker script one by one, or package them into .bat or .sh file to run all at once. See in the Bookmaker repository on GitHub for more guidance.

How Do I Install It?

Right now, Bookmaker needs to be installed by a developer or someone comfortable with the command-line and system configuration. Remember--this is a tool we built for ourselves, and we're not a software company! We'd love to make it easy to install someday, but right now it's all up to you. There are more complete installation instructions in the Bookmaker repository on GitHub.

Tech Requirements

Bookmaker is built on a number of open-source technologies and tools. Bookmaker is not self-contained software like Adobe InDesign or Calibre--it is a compilation of processes and tools, organized into a functional stack. In order to run Bookmaker, you'll need the following things:

Ruby

This open-source programming language lies at the heart of bookmaker.

Python

Also open-source, python assists the ruby processes.

Node.js & JavaScript

Node lets us harness the power of JavaScript to perform content conversions.

 

HTMLBook

We use O'Reilly's HTMLBook toolkit to create the EPUB files (why reinvent the wheel, right?).

Java and Saxon

Turns .docx into HTML (but we're in the process of replacing this with JavaScript).

An XSL1 Processor

Turns HTML into an EPUB. (We use xsltproc.)

Prince XML or DocRaptor

Creates the final PDF. Download Prince or sign-up for Docraptor.

 

What's Next?

Bookmaker is still actively in development. Here are a few of the things we're working on:

Lighter, easier-to-maintain transformation engine. We're in the process of replacing the XSL scripts that convert .docx to HTML with JavaScript and node.js.

Better fallbacks. While we've tried to make Bookmaker versatile, there are still some processes that are linked to Macmillan's internal workflow. We're working to build fallbacks so that you can use Bookmaker however you want, without getting a lot of errors.

Integrated testing. Test-driven development is very important. Bookmaker grew very quickly from a proof-of-concept to a minimum viable product, and integrated tests weren't included at those stages. However, now that Bookmaker is gaining more use internally, we need to add tests to make sure that as we add new features, we don't accidentally break any of the existing functionality.

Macmillan Publishers