Sample code for 30+ languages & platforms
Java Requires Chilkat v11.7.0+

Extract Text from a Two-Column PDF

See more PDF Text Extraction Examples

Demonstrates how multi-column pages are read. By default the columns are detected and each column is read top to bottom before the next ("columns": "auto"); "columns": "none" reads the full page width line by line, which interleaves the columns. The quality report tells how many columns were found.

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.JsonObject;
import com.chilkatsoft.chilkat2.Pdf;

public class ChilkatExample {

    public static void main(String[] args) {
        // This example requires the Chilkat API to have been previously unlocked.
        // See Global Unlock Sample for sample code.

        // The two-column PDF used in this example is available at two_column_article.pdf

        Pdf pdf = new Pdf();
        try {
            pdf.loadFile("qa_data/pdf/two_column_article.pdf");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        JsonObject json = new JsonObject();
        JsonObject jsonOut = new JsonObject();

        // With the default options the columns are detected, and the text of the left column
        // comes before the text of the right column.
        try {
            pdf.extractText("text", json, jsonOut);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        System.out.println("Columns detected: " + jsonOut.intOf("quality.pages[0].columns"));
        System.out.println("Reading order: " + jsonOut.stringOf("quality.pages[0].readingOrderSource"));
        System.out.println(jsonOut.stringOf("text"));

        // "none" switches column detection off: the page is read across its full width, line by line,
        // so each output line holds a line of the left column followed by a line of the right column.
        // This is rarely wanted, but it shows what the detection does.
        json.updateString("columns", "none");
        json.updateString("layout", "lines");
        try {
            pdf.extractText("text", json, jsonOut);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        System.out.println("---- columns: none ----");
        System.out.println(jsonOut.stringOf("text"));

        // Sample output (abbreviated):

        // Columns detected: 2
        // Reading order: visual
        // The Harbor Lighthouse, Season Two
        //
        // The harbor lighthouse was built in 1874 to mark the entrance to the inner channel. It operated continuously until 1968, ...
        //
        // The restoration society took ownership in 2021 with three goals: ...
        // ...
        // The lantern room frame was stripped, primed and repainted in the original dark green. ...
        // ...
        // ---- columns: none ----
        // The Harbor Lighthouse, Season Two
        // The harbor lighthouse was built in 1874 to The lantern room frame was stripped, primed
        // mark the entrance to the inner channel. It and repainted in the original dark green. New
        // ...
    }
}