Existen varias aplicaciones (free y de pago) que emulan una impresora virtual para generar archivos en PDF (Portable Document Format), uno de estos es Nitro PDF Creator el cual es uno de los más completos. Funciona como cualquier otra impresora real; Quieres imprimir un archivo, seleccionas el documento, seleccionas impresora, realizas los cambios de papel, margenes, color, calidad de imagen, etc para finalmente imprimir el documento.
En este post te muestro un pequeño código para automatizar en gran parte este trabajo, es decir, seleccionaremos automáticamente la impresora virtual ya que el sistema puede contener varios instalados y no necesariamente Nitro PDF estará configurada como la impresora por defecto; A continuación declaramos las propiedades que nos interesan configurar (tamaño de papel, calidad de impresión, cantidad de copias, etc), necesitamos también un listener para estar al tanto del trabajo con la impresora, finalmente indicamos el archivos de imagen que queremos imprimir.
import java.io.FileInputStream; import java.io.FileNotFoundException; import javax.print.Doc; import javax.print.DocFlavor; import javax.print.DocPrintJob; import javax.print.PrintException; import javax.print.PrintService; import javax.print.PrintServiceLookup; import javax.print.SimpleDoc; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet; import javax.print.attribute.standard.Copies; import javax.print.attribute.standard.JobName; import javax.print.attribute.standard.MediaSizeName; import javax.print.attribute.standard.OrientationRequested; import javax.print.attribute.standard.PrintQuality; import javax.print.event.PrintJobAdapter; import javax.print.event.PrintJobEvent; /** * @see https://www.jc-mouse.net/ * @author mouse */ public class NewMain { public static void main(String[] args) { //Obtiene todas las impresoras del sistema PrintService[] allPrintServices = PrintServiceLookup.lookupPrintServices(null, null); PrintService selectprinter = null; for (PrintService printService : allPrintServices) { //selecciona la impresora de PDF if (printService.getName().equals("Nitro PDF Creator (Pro 10)")) { selectprinter = printService; break; } } if (selectprinter != null) { DocPrintJob printerJob = selectprinter.createPrintJob(); //Propiedades de impresion PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); pras.add(new Copies(1));//numero de copias pras.add(MediaSizeName.NA_LETTER);//Tamaño de Papel pras.add(OrientationRequested.PORTRAIT);//Oientación de la hoja pras.add(PrintQuality.NORMAL);//Calidad de Impresio pras.add(new JobName("mi imagen", null)); //Listener PrintJobAdapter printJobAdapter = new PrintJobAdapter() { @Override public void printJobCompleted(PrintJobEvent e) {} @Override public void printDataTransferCompleted(PrintJobEvent e) { System.out.println("printDataTransferCompleted"); } @Override public void printJobRequiresAttention(PrintJobEvent e) {} @Override public void printJobFailed(PrintJobEvent e) {} }; printerJob.addPrintJobListener(printJobAdapter); FileInputStream fis; try { //Archivo de imagen fis = new FileInputStream("E:\\images\\esto_es_espartaaaaa_digo_Bolivia.jpg"); //Doc doc = new SimpleDoc(fis, DocFlavor.INPUT_STREAM.PNG, null); //Doc doc = new SimpleDoc(fis, DocFlavor.INPUT_STREAM.GIF, null); Doc doc = new SimpleDoc(fis, DocFlavor.INPUT_STREAM.JPEG, null); printerJob.print(doc, pras); } catch (PrintException | FileNotFoundException ex) { System.err.println(ex.getMessage()); } } else { System.out.println("Nitro PDF Creator (Pro 10) - NO DISPONIBLE"); } } }
Cuando ejecutemos el código anterior, se llamara la impresora virtual el cual pedira que se seleccione un lugar donde guardar el archivo PDF y después de unos segundos te mostrara el resultado.
SQLite es un sistema de gestión de bases de datos relacional, escrita en C, si se desea hacer uso de encriptación con S[...]
TextInput es una caja de texto que implementa el estilo de Material Design popular en dispositivos móviles, pero este sw[...]
La siguiente clase hace uso de PRINT para imprimir una imagen que se encuentra en un variable de tipo FileInputStream, e[...]
A veces navegando en la internet buscando novedades , investigando o simplemente perdiendo el tiempo 🙂 se encuentran cos[...]
El Ascii Art o Arte Ascii, consiste en realizar dibujos con los caracteres ASCII (Código Americano Estándar de Intercamb[...]
El Algoritmo de Aldous-Broder llamado así por dos matemáticos, David Aldous and A. Broder (quienes trabajaban en la inve[...]