Tuesday, June 10, 2008

Command-line PDF bookmarks editor

Hi all, i wrote a command line utility program called jpdfbookmarks to add bookmarks to an existing pdf file.
I could not find anything easy and free on the net for this simple task, so i decided to write my own and now i'm going to publish it here, for those who need the same functionality.

This is a java program and i have packaged it to an installer for linux users, but should work with any operating system as long as you have installed a java runtime environment version 5 or later. If you don't have it or you are unsure you have it go to sun java site and check.

It' is very simple and not features rich but is really straightforward to understand its usage. First you have to create a simple text file which will represent the structure of your bookmarks using your favorite plain text editor, each line of text is a bookmark item written in the form:

Chapter 1. The Beginning/3
Para 1.1 Child of first level/5
Para 1.1.2 Child of second level/9
Para 1.2 Another Child of first level/14
Chapter 2. The Continue/27

where the part on the left of the / is the title of the bookmark and the part on the right is the target page of the bookmark. Text indentation represents the hierarchy of the outlines and must be obtained with "tab characters" (spaces will not work). Each bookmark will point to the top of the page indicated in its line, there is no way to point to another position in the page at present time. Once you have the file, save it to the same folder where you have the pdf file it refers to with a name like bookmarks.txt, then assuming that the original pdf name is input.pdf and that we want to save modified pdf as output.pdf, launch the command:
jpdfbookmarks --apply input.pdf bookmarks.txt output.pdf

If output.pdf already exists or if you indicate input.pdf as ouput file, the program will print a warning and ask for confirmation before overwriting, i suggest that you never overwrite existing files to avoid loss of data as this program is not tested enough, so please be carefull and write always to a new file, i will not fill responsible for any data corruption you eventually will experience.
If your original pdf file already have bookmarks they will be erased and substituted by the new ones, if you want to preserve or use them as the base of your bookmarks.txt file you can use the command:

jpdfbookmarks --dump input.pdf > bookmarks.txt

After this command you can open bookmarks.txt with your editor to modify it before applying it again to the pdf.

If you need a quick help during your work use the command:

jpdfbookmarks --help

The esiest way to install the program on Linux should be to download the Linux installer from the link below and afer giving it execution permissions double click it in your desktop environment, the installer will prompt you for the root password and guide you through the installation, it works fine on my ubuntu laptop but if you have problems on your machines post here and hope for some help.
An alternative if you have problems on linux with the installer or if you want to use the program on other operating systems, is to download the zip archive, again from the link below, and extract it where you prefer. In this case to use the program you have to open a terminal inside the directory where you have extracted, copy there the files you are working on and launch the commands like the following example:

On Linux:

./jpdfbookmarks --apply input.pdf bookmarks.txt output.pdf

./jpdfbookmarks --dump input.pdf > bookmarks.txt

On all systems:

java -jar jpdfbookmarks.jar --apply input.pdf bookmarks.txt output.pdf
java -jar jpdfbookmarks.jar --dump input.pdf > bookmarks.txt
or if your desktop recognizes jar files as executables you may try:

jpdfbookmarks.jar --apply input.pdf bookmarks.txt output.pdf
jpdfbookmarks.jar --dump input.pdf > bookmarks.txt


The program is freeware and the license for it and for the libraries it uses are distributed and installed with it. If you find this program useful, want to suggest something or signal a bug please post here, i will appreciate your contribution.