Impresion
Tengo un componente swing, cuando este se despliega en la pantalla se imprime muy bien, si no lo despliego, se imprime una hoja en blanco... ¿Alguna ida?
public class MiImpresion extends javax.swing.JPanel implements Printable{
public MiImpresion(){
///ARMO lo que quiero imprimir
....
....
// JFrame ventana = new JFrame();
// ventana.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
// ventana.setSize(miPanel.getMaximumSize());
this.setVisible(true);
// this.setSize(ventana.getSize());
// ventana.add(this);
// ventana.setVisible(true);
}
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
RepaintManager mgr = RepaintManager.currentManager(this);
Graphics2D g2d = (Graphics2D) graphics;
mgr.setDoubleBufferingEnabled(false); // only for swing components
paint(g2d);
mgr.setDoubleBufferingEnabled(true);
g2d.scale(.5, .5);
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
this.printAll(graphics);
if (pageIndex > 0) {
return NO_SUCH_PAGE;
}
return PAGE_EXISTS;
}
}
Si descomento lo referente al JFrame se imprime, si no no, incluso si descomento lo del JFrame pero no lo hago visible no seimprime nada...
y lo único que se imprime es lo que queda visible en pantalla.
saludos
- Inicie sesión o regístrese para enviar comentarios
Resuelto
graphics.CreateGraphics me da la opción de generar un Graphics a partir del original, con ese que se cra genero el g2d, el que se crea debe tener la dimensión de lo que se va a imprimir, a partir de eso lo demás ya es "comer y bailar"... se usa el nuevo Graphics en vez del antiguo para imprimir y listo!!!
Saludos
Si no quedó claro me avisan y posteo el código...
A mi si me gustaría que
A mi si me gustaría que postearas el código con tú solución, para que quede para la posteridad... si no es mucho pedir, entre tags de < code >
código
Claro... ahi les va. La idea es imprimir una página de un PDF y que aunque esta no esté originalmente en tamaño carta hacerla que quede en tamaño carta..
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jpedal.PdfDecoder;
import org.jpedal.exception.PdfException;
/// La clase es un panel para tener una clase que dibue todo y poder mandarla a imprimir, puede ser cualquier contenedor
public class ImpresionPDF extends javax.swing.JPanel implements Printable {
private String documento;
private PdfDecoder decoder; //Realmente este es el obeto que terminaremos imprimiendo
/** Creates new form ImpresionPDF */
public ImpresionPDF() {
initComponents();
}
public ImpresionPDF(String docAbrir, int paginaImprimir) {
initComponents();
this.documento = docAbrir;
PdfDecoder pdfDecoder = new PdfDecoder(true);
PdfDecoder.setFontReplacements(pdfDecoder);
try {
pdfDecoder.openPdfFile(documento); //Abrimos el documento
} catch (PdfException ex) {
Logger.getLogger(ImpresionPDF.class.getName()).log(Level.SEVERE, null, ex);
}
pdfDecoder.setPageParameters((float) 2.66, paginaImprimir); //values scaling (1=100%). page number Lo escalamos a 266% para asegurar una buena calidad de impresión, si lo dejásemos en 100% la impresión a 72 dpi sería muy pobre
try {
pdfDecoder.decodePage(paginaImprimir);//Mostramos la página a imprimir
} catch (Exception ex) {
Logger.getLogger(ImpresionPDF.class.getName()).log(Level.SEVERE, null, ex);
}
pdfDecoder.invalidate();
this.setBackground(Color.WHITE);
//this.add(pdfDecoder);
pdfDecoder.setVisible(true);
decoder = pdfDecoder;
decoder.setLocation(new Point(0, 0));
decoder.setBounds(0, 0, decoder.getMaximumSize().width, decoder.getMaximumSize().height);
this.setSize(pdfDecoder.getMaximumSize());
this.add(decoder);
this.setVisible(true);
}
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
Graphics2D g2d = (Graphics2D) graphics.create(0, 0, decoder.getMaximumSize().width, decoder.getMaximumSize().height); //En un nuevo Graphics
decoder.printComponents(g2d); //imprimir usando el nuevo Graphics y no el que nos mandaron
g2d.scale((float) ((float) (8.5 * 72) / (float) decoder.getMaximumSize().width), //Ajustar a hoja carta
(float) ((float) (11 * 72) / (float) decoder.getMaximumSize().height));
decoder.printAll(g2d); //Aquí es donde realmente se manda a la impresora
if (pageIndex > 0) {
return NO_SUCH_PAGE;
}
return PAGE_EXISTS;
}
/// Lo que sigue es generado por NetBeans
/** 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() {
setDoubleBuffered(false);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
);
}// </editor-fold>
// Variables declaration - do not modify
// End of variables declaration
}