package pruebaimpresion;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.*;
import java.net.ConnectException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import javax.print.*;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.MediaPrintableArea;
import javax.print.attribute.standard.OrientationRequested;
/**
*
* @author nn
*/
public class DemoFrame extends javax.swing.JFrame implements Printable {
/**
* Creates new form DemoFrame
*/
public DemoFrame() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButton1.setText("jButton1");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jTextArea1.setColumns(20);
jTextArea1.setRows(5);
jScrollPane1.setViewportView(jTextArea1);
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(209, 209, 209)
.addComponent(jButton1)
.addContainerGap(226, Short.MAX_VALUE))
.addComponent(jScrollPane1)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jButton1)
.addGap(18, 18, 18)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 168, Short.MAX_VALUE)
.addContainerGap())
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(27, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
String urlStatic = "http://dominio/pdf_remoto.pdf";
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try {
//System.getSecurityManager().checkPermission(new SocketPermission("192.168.1.3", "connect,resolve"));
ejecutarImpresion();
//otroprint();
} catch (Exception e) {
e.printStackTrace();
//JOptionPane.showMessageDialog(null, e.getMessage(), "Error", JOptionPane.INFORMATION_MESSAGE);
System.out.println("error " + e.getMessage());
jTextArea1.append("\nError imprimiendo: " + e.getMessage());
}
}
private void ejecutarImpresion() throws ImpresoraException, PrinterException, PrintException, FileNotFoundException, IOException, Exception {
// byte[] buffer = leerPDF();
InputStream is = leerPDF();
// //Pruebo a escribirlo
// FileOutputStream fos1 = new FileOutputStream("C:/tmp/download2.pdf");
// //FileOutputStream fos1 = new FileOutputStream("/tmp/download2.pdf");
// fos1.write(buffer, 0, buffer.length);
// fos1.flush();
// fos1.close();
// jTextArea1.append("\nescribio archivo");
//
int unidad = MediaPrintableArea.MM;
float w = 80;
float h = 43;
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(new Copies(1));
aset.add(new MediaPrintableArea(0, 0, w, h,
unidad));
// Orientación
OrientationRequested orientation = OrientationRequested.PORTRAIT;
aset.add(orientation);
// DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;//PDF;
DocFlavor psInFormat = DocFlavor.INPUT_STREAM.AUTOSENSE;
//INPUT_STREAM myFormat = javax.print.DocFlavor.INPUT_STREAM.AUTOSENSE;
//Para impresion sin dialogo
// PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null);
// if (PrintServiceLookup.lookupDefaultPrintService() != null) {
// //DocPrintJob printJob = services[0].createPrintJob();
// DocPrintJob printJob = PrintServiceLookup.lookupDefaultPrintService().createPrintJob();
//
// if (!PrintServiceLookup.lookupDefaultPrintService().isDocFlavorSupported(psInFormat)) {
// System.err.println("The printer does not support the appropriate DocFlavor");
// jTextArea1.append("\nThe printer does not support the appropriate DocFlavor.");
// }
// jTextArea1.append("\nImpresora-> " + PrintServiceLookup.lookupDefaultPrintService().getName());
// //Doc document = new SimpleDoc(buffer, flavor, null);
// Doc document = new SimpleDoc(is, psInFormat, null);
// printJob.print(document, null);
// } else {
// jTextArea1.append("\nNo PDF printer available.");
// System.out.println("No PDF printer available.");
// }
//Para impresion con dialogo.
PrintService printService[] =
PrintServiceLookup.lookupPrintServices(null, null);
PrintService defaultService =
PrintServiceLookup.lookupDefaultPrintService();
PrintService service = ServiceUI.printDialog(null, 200, 200,
printService, defaultService, psInFormat, aset);
if (service != null) {
DocPrintJob job = service.createPrintJob();
DocAttributeSet das = new HashDocAttributeSet();
Doc doc = new SimpleDoc(is, psInFormat, null);
job.print(doc, null);
}else {
jTextArea1.append("\nNo PDF printer available.");
System.out.println("No PDF printer available.");
}
}
public InputStream leerPDF() throws IOException, Exception {
URL url1 = new URL(urlStatic);
// byte[] ba1 = new byte[1024];
// int baLength;
ArrayList<Byte> lista = new ArrayList<Byte>();
try {
// Contacting the URL
System.out.print("Connecting to " + url1.toString() + " ... ");
URLConnection urlConn = url1.openConnection();
// Checking whether the URL contains a PDF
if (!urlConn.getContentType().equalsIgnoreCase("application/pdf")) {
System.out.println("Peligro.\n[Sorry. This is not a PDF.]");
jTextArea1.append("\nPeligro.\n[Sorry. This is not a PDF.] " + urlConn.getContentType());
} else {
}
try {
// Read the PDF from the URL and save to a local file
InputStream is1 = url1.openStream();
// ByteArrayOutputStream tmpOut = new ByteArrayOutputStream();
//
// byte[] buf = new byte[512];
// int len;
// while (true) {
// len = is1.read(buf);
// if (len == -1) {
// break;
// }
// tmpOut.write(buf, 0, len);
// }
// tmpOut.close();
// is1.close();
// Load the PDF document and display its page count
System.out.print("DONE.\nProcessing the PDF ... ");
jTextArea1.append("\nDONE.\nProcessing the PDF ... ");
// return tmpOut.toByteArray();
return is1;
} catch (ConnectException ce) {
ce.printStackTrace();
jTextArea1.append("\nError leyendo pdf: " + ce.getMessage());
//JOptionPane.showMessageDialog(null, ce.getMessage(), "Error", JOptionPane.INFORMATION_MESSAGE);
System.out.println("FAILED.\n[" + ce.getMessage() + "]\n");
}
} catch (NullPointerException npe) {
npe.printStackTrace();
jTextArea1.append("\nError leyendo pdf2: " + npe.getMessage());
//JOptionPane.showMessageDialog(null, npe.getMessage(), "Error", JOptionPane.INFORMATION_MESSAGE);
System.out.println("FAILED.\n[" + npe.getMessage() + "]\n");
}
return null;
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/*
* Set the Nimbus look and feel
*/
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/*
* If Nimbus (introduced in Java SE 6) is not available, stay with the
* default look and feel. For details see
*
http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(DemoFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(DemoFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(DemoFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(DemoFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/*
* Create and display the form
*/
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new DemoFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jTextArea1;
// End of variables declaration
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
if (pageIndex > 0) { /*
* We have only one page, and 'page' is zero-based
*/
return NO_SUCH_PAGE;
}
/*
* User (0,0) is typically outside the imageable area, so we must
* translate by the X and Y values in the PageFormat to avoid clipping
*/
Graphics2D g2d = (Graphics2D) graphics;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
graphics.setColor(Color.decode("0x000000"));
/*
* Now we perform our rendering
*/
graphics.drawString("Hola", 2, 10);
graphics.drawString("mundo", 2, 50);
/*
* tell the caller that this page is part of the printed document
*/
return PAGE_EXISTS;
}
private void otroprint() {
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(this);
boolean ok = job.printDialog();
if (ok) {
try {
job.print();
} catch (PrinterException ex) {
jTextArea1.append("\nError " + ex.getMessage());
System.out.println("ERR");/*
* The job did not successfully complete
*/
}
}
}
}