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.
Sourcetrail el explorador de código fuente de los lenguaje C, C ++, Java y Python se pasa al Software Libre y desde ahor[...]
Integrar Python en proyectos Laravel puede ser bastante útil para tareas específicas donde Python destaca y PHP se queda[...]
Las estructuras de control de Shell son muy parecidos a otras lenguajes de programación. Las estructuras disponibles en[...]
Cuando utilizamos aplicaciones web con conexión a base de datos MYSQL, se suele crear una clase que gestione la interacc[...]
Launch4j es un software OpenSource hecho en Java que permite crear ejecutables para programas escritos en ese mismo leng[...]
Agregar una imagen a un jpanel o a un jframe no es complicado pero para un programador novato puede convertirse en todo[...]