30. august 2002 - 13:44
Der er
4 kommentarer
Udskrivning af JTextPane der fylder mere end én side????
Hej Jeg har en JTextPane, der indeholder et document.. Når jeg prøver at udskrive dette, udskriver den kun 1 side, selvom at dokumentet indeholder 2 sider!!! Hvordan kan man udskrive mere end En side... // Min komponent printer klasse import java.awt.*; import java.awt.print.*; import javax.swing.JComponent; public class ComponentPrintable implements Printable { public ComponentPrintable(Component c) { mComponent = c; } public int print(Graphics g, PageFormat pageFormat, int pageIndex) { if (pageIndex > 0) return NO_SUCH_PAGE; Graphics2D g2 = (Graphics2D)g; g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); boolean wasBuffered = disableDoubleBuffering(mComponent); mComponent.paint(g2); restoreDoubleBuffering(mComponent, wasBuffered); return PAGE_EXISTS; } private boolean disableDoubleBuffering(Component c) { if (c instanceof JComponent == false) { return false; } JComponent jc = (JComponent)c; boolean wasBuffered = jc.isDoubleBuffered(); jc.setDoubleBuffered(false); return wasBuffered; } private void restoreDoubleBuffering(Component c, boolean wasBuffered) { if (c instanceof JComponent) { ((JComponent)c).setDoubleBuffered(wasBuffered); } } private Component mComponent; }
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
30. august 2002 - 13:46
#1
public void udskriv() { RepaintManager.currentManager(this).setDoubleBufferingEnabled(false); PrinterJob pj=PrinterJob.getPrinterJob(); pj.setPrintable(Kvittering.this);//Kvittering er navnet på klassen! pj.printDialog(); try{ pj.print(); }catch (Exception ex) {System.out.println(ex);} } public void onPrint() { PrinterJob printJob = PrinterJob.getPrinterJob(); PageFormat pf = printJob.defaultPage(); pf.setOrientation(PageFormat.PORTRAIT); printJob.validatePage(pf); printJob.setPrintable(this); if (printJob.printDialog()) { try { printJob.print(); } catch (Exception ex) { System.out.println(ex); } } } public int print (Graphics g, PageFormat pf, int pageIndex) { double escala=1; int nbPages=0; Graphics h; double pageHeight = 0; double pageWidth = 0; try { pageWidth=pf.getImageableWidth(); pageHeight=pf.getImageableHeight(); escala=pageWidth/getWidth(); System.out.println("page width : "+pageWidth); System.out.println("escala : "+ escala); nbPages=(int)Math.ceil((escala*getHeight())/pageHeight); System.out.println("num paginas : "+ nbPages); Graphics2D g2 = (Graphics2D)g; System.out.println("print page index : "+pageIndex); if (pageIndex >= nbPages) return NO_SUCH_PAGE; g2.translate(pf.getImageableX(), pf.getImageableY()); g2.translate(0f, -pageIndex*pageHeight); g2.scale(escala,escala); disableDoubleBuffering(this); this.paint(g2); enableDoubleBuffering(this); return PAGE_EXISTS; } catch (Exception e) { e.printStackTrace(); return NO_SUCH_PAGE; } }
30. august 2002 - 13:52
#2
Kan du ikke udspecificere koden, der fotæller at vi har med flere sider at gøre!!!
31. august 2002 - 16:15
#3
Dette løser dit problem! Du skal lave en ActionListener på din knap som denne klasse:*/ public class PrintListener implements ActionListener { private JTextArea text; public PrintListener(JTextArea text) { this.text = text; } public void actionPerformed(ActionEvent ae) { PrinterJob job = PrinterJob.getPrinterJob(); PageFormat pageFormat = job.pageDialog( job.defaultPage() ); TextPrinter textPrinter = new TextPrinter( text.getText(), pageFormat ); job.setPageable( textPrinter ); if ( job.printDialog() ) { job.print(); } // if } } I din egen klasse skal du altså have noget som: JButton button = ...; JTextArea text = ...; button.addActionListener(new PrintListener(text)); Klassen er defineret her: import java.awt.*; import java.awt.print.*; import java.io.*; import java.net.*; import java.util.ArrayList; import java.util.List; public class TextPrinter implements Pageable, Printable, Serializable { private String defaultFontFamily = "Monospaced"; private int defaultFontStyle = Font.PLAIN; private int defaultFontSize = 10; private float lineSpaceFactor = 1.2f; private int lineSpacing; private int linesPerPage; private int numberOfPages; //!!!!!!!!!!!!!!!!!!!!!! private int baseline = -1; private PageFormat pageFormat; private Font font; private List lines; public TextPrinter( String text, PageFormat pageFormat ) throws IOException { this( new StringReader( text ), pageFormat ); } // constructor public TextPrinter( File file, PageFormat pageFormat ) throws IOException { this( new FileReader( file ), pageFormat ); } // constructor public TextPrinter( Reader reader, PageFormat pageFormat ) throws IOException { this.pageFormat = pageFormat; BufferedReader breader = new BufferedReader( reader ); lines = new ArrayList(); String line; while ( ( line = breader.readLine() ) != null ) { lines.add( line ); } // while breader.close(); setFont( new Font( defaultFontFamily, defaultFontStyle, defaultFontSize ) ); } // constructor public void setFont( Font font ) { this.font = font; lineSpacing = (int)( font.getSize() * lineSpaceFactor ); linesPerPage = (int)Math.floor( pageFormat.getImageableHeight() / lineSpacing ); numberOfPages = ( lines.size() - 1 ) / linesPerPage + 1; } // setFont //////////////////////////////// // implementation of Pageable // //////////////////////////////// public int getNumberOfPages() { return numberOfPages; } // getNumberOfPages public PageFormat getPageFormat( int pageNumber ) { return pageFormat; } // getPageFormat public Printable getPrintable( int pageNumber ) { return this; } // getPrintable ///////////////////////////////// // implementation of Printable // ///////////////////////////////// public int print( Graphics g, PageFormat pageFormat, int pageNumber ) { if ( pageNumber < 0 || pageNumber >= numberOfPages ) return NO_SUCH_PAGE; if ( baseline == -1 ) { FontMetrics fm = g.getFontMetrics( font ); baseline = fm.getAscent(); } // if g.setColor( Color.white ); g.fillRect( (int)pageFormat.getImageableX(), (int)pageFormat.getImageableY(), (int)pageFormat.getImageableWidth(), (int)pageFormat.getImageableHeight() ); g.setFont( font ); g.setColor( Color.black ); int startLine = pageNumber * linesPerPage; int endLine = startLine + linesPerPage - 1; if ( endLine >= lines.size() ) { endLine = lines.size() - 1; } // if int x0 = (int)pageFormat.getImageableX(); int y0 = (int)pageFormat.getImageableY(); y0 += lineSpacing; for (int i = startLine; i <= endLine; i++) { String line = (String)lines.get( i ); int index; while ( ( index = line.indexOf( "\t" ) ) >= 0 ) { line = line.substring( 0, index ) + " " + line.substring( index + 1 ); } // while if ( line.length() > 0 ) { g.drawString( line, x0, y0 ); } // if y0 += lineSpacing; } // for return PAGE_EXISTS; } // print } // TextPrinter
02. september 2002 - 07:41
#4
Hej magoo... Skal lige på arbejde nu her, men glæder mig til at komme hjem og prøve det... Det ser fornuftigt ud!! Takker indtil videre!! :)
Kurser inden for grundlæggende programmering