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í:
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.
me gustaria intecambiar palabras con UD…
tema programacion JAVA…
estoy aprendiendo..
gracias
saludos cordiales
Hola. Claro que sí, envíeme un mensaje en https://parzibyte.me/#contacto