Avatar billede codemon Nybegynder
18. april 2001 - 15:44 Der er 5 kommentarer og
2 løsninger

udprint indhold af canvas

Hvordan kan man tilpasse indholdet af et Canvas eller JFrame/JPanel så det passer til papiret ved udprintning.

Jeg har forsøgt at bruge PrintUtilities.java fra
http://www.apl.jhu.edu/~hall/java/Swing-Tutorial/Swing-Tutorial-Printing.html

problemet er at det ikke er hele indholdet som kommer med.
Avatar billede paarse Nybegynder
18. april 2001 - 16:13 #1
Hej Codemon.

Jeg har gjort følgende for at tilpasse papiret til det der skal printes ud.

PrinterJob printerJob = PrinterJob.getPrinterJob();
PageFormat p = printerJob.defaultPage();
Paper paper = p.getPaper();
paper.setImageableArea( 10,10, 575 , 821);   
p.setPaper( paper );

Så skal du bare sørge for at du kun tegner indenfor de punkter du har sat i setImageableArea.

VH Paarse
Avatar billede codemon Nybegynder
18. april 2001 - 19:44 #2
Har nu prøvet din metode i et utal af varianter, men kan stadig ikke få det til at fungerere ordentligt.

jeg sætter dette ind i PrintUtilities print-metode.

    pageFormat.setOrientation(PageFormat.LANDSCAPE);

    Paper paper = pageFormat.getPaper();
    paper.setImageableArea(10, 10, 575, 821);   
    pageFormat.setPaper( paper );

Der er ikke plads til det hele i udprintet. Når jeg vender papiret printer den kun på halvdelen. Har også prøvet med paper.setSize( )

Bruger du en metode til at printe du selv har lavet, eller evt. en anden end ovenstående.
Avatar billede paarse Nybegynder
18. april 2001 - 22:33 #3
Hej Codemon, kan du ikke prøve at maile din kode til mig, så skal jeg nok lige prøve at kigge på den. Mail til mig på : paarse@wanadoo.dk

Avatar billede codemon Nybegynder
19. april 2001 - 08:07 #4
Ok, der kommer noget kode senere, jeg skal lige klippe de centrale dele ud. Det er et projekt og der er temmelig meget kode ud over selve canvas\'et og print-delen.

Du skal nok få ekstra point for det.
Avatar billede paarse Nybegynder
19. april 2001 - 14:05 #5
Bare i orden.
Avatar billede codemon Nybegynder
19. april 2001 - 15:33 #6
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Test extends JFrame
{
    TestCanvas baenk;
    JPanel baenkPanel;
   
    public Test()
    {
        setSize (1024, 750);
        baenk = new TestCanvas();
        baenkPanel = new JPanel();
        baenkPanel.add (baenk);
        getContentPane().add (baenkPanel);
        setDefaultCloseOperation (EXIT_ON_CLOSE);
        show();
       
        baenk.udskriv();   
    }
   
    public static void main (String[] args)
    {
        Test t = new Test();
    }
}

------------------------------------------------------------------------------------------------


import java.awt.image.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Vector;

import java.awt.print.*;

public class TestCanvas extends Canvas implements Printable // MouseListener, MouseMotionListener
{
    public final static int WIDTH = 880;
    public final static double baneHoejde = 143.3;
    public final static int HEIGHT = 455;
           
    public TestCanvas()
    {
        repaint();
        setSize(WIDTH, HEIGHT);
        setBackground(Color.white);
    }
   
    public void udskriv()
    {
        PrinterJob printJob = PrinterJob.getPrinterJob();
        printJob.setPrintable(this);
        if (printJob.printDialog())
        {
          try
          {
            printJob.print();
          }
          catch(PrinterException pe)
          {
            System.out.println(\"Error printing: \" + pe);
          }
      } 
  }
     
// ****************************************************************************
// udkskriv til printer
// ****************************************************************************   
    public int print(Graphics g, PageFormat pageFormat, int pageIndex)
    {
    if (pageIndex > 0)
    {
      return(NO_SUCH_PAGE);
    }
    else
    {
      pageFormat.setOrientation (PageFormat.LANDSCAPE);
      Paper papir = pageFormat.getPaper();
      papir.setImageableArea (0,0,880, 455);
      pageFormat.setPaper(papir);
     
      Graphics2D g2d = (Graphics2D)g;
      g2d.translate(100, 100);
      disableDoubleBuffering(this);
      this.paint(g2d);
      enableDoubleBuffering(this);
      return(PAGE_EXISTS);
    }
  }
 
    /** The speed and quality of printing suffers dramatically if
  *  any of the containers have double buffering turned on.
  *  So this turns if off globally.
  *  @see enableDoubleBuffering
  */
  public static void disableDoubleBuffering(Component c) {
    RepaintManager currentManager = RepaintManager.currentManager(c);
    currentManager.setDoubleBufferingEnabled(false);
  }

  /** Re-enables double buffering globally. */ 
  public static void enableDoubleBuffering(Component c) {
    RepaintManager currentManager = RepaintManager.currentManager(c);
    currentManager.setDoubleBufferingEnabled(true);
  }

    public void paint (Graphics page)
    {
        page.drawRect (0,0, 500, 50);
        page.drawRect (600,0, 278, 50);
        page.drawRect (0,403, 200, 50);
        page.drawRect (378,403, 500, 50);
    }
}

Avatar billede codemon Nybegynder
16. juni 2001 - 13:35 #7
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester