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.
Modelo Vista Controlador (MVC) es un patrón de arquitectura de software que separa los datos de una aplicación, la inter[...]
En este proyecto realizaremos una aplicación de base de datos Firebird con el lenguaje de programación de Visual Basic d[...]
De las pocas herramientas disponibles entre librerías, frameworks, engines, etc para el desarrollo de videojuegos en len[...]
Microsoft acaba de lanzar Cascadia Code una fuente monoespaciada enfocada en proporcionar una mejor experiencia en conso[...]
En esta oportunidad aprovechando el interés que tienen ahora los superheroes de Marvel, crearemos un formulario de logue[...]
Información sobre la serie: Neon Genesis Evangelion (新世紀エヴァンゲリオン, también conocido como «Evangelion») es una serie de an[...]