java

Imprimir PDF directamente con Java

En este post te enseñaré cómo enviar un PDF (de internet o local) a una impresora usando el lenguaje de programación Java sin cuadros de confirmación ni diálogos.

De este modo serás capaz de imprimir un PDF de manera automática con Java usando herramientas gratuitas.

Descargando plugin y PDFtoPrinter

Para que esto funcione debemos descargarnos 2 herramientas gratuitas: el plugin PDF y PDFtoPrinter (una vez que abras ese enlace haz clic en download it here). Las mismas deben estar en la misma ubicación y solo debes ejecutar el plugin.

Es decir, debes tener a PDFtoPrinter.exe y plugin_pdf_prod_ARQUITECTURA.exe en la misma carpeta, y después de eso ejecutar plugin_pdf_prod_ARQUITECTURA.exe.

Comprueba que se está ejecutando en el administrador de tareas dentro de “Detalles”

Código Java

Una vez que te has asegurado de que el plugin está ejecutándose entonces puedes probar el siguiente ejemplo donde se imprime un PDF remoto a través de su URL; lo único que tenemos que hacer es hacer una petición GET local así:

public static void ejemploUrl() {
    Map<String, String> parametros = Map.of(
            "urlPdf", "https://parzibyte.github.io/plugin-silent-pdf-print-examples/delgado.pdf",
            "impresora", impresora,
            "serial", serial,
            "grados", grados
    );
    StringBuilder parametrosURL = new StringBuilder();
    parametros.forEach((clave, valor) -> {
        parametrosURL.append(URLEncoder.encode(clave, StandardCharsets.UTF_8))
                .append("=")
                .append(URLEncoder.encode(valor, StandardCharsets.UTF_8))
                .append("&");
    });
    String urlCompleta = direccionServidor + "/url?" + parametrosURL.toString();

    var request = HttpRequest.newBuilder().uri(URI.create(urlCompleta)).GET().build();
    var client = HttpClient.newHttpClient();
    try {
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        int statusCode = response.statusCode();
        String responseBody = response.body();
        System.out.println("Código de estado: " + statusCode);
        System.out.println("Respuesta: " + responseBody);
    } catch (Exception e) {
        System.out.println("Error haciendo petición. Asegúrese de que el plugin se está ejecutando:");
        e.printStackTrace();
    }
}

Fíjate en que al final solo estamos haciendo una petición a http://localhost:8080/url pasándole la URL del PDF, el nombre de la impresora, un serial opcional y la rotación de grados.

El PDF que voy a imprimir está en: https://parzibyte.github.io/plugin-silent-pdf-print-examples/delgado.pdf

Para ahorrar papel estoy imprimiendo con una impresora virtual y queda así:

PDF impreso con Java

Nota: yo estoy usando NetBeans pero puedes usar cualquier editor, al final lo que importa es el lenguaje de programación.

Obviamente esto funciona también con impresoras físicas, si quieres puedes revisar el ejemplo con JS para ver una foto de un ticket PDF impreso directamente.

Imprimir PDF local con Java

El mismo plugin te permite imprimir un PDF local, es decir, uno que se encuentre en la computadora del usuario.

Veamos el siguiente ejemplo en donde ahora hacemos una petición a http://localhost:8080/ pero ahora indicamos la ruta absoluta del PDF con el parámetro nombrePdf así:

public static void ejemploLocal() {
    Map<String, String> parametros = Map.of(
            "nombrePdf", "C:\\Users\\parzibyte\\Desktop\\delgado.pdf",
            "impresora", impresora,
            "serial", serial,
            "grados", grados
    );
    StringBuilder parametrosURL = new StringBuilder();
    parametros.forEach((clave, valor) -> {
        parametrosURL.append(URLEncoder.encode(clave, StandardCharsets.UTF_8))
                .append("=")
                .append(URLEncoder.encode(valor, StandardCharsets.UTF_8))
                .append("&");
    });
    String urlCompleta = direccionServidor + "/?" + parametrosURL.toString();

    var request = HttpRequest.newBuilder().uri(URI.create(urlCompleta)).GET().build();
    var client = HttpClient.newHttpClient();
    try {
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        int statusCode = response.statusCode();
        String responseBody = response.body();
        System.out.println("Código de estado: " + statusCode);
        System.out.println("Respuesta: " + responseBody);
    } catch (Exception e) {
        System.out.println("Error haciendo petición. Asegúrese de que el plugin se está ejecutando:");
        e.printStackTrace();
    }
}

De este modo tú decides cómo imprimir un PDF con Java, ya sea que el mismo se genere en internet, en tu servidor local o exista en la computadora del usuario.

Código completo

Si quieres revisar los imports y ver el código completo te lo dejo en GitHub: https://github.com/parzibyte/imprimir-pdf-java

Próximos pasos

Ya te mostré el plugin, ahora tú puedes integrarlo en cualquier lugar pues al final solo es un servidor web local. Te dejo con la documentación del plugin para PDF.

No olvides que con esto vas a poder imprimir en impresoras térmicas, virtuales o de tinta. También aprovecho para enseñarte a usar comandos ESC POS con Java.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Servidor HTTP en Android con Flutter

El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…

3 días hace

Imprimir automáticamente todos los PDF de una carpeta

En este post te voy a enseñar a designar una carpeta para imprimir todos los…

4 días hace

Guía para imprimir en plugin versión 1 desde Android

En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…

1 semana hace

Añadir tasa de cambio en sistema de información

Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…

2 semanas hace

Comprobar validez de licencia de plugin ESC POS

Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…

2 semanas hace

Imprimir euro € en impresora térmica

Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…

3 semanas hace

Esta web usa cookies.