Xournal User's Manual

Version 0.3.1


Xournal is an application for notetaking, sketching, keeping a journal using a stylus. It is free software (GNU GPL) and runs on Linux (recent distributions) and other GTK+/Gnome platforms. It is similar to Microsoft Windows Journal or to other alternatives such as Jarnal and Gournal.

Xournal can be downloaded at http://math.mit.edu/~auroux/software/xournal/

Xournal aims to provide superior graphical quality (subpixel resolution) and overall functionality; however it lacks the collaborative features of Jarnal. Since Xournal is still in its early development stages, it may not be fully stable, and some features have not been implemented yet.

Table of contents


Getting started

Xournal's user interface is (hopefully) intuitive, and if you don't run into installation or tablet calibration issues, you'll probably be able to start taking notes without referring to this manual.
Here is a screenshot of the user interface (click to enlarge):

Refer the next few sections of this manual for more information about the various functionalities.


The drawing and selection tools

The pen

The pen is the default drawing tool in Xournal. It comes in a variety of colors (see the color toolbar buttons and the Color submenu of the Tools menu) and thicknesses (see the thickness toolbar buttons and the Pen Options submenu of the Tools menu).

The eraser

The eraser lets you erase what you have drawn. By default, stylus buttons 2 and 3 (mouse middle or right buttons) are mapped to the eraser tool.
The eraser comes in three different thicknesses (selected using the thickness toolbar buttons), and can operate in three different modes (Eraser Options submenu of the Tools menu):

The highlighter

Like the pen, the highlighter comes in a variety of colors (the default is yellow) and thicknesses. Use the color and thickness toolbar buttons to change these settings.

The ruler

The ruler is not a tool by itself, but rather a special operating mode of the pen and highlighter tools. When it is enabled, these tools paint line segments instead of curvy strokes. For simplicity, selecting the ruler when not in pen or highlighter mode automatically selects the pen.

Default tools

Each drawing tool (pen, eraser, highlighter) has a default setting (color, thickness, ...) associated to it. The "Default Pen", "Default Eraser", and "Default Highlighter" entries of the Tools menu select the appropriate tool and reset its settings to the defaults. The toolbar also includes a "Default" button which resets the currently selected drawing tool to its default settings, and a "Default Pen" button.
The "Set As Default" entry of the Tools menu takes the current settings of the currently selected drawing tool and makes them the new default.

Thickness buttons

These three buttons control the thickness of the current drawing tool (pen, eraser, or highlighter). The thickness can also be adjusted using the appropriate sub-menu of the Tools menu.

Rectangle selection

This tool lets you select a rectangular region of the current layer. All the strokes which are entirely contained within the rectangular region are selected. The selection can be moved within its page by clicking inside the selection rectangle and dragging the cursor. If the cursor is dragged to a different page, the selection will be moved to the topmost layer of that page.

The selection can be cut, duplicated, etc. (including to a different page or to a different journal) using the copy-paste toolbar buttons or the corresponding entries of the Edit menu.

Vertical space

This tool lets you insert or remove vertical space within the page: all the items of the current layer which lie entirely between the cursor position and the end of the page are moved up or down.

Note that the background, and items on other layers, are not affected. Also, if you insert too much vertical space, some items may fall below the bottom of the page and become invisible. These items are not lost: to retrieve them, either use the vertical space tool again to remove the excess vertical space, or change the page height to an appropriate value (using the "Paper Size" entry in the Journal menu).

If you drag the cursor below the bottom of the page (so that the entire block being moved has become invisible), the items will be moved to the next page (topmost layer); however, any items that were already present on the next page are left unchanged. Similarly, dragging the cursor above the top of the page so that the entire block being moved becomes invisible results in the items being moved to the previous page.

Undo and redo

All operations performed on the currently open journal (drawing, erasing, cut-and-paste; adding, deleting, and reformatting pages; etc.) can be undone and redone at will using the Undo and Redo toolbar buttons or the corresponding entries in the Edit menu.
There is no limit to the depth of the undo/redo stack. It is cleared only when you quit the application or open a new journal.

Button mappings

Stylus buttons 2 and 3 (mouse middle and right buttons) can be mapped to different tools using the appropriate submenus in the Options menu (whereas the Tools menu and the toolbar buttons affect the primary tool assigned to button 1). The default mapping is the eraser.

Advanced configuration: if a secondary button is mapped to a drawing tool (pen, eraser, or highlighter), the default is to "dynamically link" its settings to those of the primary tool, which means that each drawing tool has common settings (color, thickness, etc.) for all buttons. Dynamic linking of brush settings can be disabled by selecting the "Copy of current brush" option in the "Button mapping" submenu. The settings of the tool for button 2 or 3 are copied from the button 1 settings at the time when you select the option, and afterwards they are no longer updated when the button 1 settings are modified, thus making it possible to assign pens of different colors or thicknesses to different buttons.

Another option that affects button mappings is the "Eraser tip" option. If this option is turned on and the XInput extensions are enabled, then the eraser tip of your tablet's stylus will automatically be remapped to the eraser tool. This behavior, which overrides all other button mappings, is most useful if your X server is configured to map the eraser tip of your tablet's stylus to button 1.


Pages, layers, and backgrounds

A journal is composed of one or more pages, whose characteristics can be modified independently of each other. Each page consists of a background and one or more layers stacked on top of the background. All drawing operations take place within a single layer, and do not affect the background or the other layers. You can think of the layers as transparent overlays: drawing and erasing always takes place on the topmost visible overlay.
Layers are a convenient mechanism to add temporary annotations on top of a journal page: because of the logical separation between layers, erasing in the top layer will not affect the contents of the other layers, and the top layer can be easily discarded.

Navigating the journal

The user interface either displays all pages in the journal below each other ("continuous mode") or a single page ("one-page mode"). You can switch between the two modes by using the "Continuous" and "One page" entries in the View menu. The default is the continuous mode, best adapted to note-taking on multiple pages. The one-page mode is more appropriate if your journal is a scrapbook in which the pages have different characteristics (in particular, if you are annotating a series of pictures of different sizes).

You can navigate the journal pages in several different ways:

As a convenient shortcut, going forward one page (or pressing the + button in the selection box) when already at the end of the journal creates a new page at the end of the journal.

Note: jumping to a page automatically selects the top-most layer in that page.

To navigate the layers of a page, either use the layer selection box at the bottom of the Xournal window, or use the "Show Layer" and "Hide Layer" entries in the View menu. The basic rule to remember is that the display shows all the layers underneath the currently select one, and while those above it are hidden.

Note: the background layer cannot be drawn on; any attempt to draw on the background will generate an error message and switch back to the first layer.

Managing pages and layers

Pages can be added to the journal by using the "New Page ..." entries in the Journal menu. The newly created page has the same format and background as the current page (for the "New Page Before" and "New Page After" commands), or as the last page of the journal (for "New Page At End"). Additionally, jumping to the next page when already on the last page creates a new page at the end of the journal.

The "Delete Page" entry in the Journal menu removes the current page from the journal. (Remember that you can always undo this operation if you deleted a page by accident).

The "New Layer" entry in the Journal menu creates a new layer immediately above the current one, while "Delete Layer" removes the current layer and its contents (if you attempt to delete the only layer of a page, a new empty layer will be automatically created).

Paper formats and backgrounds

The size of the current page can be modified using the "Paper Size" entry in the Journal menu. Standard and custom sizes are available.

The background is either one of several kinds of standard paper types, or a bitmap image, or a page of a PDF file.

To select a standard paper type as background for the current page, use the "Paper Style" submenu of the Journal menu. The paper color can also be changed using the "Paper Color" submenu of the Journal menu.

To use a PDF file as the background for a journal, see the paragraph on PDF annotation below.

To load a bitmap image file for use as background for the current page, use the "Load Background" entry of the Journal menu. This automatically resizes the current page according to the size of the bitmap image, and resets the zoom level to 100%. If ghostscript is installed on your system, you can also use this method to import a fixed-resolution bitmap version of a Postscript or PDF file; in that case, all pages will be imported sequentially as backgrounds into consecutive pages (this is not the recommended method; PDF annotation is better in many respects).

To capture a screenshot of a window or the entire screen and make it the background of the current page, use the "Background Screenshot" entry of the Journal menu. This will iconify the Xournal window; click in any window (after ensuring it is fully visible) to capture its contents, or click on the desktop (or screen background) to capture the entire screen.

Important note: by default, bitmap images loaded using the "Load Background" command will not be saved with the journal; instead, the journal file will contain a reference to the absolute location of the image file. This means that the background will become unavailable if the image file is moved or deleted. To avoid this, check the option "Attach file to the journal" at the bottom of the file selection dialog box.
This option only applies to bitmap image files loaded from disk; screenshot backgrounds (and bitmaps converted from PS/PDF files using ghostscript) are automatically "attached" to the journal file: when the journal is saved, they will be saved (in PNG format) along with it (using file names of the form *.xoj.bg_*.png).

Rescaling and anti-aliasing: by default, bitmap backgrounds are rescaled and anti-aliased as needed when the zoom level is changed, to ensure their appearance always remains acceptable. Because this consumes a lot of memory and CPU resources, by default this rescaling is performed on-demand as each page becomes visible. This means that you will occasionally notice bitmap backgrounds being smoothed while you are scrolling inside the document (at large zoom levels, this can slow down the screen refresh rate noticeably). If you'd prefer all backgrounds to be rescaled immediately upon changing the zoom level (slower but maybe more intuitive), disable the "Progressive Backgrounds" option in the Options menu.
If you are handling large bitmaps, you can save memory and CPU resources (at the expense of quality) by disabling the "Antialiased Bitmaps" option in the Options menu.

PDF annotation

Xournal can be used to annotate PDF files, by loading the pages of a PDF file as backgrounds for a journal. This feature requires the pdftoppm converter to be installed (this is part of the xpdf  PDF file viewer).

The "Annotate PDF" command in the File menu can be used to load a PDF file into a new (empty) journal. The page backgrounds and page sizes correspond to the contents of the PDF file. (Most unencrypted PDF files should be supported).

By default, the PDF file used to generate the backgrounds will not be saved with the journal; instead, the journal file will contain a reference to the absolute location of this file. This means that all backgrounds will become unavailable if the PDF file is moved or deleted (although Xournal will let you specify the updated location of the PDF file when opening the journal file). To avoid this, check the option "Attach file to the journal" at the bottom of the dialog box when opening the PDF file. The PDF file will then be saved along with the journal (using a file name of the form *.xoj.bg.pdf).

Upon zooming, the page backgrounds are asynchronously updated to fit the current display resolution. Since this process is quite slow and memory-intensive, the pages are normally updated only as needed, when they become visible on the screen (unless you disable the "Progressive Backgrounds" option in the Options menu). This means that you will occasionally notice the page backgrounds being updated while you are scrolling inside the document (at large zoom levels, it can take a while for the updated background to appear). However, since the backgrounds are generated asynchronously by a separate Unix process, you can keep drawing in the journal while the update process is still in progress.

It is strongly recommended that you do not resize PDF pages (using the "Paper Size" command). This will result in extremely ugly rendering, as the PDF converter is unable to render bitmaps with non-standard aspect ratios.

While you can perform all sorts of page operations on a journal file that was created from a PDF file (such as duplicating or deleting pages, inserting pages with blank or bitmapped backgrounds, ...), it is not possible to include pages from more than one PDF file into a single journal document. If you need to annotate two or more PDF files inside a same journal document, please consider using an external utility for merging PDF files (for example pdfmerge).


Printing

Xournal uses the gnome-print architecture for printing. While it is very powerful, some aspects of the API leave to be desired. As of version 0.3, Xournal also includes a native PDF printing feature.

Printing via gnome-print

The "Printer" tab of the print dialog box lets you select a printer (either one of the printers installed on your system, or the generic Postscript printer, or the PDF virtual printer). The "Job" tab lets you select a range of pages to print (the default is to print the entire journal). The "Paper" tab lets you select the paper size. Each page of the journal is automatically rescaled so as to fit the paper size. (minus a 5% margin all around).

The settings are currently not saved properly from one print job to the next, so make sure to select the appropriate printer and verify the paper size. When printing to a file (Postscript or PDF), Xournal attempts to pre-fill the output file name (for the Postscript driver this often fails due to gnome-print API issues).

Note that the PDF virtual printer produces files that are very large and far from optimal, so its use is not recommended. The gnome-print architecture also forces page backgrounds (bitmaps and PDF) to be generated as uncompressed bitmaps, which leads to gigantic print job files. A better alternative is to export a PDF file, and print the PDF file.

Exporting to PDF

Starting with version 0.3, Xournal provides its own PDF rendering engine. The "Export to PDF" command (in the File menu) produces a PDF-1.4 file from the currently loaded document. The resulting PDF file is much more compact than those produced via gnome-print, and its pages have the same size as in Xournal. Highlighter strokes are rendered in a partially transparent manner (note however that applications such as xpdf and ghostview do not always handle PDF transparency properly).

Xournal also includes a PDF file parser compatible with PDF format version 1.4; the compression features of PDF 1.5 (Acrobat 6) are not supported. When exporting a document that uses PDF backgrounds, Xournal attempts to preserve most of the structure of the original PDF file (however, auxiliary data such as thumbnails, hyperlinks, and annotations are lost). If Xournal is unable to parse the PDF file, the backgrounds are converted to (compressed) bitmaps and a new PDF file is generated from scratch.


Author information, license, bug-reports

Xournal is written by Denis Auroux (auroux@math.mit.edu).
It is distributed under the GNU General Public License.

Feel free to contact me with bug reports and suggestions; I apologize in advance if I am unable to respond properly to some requests.

If you find a sequence of operations which crashes Xournal in a reproducible manner, please send detailed instructions on how to reproduce the crash. A core file may also be helpful.

Bug reports and suggestions can also be submitted on Xournal's SourceForge page.


Version history

Version 0.3.1 (August 3, 2006):

Version 0.3 (July 23, 2006):

Version 0.2.2 (June 5, 2006):

Version 0.2.1 (June 3, 2006):

Version 0.2 (January 29, 2006):

Version 0.1.1 (January 5, 2006):

Version 0.1 (January 2, 2006): initial release.

Features yet to be implemented:


The file format

Overall structure

Xournal stores its data in gzipped XML-like files. The gzipped data consists of a succession of XML tags describing the document. By convention, the first few lines contain a header in the following format:

<?xml version="1.0" standalone="no"?>
<title>Xournal document - see http://math.mit.edu/~auroux/software/xournal/</title>
<xournal version="..."/>
The <title> and <xournal> tags may only appear within the file header (not within the pages of the document). The version attribute of the <xournal> tag indicates which version of Xournal was used to create the document; it is currently ignored, but may be used in a later release if the file format changes in an incompatible manner.

The rest of the file is a sequence of pages, specified by a <page> tag, whose attributes width and height specify the physical size of the page in points (1/72 in). The width and height parameters are floating point values. The format of a page is therefore:

<page width="..." height="...">
... page contents ...
</page>

Page background

The first entry within a page describes the page background. It consists of a <background> tag followed by several mandatory XML attributes. The first attribute is always type, which can take three possible values: "solid" for a solid background, "pixmap" for a bitmap background, and "pdf" if the background is a page of a PDF document. The rest of the attributes depends on the type of background.

Layers and strokes

After the line specifying the background, the remainder of a <page> section is occupied by one or more layer sections

<layer> ... </layer>
describing the various strokes within a layer. Every page must contain at least one layer; a layer may be empty. The successive layers are listed in their stacking order, from bottom to top.

A layer consist of a collection of items, listed in the order in which they should be drawn (from bottom-most to top-most). As of the current version, the only legal contents within a layer are strokes. The format of a stroke is:

<stroke tool="..." color="..." width="...">
... list of coordinates ...
</stroke>
The tool attribute can take the values "pen", "highlighter", or "eraser" depending on the tool used to create the stroke (pen, highlighter, or whiteout eraser); a value of "highlighter" indicates that the stroke should be painted in a partially transparent manner (Xournal uses an alpha coefficient of 0.5). The color attribute can take one of the standard values "black", "blue", "red", "green", "gray", "lightblue", "lightgreen", "magenta", "orange", "yellow", "white", or can specify a hexadecimal RGBA value in the format "#rrggbbaa". The width attribute is a floating-point number and specifies the width of the stroke in points (1/72 in).

The list of coordinates is simply a succession of floating-point values, separated by whitespace. The number of given values must be even; consecutive pairs of values give the x and y coordinates of each point along the stroke. These values are expressed in points (1/72 in). The coordinates (0,0) represent the top-left corner of the page: hence x is measured from the left of the page, and y is measured from the top of the page.

Every stroke must contain at least two points (four floating point values). Moreover, two consecutive points on the stroke should be spaced no more than 5 units apart or so; longer line segments should be subdivided as appropriate (otherwise the eraser tool will not interact properly with the stroke). The default precision used by Xournal for the x,y coordinates is 0.01 unit (1/7200 in).


Installation issues

Dependencies

The following libraries are required to run Xournal (they are standard on modern Linux distributions such as Fedora Core 3 or later, or RHEL 4 or later):

Additionally:

To compile Xournal, you also need the development packages for the above libraries (packages gtk2-devel, libgnomecanvas-devel, libgnomeprint22-devel, libgnomeprintui22-devel, and dependencies), as well as autoconf and automake.

Compilation and installation procedure

Download the Xournal distribution tar.gz file, and any needed dependencies.

Binary installation in /usr/local:
Run (as root) the installer script

./install-binary
(and upgrade GTK+ and the other libraries if needed).

Binary installation in home directory:
Run (as any user) the installer script

./install-binary
(and hope that the required libraries are installed on your system).

Compilation and installation in /usr/local:

./autogen.sh
make
(as root) make install

Compilation and installation in $HOME:

./autogen.sh
./configure --prefix=$HOME
make
make install

Configure error message:
If autogen.sh generates the error message     configure: error: Library requirements (gtk+-2.0 >= 2.4.0 libgnomecanvas-2.0 >= 2.4.0 libgnomeprintui-2.2 >= 2.0.0) not met     even though you have sufficiently recent versions of these libraries on your system, then you need to install some missing development packages.


Tablet calibration issues

Configuring the tablet devices properly is unfortunately not as simple as it ought to be. This is a subject worthy of a detailed how-to document; meanwhile, here are some hints about how to configure your tablet.

Basics

Xournal uses the XInput extension to obtain high-resolution coordinates for strokes drawn using the stylus. If you decide that getting just the right XInput configuration isn't worth the effort, you can disable XInput features by unsetting the "Use XInput" option in the Options menu. The price to pay is a lower graphics quality, as the resolution of all strokes then drops to 1 pixel (instead of the native resolution of the tablet device, which can be higher by several orders of magnitude).

The configuration of tablet devices is controlled in the X server's configuration file (usually XF86Config or xorg.conf depending on your distribution). The ServerLayout section should contain lines like:

Section "ServerLayout"
        ...
        InputDevice    "cursor" "SendCoreEvents"
        InputDevice    "stylus" "SendCoreEvents"
        InputDevice    "eraser" "SendCoreEvents"
EndSection
(the last one only if your stylus has an eraser tip), and your configuration file should include sections such as
Section "InputDevice"
        Identifier "cursor"
        Driver "wacom"
        Option "Device" "/dev/ttyS0"
        Option "Type" "cursor"
        Option "ForceDevice" "ISDV4"
        Option "BottomX" "28800"
        Option "BottomY" "21760"
        Option "Mode" "absolute"
EndSection

Section "InputDevice"
        Identifier "stylus"
        Driver "wacom"
        Option "Device" "/dev/ttyS0"
        Option "Type" "stylus"
        Option "ForceDevice" "ISDV4"
        Option "BottomX" "28800"
        Option "BottomY" "21760"
        Option "Mode" "absolute"
EndSection

Section "InputDevice"
        Identifier "eraser"
        Driver "wacom"
        Option "Device" "/dev/ttyS0"
        Option "Type" "eraser"
        Option "ForceDevice" "ISDV4"
        Option "BottomX" "28800"
        Option "BottomY" "21760"
        Option "Mode" "absolute"
EndSection
The actual settings will depend on your hardware; look on the web for Linux installation instructions specific to your model: for example, the "Device" settings above correspond to a serial port protocol, many tablets use USB instead; the BottomX and BottomY values correspond to the physical resolution of the tablet and will vary from one model to another.

The cursor doesn't appear in the right place...

If the mouse pointer does not follow accurately the position of the stylus, this is an indication that your tablet is not properly calibrated. If you have the linuxwacom package, you can try modifying the tablet calibration using xsetwacom. The relevant parameters are named TopX, BottomX, TopY, BottomY, and need to be set separately for the stylus and for the eraser. For example:

    xsetwacom set stylus TopX 270
    xsetwacom set stylus BottomX 28510
    ...
(the TopX and TopY parameters default to 0 if you haven't set them in your X server's configuration file). Experiment with these parameters until you find the right calibration settings for your tablet (i.e., the mouse pointer appears right under the tip of the stylus).

Once you have found the perfect settings for your tablet, update your X server's configuration file (due to issues with some versions of the linuxwacom driver, the tablet calibration information is often not updated properly when using xsetwacom).

Important: due to issues with the linuxwacom driver, it is important to either upgrade your driver to a patched version, or restrict your choice of settings as follows:

Strokes aren't drawn under the cursor...

This is due to misfeatures in the linuxwacom driver. Typically, this will happen in all of the following cases:

Future versions of the driver may fix these issues. Meanwhile, you can either disable XInput support in Xournal (in the Options menu), at a price of a severe loss of resolution (and the eraser tip won't be detected anymore), or apply this patch to the wacom driver.

I have also had a report that one of the workarounds used by Xournal to bypass a calibration bug in GTK+ can actually entirely prevent strokes from being drawn. If you are being unsuccessful at drawing in Xournal with XInput enabled, try recompiling after changing the first line of src/main.c to

#define ENABLE_XINPUT_BUGFIX 0
If this modification does improve things for you, and if you have a bit of spare time to help investigate the causes of this problem, please contact me.

On-the-fly display rotation

You need an X server that supports the RANDR extension, and a patched version of the linuxwacom driver to support on-the-fly rotation.

To set the tablet in portrait mode:

  xrandr -o 3
  xsetwacom set stylus Rotate cw
To return to landscape mode:
  xrandr -o 0
  xsetwacom set stylus Rotate none
Note: you should not rotate the display while Xournal is running, otherwise the tablet calibration in Xournal may (and most likely will) become incorrect. Exit Xournal and restart it after the display has been rotated.

Linuxwacom patch for calibration and rotation

This patch fixes rotation and calibration issues with the linuxwacom driver version 0.7.0.