Tabula is a tool for liberating data tables trapped inside PDF files

License: MIT

Language: CSS

Keywords: csv, excel, pdf

Repo Note: The master branch is an in development version of Tabula that may or may not work. For stable, working code, please see releases or switch to a stable/ branch.

As of August 2015, the master branch uses tabula-java instead of tabula-extractor under the hood.


tabula master Build Status
tabula-extractor master Build Status

Tabula helps you liberate data tables trapped inside PDF files.

© 2012-2015 Manuel Aristarán. Available under MIT License. See and

Why Tabula?

If you’ve ever tried to do anything with data provided to you in PDFs, you know how painful this is — you can’t easily copy-and-paste rows of data out of PDF files. Tabula allows you to extract that data in CSV format, through a simple web interface (Check out this short screencast)

Caveat: Tabula only works on text-based PDFs, not scanned documents. If you can click-and-drag to select text in your table in a PDF viewer (even if the output is disorganized trash), then your PDF is text-based and Tabula should work.

Security Concerns?: Tabula is designed with security in mind. Your PDF and the extracted data never touch the net -- when you use Tabula, as long as your browser's URL bar says "localhost" or "", all processing takes place on your local machine. Tabula does download a list of Tabula versions from our server to alert you if Tabula has been updated (and we use hits to that list to count how often Tabula is being used); it also downloads a few badges and assets from the web.

Using Tabula

First, make sure you have a recent copy of Java installed. You can download Java here. Tabula requires a Java Runtime Environment compatible with Java 6 or Java 7. If you have a problem, check Known Issues first, then report an issue.

  • Windows

    Download from the download site. Unzip the whole thing and open the tabula.exe file inside. A browser should automatically open to . If not, open your web browser of choice and visit that link.

    To close Tabula, just go back to the console window and press "Control-C" (as if to copy).

  • Mac OS X

    Download from the download site. Unzip and open the Tabula app inside. A browser should automatically open to . If not, open your web browser of choice and visit that link.

    To close Tabula, find the Tabula icon in your dock, right-click (or control-click) on it, and press "Quit".

    Note: If you’re running Mac OS X 10.8 or later, you might get an error like "Tabula is damaged and can't be opened." We're working on fixing this, but click here for a workaround.

  • Other platforms (e.g. Linux)

    Download from the download site and unzip it to the directory of your choice. Open a terminal window, and cd to inside the tabula directory you just unzipped. Then run:

    java -Dfile.encoding=utf-8 -Xms256M -Xmx1024M -jar tabula.jar

If the program fails to run, double-check that you have Java installed and then try again.

Tabula binds to port 8080 by default. You can change it with the warbler.port property:

java -Dfile.encoding=utf-8 -Xms256M -Xmx1024M -Dwarbler.port=9999 -jar tabula.jar

Known issues

There are some bugs that we're aware of that we haven't managed to fix yet. If there's not a solution here or you need more help, please go ahead and report an issue.

  • Legacy Java Environment (SE 6) Is Required: (Mac): The Mac operating system recently changed how it packages the Java Runtime Environment. If you get this error, download Tabula's "large experimental" package. This package includes its own Java Runtime Environment and should work without this issue.

  • "Tabula is damaged and can't be opened" (Mac): If you’re running Mac OS X 10.8 or later, GateKeeper may prevent you from opening the Tabula app. Please see this GateKeeper page for more information.

    1. Right-click on and select Open from the context menu.
    2. The system will tell you that the application is "from an unidentified developer" and ask you whether you want to open it. Click Open to allow the application to run. The system remembers this choice and won't prompt you again.

    (If you continue to have issues, double-check the OS X GateKeeper documentation for more information.)

  • org.jruby.exceptions.RaiseException: (Encoding::CompatibilityError) incompatible character encodings: (Windows): Your Windows computer expects a type of encoding other than Unicode or Windows's English encoding. You can fix this by entering a few simple commands in the Command Prompt. (The commands won't affect anything besides Tabula.)

    1. Open a Command Prompt
    2. type cd and then the path to the directory that contains tabula.exe, e.g. cd C:\Users\Username\Downloads
    3. Change that terminal's codepage to Unicode by typing: chcp 65001
    4. Run Tabula by typing tabula.exe
  • A browser tab opens, but something other than Tabula loads there. Or Tabula doesn't start. It's possible another program is using port 8080, whichh Tabula binds to by default. You can try closing the other program, or change the port Tabula uses by running Tabula from the terminal with the warbler.port property:

    java -Dfile.encoding=utf-8 -Xms256M -Xmx1024M -Dwarbler.port=9999 -jar tabula.jar

Running Tabula from source (for developers)

  1. Download JRuby. You can install it from its website, or using tools like rvm or rbenv

  2. Download Tabula and install the Ruby dependencies. (Note: if using rvm or rbenv, ensure that JRuby is being used.

    git clone git://
    cd tabula
    gem install bundler
    gem install tabula-extractor
    bundle install

Then, start the development server:

bundle exec rackup

(If you get encoding errors, set the JAVA_OPTS environment variable to -Dfile.encoding=utf-8)

The site instance should now be viewable at .

You can a couple some options when executing the server in this manner:

TABULA_DATA_DIR="/tmp/tabula" \
bundle exec rackup
  • TABULA_DATA_DIR controls where uploaded data for Tabula is stored. By default, data is stored in the OS-dependent application data directory for the current user. (similar to: C:\Users\foo\AppData\Roaming\Tabula on Windows, ~/Library/Application Support/Tabula on Mac, ~/.tabula on Linux/UNIX)
  • TABULA_DEBUG prints out extra status data when PDF files are being processed. (false by default.)

Alternatively, running the server as a JAR file

Testing in this manner will be closer to testing the "packaged application" version of the app.

bundle exec rake war
java -Dfile.encoding=utf-8 -Xms256M -Xmx1024M -jar build/tabula.jar

Building a packaged application version

After performing the above steps ("Running Tabula from source"), you can compile Tabula into a standalone application:

Mac OS X

If you wish to share Tabula with other machines, you will need a codesigning certificate. Our distribution of Tabula uses a self-signed certificate, as noted above. See this section of build.xml for details. If you will only be running Tabula on the machine you are building it on, you may remove this entire block (lines 44-53).

To compile the app:

rake macosx

This will result in a portable "" archive (inside the build directory) for Mac OS X users.

Note that the Mac version bundles Java with the Tabula app. This results in a 98MB zip file, versus the 30MB zip file for other platforms, but allows users to run Tabula without having to worry about Java version incompatibilities.


You can build .exe files for the Windows target on any platform.

Download a 3.1.X (beta) copy of Launch4J.

Unzip it into the Tabula repo so that "launch4j" (with subdirectories "bin", etc.) is in the repository root.

(If you're building on a 64bit Linux, you may need to install 32bit libs like, in Ubuntu sudo apt-get install lib32z1 lib32ncurses5)


rake windows

This will result in a portable "" archive (inside the build directory) for Mac OS X users.

If you have issues, you can try building manually. (These commands are for OS X/Linux and may need to be adjusted for Windows users.)

# (from the root directory of the repo)
rake war
cd launch4j
ant -f ../build.xml windows

A "tabula.exe" file will be generated in "build/windows". To run, the exe file needs "tabula.jar" (contained in "build") in the same directory. You can create a .zip archive by doing:

# (from the root directory of the repo)
cd build/windows
mkdir tabula
cp tabula.exe ./tabula/
cp ../tabula.jar ./tabula/
zip -r9 tabula
rm -fr tabula


Interested in helping out? We'd love to have your help!

You can help by:

  • Reporting a bug.
  • Adding or editing documentation.
  • Contributing code via a Pull Request from ideas or bugs listed in the Enhancements section of the issues. see
  • Spreading the word about Tabula to people who might be able to benefit from using it.

Project Statistics

Sourcerank 8
Repository Size 98.2 MB
Stars 3,893
Forks 428
Watchers 163
Open issues 417
Dependencies 29
Contributors 15
Tags 21
Last updated
Last pushed

Top Contributors See all

Manuel Aristarán Jeremy B. Merrill Mike Tigas Travis Swicegood Brad Landers Casey Cesari Alistair McMillan Alex Byrnes gruntfarm Diego Peralta Marjorie Roswell Marcos Marado sinker Andy Boyle Justin Myers

Recent Tags See all

v1.1.0-beta.1 March 31, 2016
v1.0.1 September 15, 2015
v1.0.0 August 06, 2015
before-merging-java April 26, 2015
oldUI March 21, 2015
v0.9.7 January 31, 2015
v0.9.6 September 29, 2014
v0.9.5 May 25, 2014
v0.9.4 May 16, 2014
v0.9.4-beta.1 May 13, 2014
v0.9.3 January 18, 2014
v0.9.2.2 November 22, 2013
v0.9.2.1 November 21, 2013
v0.9.2 November 20, 2013
v0.9.2-alpha.3 July 25, 2013

Interesting Forks See all

Tabula is a tool for liberating data tables trapped inside PDF files
CSS - MIT - Last pushed - 5 stars
Tabula is a tool for liberating data tables trapped inside PDF files
JavaScript - MIT - Updated - 4 stars - 7 forks
Tabula is a tool for liberating data tables trapped inside PDF files
CSS - MIT - Updated - 1 stars
Tabula is a tool for liberating data tables trapped inside PDF files
CSS - MIT - Updated - 1 stars
Tabula is a tool for liberating data tables trapped inside PDF files
CSS - Published - 1 stars

Something wrong with this page? Make a suggestion

Last synced: 2017-11-24 18:27:01 UTC

Login to resync this repository