- Java
- Java 8+
- Python
- 3.8+
Before installing tabula-py, ensure you have Java runtime on your environment.
You can install tabula-py from PyPI with pip
command.
pip install tabula-py
Note
conda recipe on conda-forge is not maintained by us. We recommend installing via pip
to use the latest version of tabula-py.
This instruction is originally written by @lahoffm. Thanks!
- If you don't have it already, install Java
- Try to run an example code (replace the appropriate PDF file name).
- If there's a
FileNotFoundError
when it callsread_pdf()
, and when you typejava
on command line it says'java' is not recognized as an internal or external command, operable program or batch file
, you should setPATH
environment variable to point to the Java directory. - Find the main Java folder like
jre...
orjdk...
. On Windows 10 it was underC:\Program Files\Java
- On Windows 10: Control Panel -> System and Security -> System -> Advanced System Settings -> Environment Variables -> Select PATH --> Edit
- Add the
bin
folder likeC:\Program Files\Java\jre1.8.0_144\bin
, hit OK a bunch of times. - On command line,
java
should now print a list of options, andtabula.read_pdf()
should run.
tabula-py enables you to extract tables from a PDF into a DataFrame, or a JSON. It can also extract tables from a PDF and save the file as a CSV, a TSV, or a JSON.
import tabula
# Read pdf into a list of DataFrame
dfs = tabula.read_pdf("test.pdf", pages='all')
# Read remote pdf into a list of DataFrame
dfs2 = tabula.read_pdf("https://github.com/tabulapdf/tabula-java/raw/master/src/test/resources/technology/tabula/arabic.pdf")
# convert PDF into CSV
tabula.convert_into("test.pdf", "output.csv", output_format="csv", pages='all')
# convert all PDFs in a directory
tabula.convert_into_by_batch("input_directory", output_format='csv', pages='all')
See example notebook for more detail. I also recommend reading the tutorial article written by @aegis4048 and another tutorial written by @tdpetrou.
Note
If you face some issues, we'd recommend trying tabula.app to see the limitation of tabula-java. Also, see faq
as well.