es para Imprimir, necesito que cuando llegue a la parte de abajo siga escribiendo el la siguiente pagina, quien escribe de esa forma es el book. por ahora le envio this.. y me imprime todo lo que hay en la ventana, por eso cuando se corre coloca en las dos paginas lo mismo... habría que dejarlo mas genérico osea que cuando llegue a abajo la ultima linea que se dibuja en el graphics si no cabe en esa pagina se escriba o siga escribiendo en la siguiente pagina... PARA REALIZAR LAS PRUEBAS: se elige .pdf en la seleccion normalemente de impresora y hay sale el documento en .pdf como si se hubiera impreso, (si ya creo uno debe cerrarlo parapoderlo reemplazar si se hace otra prueba).....
public class PruebaImpresion extends JFrame implements Printable{
private int m_width; //son para capturar y enviar los textos a el Graphics 2d del metodo print(Graphics,PageFormat,IndicePagina). private String textoMacro,textoMicro,textoDiagnostico; private AttributedCharacterIterator iteratorMacro,iteratorMicro,iteratorDiag; private int start_macro,startmicro,startDiag; private int endMacro,endMicro,endDiag;
//esta variable es la que se va comparando para acomodar la posición de y static int inc = 120;
static int margenDerecho=20;
public PruebaImpresion() { setSize(600,600); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); } float tamanioPapelAlto; float tamanioPapelAncho; //este es el que imprime todo basicamente es quien da la orden de inprimir PrinterJob printerJob; //da formato a las paginas PageFormat pf; //libro que hace varias paginas Book book; //permiter definir los parametros para el papel Paper paper;
/** *Metodo para imprimir */ public void imprime(){ printerJob = PrinterJob.getPrinterJob(); pf=printerJob.pageDialog(printerJob.defaultPage()); book= new Book(); /// acase coloca el book o lo que va a colocar en el documento for (int i = 0; i < 2; i++) { book.append(this, pf); } //aca se inicializa el tamaño del papel paper= new Paper(); paper.setSize(612.0, 832.0); double margin=margenDerecho; paper.setImageableArea(margin, margin, paper.getWidth()-margin, paper.getHeight()-margin); tamanioPapelAlto= (float)paper.getHeight(); tamanioPapelAncho=(float) paper.getWidth();
System.out.println("tamaño papel alto: "+tamanioPapelAlto +" tamaño papel ancho: "+tamanioPapelAncho);
pf.setPaper(paper); pf.setOrientation(PageFormat.PORTRAIT); printerJob.setPageable(book); printerJob.setJobName(capturarQX()); printerJob.printDialog(); //el metodo que imprime finalmente try { printerJob.print(); System.out.println("imprimio"); } catch (PrinterException e) { e.printStackTrace(); } } int cont=0;
/** *Metodo que dibuja lo que se coloca en las hojas de la impresion */
es para Imprimir, necesito que cuando llegue a la parte de abajo siga escribiendo el la siguiente pagina, quien escribe de esa forma es el book. por ahora le envio this.. y me imprime todo lo que hay en la ventana, por eso cuando se corre coloca en las dos paginas lo mismo... habría que dejarlo mas genérico osea que cuando llegue a abajo la ultima linea que se dibuja en el graphics si no cabe en esa pagina se
escriba o siga escribiendo en la siguiente pagina... PARA REALIZAR LAS PRUEBAS: se elige .pdf en la seleccion normalemente de impresora y hay sale el documento en .pdf como si se hubiera impreso, (si ya creo uno debe cerrarlo parapoderlo reemplazar si se hace otra prueba).....
package interfaz;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.PrintJob;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.font.FontRenderContext;
import java.awt.font.LineBreakMeasurer;
import java.awt.font.TextLayout;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.text.AttributedCharacterIterator;
import java.text.AttributedString;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
public class PruebaImpresion extends JFrame implements Printable{
private int m_width;
//son para capturar y enviar los textos a el Graphics 2d del metodo print(Graphics,PageFormat,IndicePagina).
private String textoMacro,textoMicro,textoDiagnostico;
private AttributedCharacterIterator iteratorMacro,iteratorMicro,iteratorDiag;
private int start_macro,startmicro,startDiag;
private int endMacro,endMicro,endDiag;
//esta variable es la que se va comparando para acomodar la posición de y
static int inc = 120;
static int margenDerecho=20;
public PruebaImpresion() {
setSize(600,600);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
float tamanioPapelAlto;
float tamanioPapelAncho;
//este es el que imprime todo basicamente es quien da la orden de inprimir
PrinterJob printerJob;
//da formato a las paginas
PageFormat pf;
//libro que hace varias paginas
Book book;
//permiter definir los parametros para el papel
Paper paper;
/**
*Metodo para imprimir
*/
public void imprime(){
printerJob = PrinterJob.getPrinterJob();
pf=printerJob.pageDialog(printerJob.defaultPage());
book= new Book();
/// acase coloca el book o lo que va a colocar en el documento
for (int i = 0; i < 2; i++) {
book.append(this, pf);
}
//aca se inicializa el tamaño del papel
paper= new Paper();
paper.setSize(612.0, 832.0);
double margin=margenDerecho;
paper.setImageableArea(margin, margin, paper.getWidth()-margin, paper.getHeight()-margin);
tamanioPapelAlto= (float)paper.getHeight();
tamanioPapelAncho=(float) paper.getWidth();
System.out.println("tamaño papel alto: "+tamanioPapelAlto +" tamaño papel ancho: "+tamanioPapelAncho);
pf.setPaper(paper);
pf.setOrientation(PageFormat.PORTRAIT);
printerJob.setPageable(book);
printerJob.setJobName(capturarQX());
printerJob.printDialog();
//el metodo que imprime finalmente
try {
printerJob.print();
System.out.println("imprimio");
} catch (PrinterException e) {
e.printStackTrace();
}
}
int cont=0;
/**
*Metodo que dibuja lo que se coloca en las hojas de la impresion
*/
public int print(Graphics g, PageFormat pageFormat, int pageIndex) throws PrinterException {
if (pageIndex > 1){
return NO_SUCH_PAGE;
}
g.setFont(new Font("Arial", Font.BOLD, 10));
g.drawLine(20, 100, 550, 100);
inc=115;
g.drawString("REPORTE DE ANATOMÍA PATOLÓGICA", 200,120);
g.setFont(new Font("Arial", Font.PLAIN, 8));
g.drawString("CD 030 v1:", 500, inc+=20);
g.setFont(new Font("Arial", Font.BOLD, 10));
g.drawString("QX: ", 20, inc+=60);
g.setFont(new Font("Arial", Font.PLAIN, 10));
g.drawString(capturarQX(), 50, inc);
g.setFont(new Font("Arial", Font.BOLD, 10));
g.drawString("FECHA: ", 20, inc+=15);
g.setFont(new Font("Arial", Font.PLAIN, 10));
g.drawString(capturarFecha(), 70, inc);
g.setFont(new Font("Arial", Font.BOLD, 10));
g.drawString("NOMBRE: ", 20, inc+=15);
g.setFont(new Font("Arial", Font.PLAIN, 10));
g.drawString(capturarNombre(), 75, inc);
g.setFont(new Font("Arial", Font.BOLD, 10));
g.drawString("EDAD: ", 20, inc+=15);
g.setFont(new Font("Arial", Font.PLAIN, 10));
g.drawString(capturarEdad(), 70, inc);
g.setFont(new Font("Arial", Font.BOLD, 10));
g.drawString("DX CLINICO: ", 20, inc+=15);
g.setFont(new Font("Arial", Font.PLAIN, 10));
g.drawString(capturarDxClinico(), 100, inc);
g.setFont(new Font("Arial", Font.BOLD, 10));
g.drawString("ENTIDAD: ", 20, inc+=15);
g.setFont(new Font("Arial", Font.PLAIN, 10));
g.drawString(capturarEntidad(), 75, inc);
g.setFont(new Font("Arial", Font.BOLD, 10));
g.drawString("CENTRO: ", 280, inc);
g.setFont(new Font("Arial", Font.PLAIN, 10));
g.drawString(capturarCentro(), 330, inc);
g.setFont(new Font("Arial", Font.BOLD, 10));
g.drawString("DOCUMENTO: ", 20, inc+=15);
g.setFont(new Font("Arial", Font.PLAIN, 10));
g.drawString(capturarDocumento(), 100, inc);
g.setFont(new Font("Arial", Font.BOLD, 10));
g.drawString("ESPECIMEN ENVIADO: ", 20, inc+=15);
g.setFont(new Font("Arial", Font.PLAIN, 10));
g.drawString(capturaEspecimen(), 145, inc);
g.setFont(new Font("Arial", Font.BOLD, 10));
g.drawString("EXAMENES PREVIOS: ", 20, inc+=15);
g.setFont(new Font("Arial", Font.PLAIN, 10));
g.drawString(capturarExamenesPre(), 145, inc);
g.setFont(new Font("Arial", Font.BOLD, 10));
g.drawString("MEDICO TRATANTE: ", 20, inc+=15);
g.setFont(new Font("Arial", Font.PLAIN, 10));
g.drawString(capturarMedicoTra(), 140, inc);
g.setFont(new Font("Arial", Font.BOLD, 10));
g.drawLine(20, inc+=30, 550, inc);
//////////--- DESCRIPCION MACROSCOPICA
g.setFont(new Font("Arial", Font.BOLD, 10));
g.drawString("DESCRIPCION MACROSCOPICA: ", 20, inc+=30);
g.setFont(new Font("Arial", Font.PLAIN, 10));
Graphics2D g2 = (Graphics2D) g;
FontRenderContext frc = g2.getFontRenderContext();
LineBreakMeasurer measurer = new LineBreakMeasurer(iteratorMacro, frc);
measurer.setPosition(start_macro);
float x = margenDerecho, y = (inc);
while (measurer.getPosition() < endMacro){
TextLayout layout = measurer.nextLayout(m_width);
y += layout.getAscent();
float dx = layout.isLeftToRight() ? 0 : m_width - layout.getAdvance();
layout.draw(g2, x + dx, y);
y += layout.getDescent() + layout.getLeading();
}
////////----- DESCRIPCION MICROSCOPICA
g.setFont(new Font("Arial", Font.BOLD, 10));
g.drawString("DESCRIPCION MICROSCOPICA: ", 20, (int) y+30);
g.setFont(new Font("Arial", Font.PLAIN, 10));
Graphics2D g3 = (Graphics2D) g;
// g3.translate(pageFormat.getImageableX()-20, pageFormat.getImageableY());
FontRenderContext frc2 = g3.getFontRenderContext();
LineBreakMeasurer measurer2 = new LineBreakMeasurer(iteratorMicro, frc2);
measurer2.setPosition(startmicro);
while (measurer2.getPosition() < endMicro){
TextLayout layout = measurer2.nextLayout(m_width);
y += layout.getAscent();
float dx = layout.isLeftToRight() ? 0 : m_width - layout.getAdvance();
layout.draw(g3, x + dx, y+30);
y += layout.getDescent() + layout.getLeading();
}
////////----- DIAGNOSTICO
inc=(int)y;
g.setFont(new Font("Arial", Font.BOLD, 10));
g.drawString("DIAGNOSTICO: ", 20, inc+=60);
y=y+20;
Graphics2D g4 = (Graphics2D) g;
// g4.translate(pageFormat.getImageableX()-40, pageFormat.getImageableY());
FontRenderContext frc3 = g4.getFontRenderContext();
LineBreakMeasurer measurer3 = new LineBreakMeasurer(iteratorDiag, frc3);
measurer3.setPosition(startDiag);
while (measurer3.getPosition() < endDiag){
TextLayout layout = measurer3.nextLayout(m_width);
y += layout.getAscent();
float dx = layout.isLeftToRight() ? 0 : m_width - layout.getAdvance();
layout.draw(g4, x + dx, y+40);
y += layout.getDescent() + layout.getLeading();
if(y>=inc+100){
//book.setPage(pageIndex, this, pageFormat);
book.append(this, pageFormat, pageIndex);
y= (float) paper.getWidth()- tamanioPapelAlto;
System.out.println("y:"+y+ " /----- pageIndex: "+pageIndex+" /----- pf.getHeigth: "+pf.getHeight());
//g4.translate(x+dx, y+40);
layout.draw(g4, x + dx, y+40);
pageIndex++;
}
}
System.out.println(inc+ " posicion del texto en y: "+y);
printAll(g);
return PAGE_EXISTS;
}
public String capturarMacro(){
return "Se recibe útero desprovisto de anexos que pesa 100 gramos y mide 8 x 7 x 5 cm, " +
"la superficie externa es lisa"+
"brillante, el cérvix mide 3,5 x 2,5 cm, desprovisto de reborde vaginal, la mucosa exocervical es brillante, el canal"+
"endocervical es permeable. Al corte por el eje mayor la cavidad endometrial es esplazada, a los cortes seriados el"+
"endometrio alcanza un espesor de hasta 0,2 cm y el miometrio de 2 cm. Con múltiples miomas blanco"+
"arremolinados que miden entre 0,7 y 1,5 cm. Sin cambios degenerativos. Se procesan cortes representativos así:"+
"A- Cérvix 1 bloque B- Endomiometrio y miomas 1 bloque.";
}
public String capturarMicro(){
return "Los cortes muestran en A-, cervix con metaplasia escamosa madura endocervical y quistes de Naboth. En B-, se"
+"observa un endometrio de patron secretor y miometrio con multiples focos de adenomiosis junto a neoplasia"+
"mesenquimal benigna formada por haces de musculo liso sin atipia ni mitosis.";
}
public String capturarDiagnostico(){
return " UTERO SIN ANEXOS: - CERVIX: METAPLASIA ESCAMOSA MADURA ENDOCERVICAL. " +
"QUISTES DE NABOTH.- ENDOMETRIO: PATRON SECRETOR. " +
"MIOMETRIO: LEIOMIOMAS INTRAMURALES Y ADENOMIOSIS C.J/A. " +
"-------------------------- -------- ------------------------ -------------------" +
"-----------------------------------------------------------------------------" +
"-----------------------------------------------------------------------------" +
"----------------------------------------- ------------------------ " +
"------------------------------------------------------------------------" +
"--------------- - ----------------------------- ----------------------------" +
"--------------- ------------------------------------------ -------------------" +
"--------------------------------------------------- --------------------------" +
"---------------------------------- ----------------------------------------- ---" +
"------------------------------------------ ---------------------------" +
"------------------------------ --------------------------------- ---------------" +
"--------------------------- ---------------------- ---------------------" +
"------------------------------------ -------------------------------------------" +
"---------------- -------------------------- ----------------------------------" +
"---------------- ----------------------- --------------------------- --------- " +
"-------------------------------------- ---------------------- -------------- a";
}
public String capturarQX(){
return "12345";
}
public String capturarFecha(){
return "20/10/***";
}
public String capturarNombre(){
return "EDSSON DARIO PABON BUSTOS";
}
public String capturarDocumento(){
return "10570*****";
}
public String capturarEdad(){
return "24";
}
public String capturarDxClinico(){
return "dx clinico....";
}
public String capturarEntidad(){
return "NOMBRE DE LA ENTIDAD PACIENTE";
}
public String capturarCentro(){
return "NOMBRE DEL CENTRO PACIENTE";
}
public String capturaEspecimen(){
return "RESECCION";
}
public String capturarExamenesPre(){
return "QX ANTIGUOS";
}
public String capturarMedicoTra(){
return "DR. SALUDCOOP";
}
public void llenarDecripcion(){
textoMacro=capturarMacro();
textoMicro=capturarMicro();
textoDiagnostico=capturarDiagnostico();
m_width = 530;
for (int i = 0; i<3; i++) {
String aux="";
if(i==0){
aux=textoMacro;
AttributedString styledText = new AttributedString(aux);
iteratorMacro = styledText.getIterator();
start_macro = iteratorMacro.getBeginIndex();
endMacro = iteratorMacro.getEndIndex();
}
if(i==1){
aux=textoMicro;
AttributedString styledText2 = new AttributedString(aux);
iteratorMicro = styledText2.getIterator();
startmicro = iteratorMicro.getBeginIndex();
endMicro = iteratorMicro.getEndIndex();
}
if(i==2){
aux=textoDiagnostico;
AttributedString styledText3= new AttributedString(aux);
iteratorDiag = styledText3.getIterator();
startDiag = iteratorDiag.getBeginIndex();
endDiag = iteratorDiag.getEndIndex();
}
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
PruebaImpresion p= new PruebaImpresion();
p.llenarDecripcion();
p.imprime();
}
});
}
}