How do I create an Excel document using Apache POI?

This example demonstrate how to create an Excel document using Apache POI library. In this example we create a simple document containing two sheets which have a value on their first cell.

package org.kodejava.poi;

import org.apache.poi.hssf.usermodel.*;

import java.io.FileOutputStream;
import java.io.IOException;

public class CreateExcelDemo {
    public static void main(String[] args) {
        // Creating an instance of HSSFWorkbook.
        try (HSSFWorkbook workbook = new HSSFWorkbook()) {

            // Create two sheets in the Excel document and name it First Sheet and
            // Second Sheet.
            HSSFSheet firstSheet = workbook.createSheet("FIRST SHEET");
            HSSFSheet secondSheet = workbook.createSheet("SECOND SHEET");

            // Manipulate the first sheet by creating an HSSFRow which represent a
            // single row in Excel sheet, the first row started from 0 index. After
            // the row is created we create a HSSFCell in this first cell of the row
            // and set the cell value with an instance of HSSFRichTextString
            // containing the words FIRST SHEET.
            HSSFRow rowA = firstSheet.createRow(0);
            HSSFCell cellA = rowA.createCell(0);
            cellA.setCellValue(new HSSFRichTextString("FIRST SHEET"));

            HSSFRow rowB = secondSheet.createRow(0);
            HSSFCell cellB = rowB.createCell(0);
            cellB.setCellValue(new HSSFRichTextString("SECOND SHEET"));

            // To write out the workbook into a file we need to create an output
            // stream where the workbook content will be written to.
            try (FileOutputStream fos = new FileOutputStream("CreateExcelDemo.xls")) {
                workbook.write(fos);
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Maven Dependencies

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.5</version>
</dependency>

Maven Central

How do I create a PDF document using iText PDF?

This example is the first example of the iText PDF series, we are going to start by learning to use the iText PDF library to create a PDF document. We will see how to use the Document class, getting an instance of PdfWriter, creating a simple Paragraph and set the text alignment and the font.

The basic steps to produce a PDF documents are:

  • Create a Document object that represents a PDF document.
  • The PdfWrite object that need the Document and an OutputStream object write the content of the PDF we added to the Document into a PDF file.
  • We add a paragraph into the Document instance using the Paragraph object.
  • Finally, we need to close the document by calling the Document.close() method.

And here is a code example that demonstrate the creation of a PDF document.

package org.kodejava.itextpdf;

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfWriter;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class DocumentCreate {
    public static void main(String[] args) {
        // Create a new document.
        Document document = new Document();
        try {
            // Get an instance of PdfWriter and create a HelloWorld.pdf
            // file as an output.
            PdfWriter.getInstance(document,
                    new FileOutputStream("HelloWorld.pdf"));
            document.open();

            // Create our first paragraph for the pdf document to be
            // created. We also set the alignment and the font of the
            // paragraph.
            String text = "Kode Java website provides beginners to Java " +
                    "programming some examples to use the Java API " +
                    "(Application Programming Interface) to develop " +
                    "applications. Learning from some examples will " +
                    "hopefully decrease the time required to learn " +
                    "Java.";
            Paragraph paragraph = new Paragraph(text);
            paragraph.setAlignment(Element.ALIGN_JUSTIFIED);
            paragraph.setFont(new Font(
                    Font.FontFamily.HELVETICA, 10, Font.NORMAL));

            document.add(paragraph);
        } catch (DocumentException | FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            document.close();
        }
    }
}

Maven Dependencies

<!-- https://search.maven.org/remotecontent?filepath=com/itextpdf/itextpdf/5.5.13.3/itextpdf-5.5.13.3.jar -->
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13.3</version>
</dependency>

Maven Central

How do I add query string to HttpMethod object?

To send query string information in HTTP GET command you either using passing a simple string or an array of NameValuePair object into the HttpMethod‘s setQueryString() method. We also need to encode the parameter values before passing it to the method.

package org.kodejava.commons.httpclient;

import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.util.URIUtil;
import org.apache.commons.httpclient.methods.GetMethod;

import java.io.IOException;

public class SendingQueryParameter {
    public static void main(String[] args) {
        HttpClient client = new HttpClient();
        HttpMethod method = new GetMethod("http://localhost:8080/hello.jsp");

        try {
            // Set query string information for accessing the page using a
            // simple string information.
            method.setQueryString(URIUtil.encodeQuery("catid=10&page=1"));
            client.executeMethod(method);

            // Other cleaner alternative is to use the NameValuePair object to
            // define the parameters for an HTTP GET method.
            NameValuePair param1 = new NameValuePair("catid", URIUtil.encodeQuery("20"));
            NameValuePair param2 = new NameValuePair("page", URIUtil.encodeQuery("2"));
            NameValuePair[] params = new NameValuePair[]{param1, param2};
            method.setQueryString(params);
            client.executeMethod(method);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            method.releaseConnection();
        }
    }
}

Maven Dependencies

<dependency>
    <groupId>commons-httpclient</groupId>
    <artifactId>commons-httpclient</artifactId>
    <version>3.1</version>
</dependency>

Maven Central

How do I set a proxy for HttpClient?

In this example you will see how to configure proxy when using the Apache Commons HttpClient library.

package org.kodejava.commons.httpclient;

import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.HostConfiguration;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.GetMethod;

import java.io.IOException;

public class HttpGetProxy {
    private static final String PROXY_HOST = "proxy.host.com";
    private static final int PROXY_PORT = 8080;

    public static void main(String[] args) {
        HttpClient client = new HttpClient();
        HttpMethod method = new GetMethod("https://kodejava.org");

        HostConfiguration config = client.getHostConfiguration();
        config.setProxy(PROXY_HOST, PROXY_PORT);

        String username = "guest";
        String password = "s3cr3t";
        Credentials credentials = new UsernamePasswordCredentials(username, password);
        AuthScope authScope = new AuthScope(PROXY_HOST, PROXY_PORT);

        client.getState().setProxyCredentials(authScope, credentials);

        try {
            client.executeMethod(method);

            if (method.getStatusCode() == HttpStatus.SC_OK) {
                String response = method.getResponseBodyAsString();
                System.out.println("Response = " + response);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            method.releaseConnection();
        }
    }
}

Maven Dependencies

<dependency>
    <groupId>commons-httpclient</groupId>
    <artifactId>commons-httpclient</artifactId>
    <version>3.1</version>
</dependency>

Maven Central

How do I perform HTTP GET method?

Below is an example using Commons HttpClient library to retrieve information from a website using HTTP GET method. The response will be returned as stream by the HttpMethod.getResponseBodyAsStream() method. If you want something simple you can get the response as string by using the HttpMethod.getResponseBodyAsString() method.

package org.kodejava.commons.httpclient;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;

import java.io.*;
import java.nio.charset.StandardCharsets;

public class HttpGetDemo {
    public static void main(String[] args) {
        HttpClient client = new HttpClient();
        HttpMethod method = new GetMethod("https://kodejava.org");

        try {
            client.executeMethod(method);

            if (method.getStatusCode() == HttpStatus.SC_OK) {
                InputStream is = method.getResponseBodyAsStream();

                if (is != null) {
                    Writer writer = new StringWriter();
                    char[] buffer = new char[1024];
                    try {
                        Reader reader = new BufferedReader(new InputStreamReader(is,
                                StandardCharsets.UTF_8));
                        int length;
                        while ((length = reader.read(buffer)) != -1) {
                            writer.write(buffer, 0, length);
                        }
                    } finally {
                        is.close();
                    }
                    System.out.println("Response = " + writer);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            method.releaseConnection();
        }
    }
}

Maven Dependencies

<dependency>
    <groupId>commons-httpclient</groupId>
    <artifactId>commons-httpclient</artifactId>
    <version>3.1</version>
</dependency>

Maven Central