Drucken eines Panels

Status
Nicht offen für weitere Antworten.

Skully

Mitglied
Habe folgende Methode, die den Inhalt meines Panels ausdrucken soll
Code:
public void print(){
        if (gui.getTabs().getTabCount() == 0)
            return;
        panel = gui.getCurrentPanel();
        Toolkit tk = Toolkit.getDefaultToolkit();
        int hight, width;
        width = panel.getWidth();
        hight = panel.getHeight();
        BufferedImage doubleBuffer = new BufferedImage(width, hight, BufferedImage.TYPE_INT_RGB);
        PrintJob prjob = tk.getPrintJob( new Frame(), "Drucken", null );
        if ( prjob != null ) {
            Graphics g = prjob.getGraphics(); 
            g.drawImage(doubleBuffer,0,0,width,hight,null); 
            g.dispose(); 
            prjob.end();
        }
    }

da druckt er halt nur ne schwarze Seite aus.
Mach ich so:

Code:
Graphics g = doubleBuffer.getGraphics();
panel.print(g); 
g.dispose(); 
prjob.end();
passiert nichts.
Jemand ne Idee?
 

hannes68

Aktives Mitglied
Also bei mir wird der Panel gedruckt nur ohne beachtung der Hintergrundfarbe
Code:
Toolkit tk = Toolkit.getDefaultToolkit();
PrintJob pj = tk.getPrintJob( new Frame(), "", null );
if ( pj != null ) {
Graphics g = pj.getGraphics();
getJPanel3().printComponents( g );
g.dispose();
pj.end();

Kann man da was machen??

Edit:Und den Boarder sollte man auch mit ausdrucken können :wink:
 

JamesDean

Mitglied
Code:
Nimmst du folgende Klasse und übergibst Ihr die Componente die du drucken möchstest. Du musst die [i]sendMessage[/i] Anweisungen entfernen oder auskommentieren oder mit [i]System.out.println[/i] ersetzten natürliche dann nur den String angeben ohne das this.

Und natürlich noch die ganzen Imports hinzufügen

Beispiel:

sendMessage(this, "\n****** drucken auslösen******"); mit System.ou.println( sendMessage( "\n****** drucken auslösen******");



public class PrintUtilities implements Printable, MessageSource {
    private Component componentToBePrinted;

    private Vector listenerList;

    double gBreite;

    double gHoehe;

    double b;

    double h;

    double skalierungb = 1.0;

    double skalierungh = 1.0;

    BigDecimal bigDecimal;

    public static void printComponent(Component c) {
        new PrintUtilities(c).print();
    }

    //Dem Konstruktor einfach den Panel übergeben den Du drucken möchtest ******************
    public PrintUtilities(Component componentToBePrinted) {
        this.componentToBePrinted = componentToBePrinted;
    }

    public void print() {
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        PageFormat pageFormat = printerJob.defaultPage();

        try {
            pageFormat.setOrientation(PageFormat.LANDSCAPE);
            printerJob.setJobName("Viewer Printing");
            //sendMessage(this,"clear");
            sendMessage(this, "\n****** drucken auslösen******");
            sendMessage(this, "Landscape(Querformat)");
            //Skalierung*******************************
            bigDecimal = new BigDecimal(pageFormat.getImageableWidth());
            gBreite = bigDecimal.setScale(4, BigDecimal.ROUND_HALF_DOWN)
                    .doubleValue();

            bigDecimal = new BigDecimal(pageFormat.getImageableHeight());
            gHoehe = bigDecimal.setScale(4, BigDecimal.ROUND_HALF_DOWN)
                    .doubleValue();

            b = componentToBePrinted.getWidth();
            h = componentToBePrinted.getHeight();

            if (b > gBreite) {
                bigDecimal = new BigDecimal(gBreite / b);
                skalierungb = bigDecimal
                        .setScale(4, BigDecimal.ROUND_HALF_DOWN).doubleValue();
                sendMessage(this, "Papierbr.: " + gBreite + " * Fensterbr.: "
                        + b + " * Skal.-F. Breite : " + skalierungb);
            }

            if (h > gHoehe) {
                bigDecimal = new BigDecimal(gHoehe / h);
                skalierungh = bigDecimal
                        .setScale(4, BigDecimal.ROUND_HALF_DOWN).doubleValue();
                sendMessage(this, "Papierhö.: " + gHoehe + " * Fensterhö.: "
                        + h + " * Skal.-F. Höhe   : " + skalierungh);
            }
            //Ende Skalierung***************************

        } catch (java.lang.IllegalStateException ise) {
            System.out.println("Druck Fehler...:o(\n" + ise);
        }
        sendMessage(this, "Druckauftraggeber: " + printerJob.getUserName()
                + "\n" + "Jobname: " + printerJob.getJobName() + "\nDrucker: "
                + printerJob.getPrintService());

        printerJob.setPrintable(this, pageFormat);
        if (printerJob.printDialog()) {
            try {
                printerJob.print();
                sendMessage(this, "****** drucken erfolgreich :-) ******");
            } catch (PrinterException pe) {
                System.out.println("**** Druck Fehler :o(  : " + pe);
            }
        } else {
            sendMessage(this, "****** drucken abgebrochen !!!! :o( ******");
        }
    }

    public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
        if (pageIndex > 0) {
            return (NO_SUCH_PAGE);
        } else {
            Graphics2D g2d = (Graphics2D) g;
            g2d.translate(pageFormat.getImageableX(), pageFormat
                    .getImageableY());
            g2d.scale(skalierungb, skalierungh);
            disableDoubleBuffering(componentToBePrinted);
            componentToBePrinted.paint(g2d);
            enableDoubleBuffering(componentToBePrinted);
            return (PAGE_EXISTS);
        }
    }

    public static void disableDoubleBuffering(Component c) {
        RepaintManager currentManager = RepaintManager.currentManager(c);
        currentManager.setDoubleBufferingEnabled(false);
    }

    public static void enableDoubleBuffering(Component c) {
        RepaintManager currentManager = RepaintManager.currentManager(c);
        currentManager.setDoubleBufferingEnabled(true);
    }
}
 

Grizzly

Top Contributor
@Skully: Das Problem mit dem Drucken hatte ich auch. Liegt daran, dass in Java 1.4 ein Bug in der Druck-Bibliothekl ist. Netterweise bringt es auch nichts, die gewünschte Komponente in ein BufferedImage zu zeichnen und dann zu drucken. Ich habe das ganze dann so gelöst, dass ich erst die Komponente in ein BufferedImage gezeichnet habe, dann in eine PNG Datei gespeichert, dann wieder geladen und dann gedruckt. Klingt zwar etwas umständlich, aber anders hat es nicht funktioniert. Und ich hab' wirklich viel probiert...

In Java 1.5 bzw. Java 5 sollte das Problem behoben sein. Hoffe ich...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J bestimmten Bereich eines JPanels drucken AWT, Swing, JavaFX & SWT 2
A Swing Drucken eines JTextPanes AWT, Swing, JavaFX & SWT 7
D 2D-Grafik Problem beim Drucken eines Grafik-Objekts AWT, Swing, JavaFX & SWT 2
D Drucken eines "Formulars" in abgeänderter Form AWT, Swing, JavaFX & SWT 5
T Drucken eines JFrame AWT, Swing, JavaFX & SWT 2
N Nur ein Element sichtbar beim Drucken eines JFrame AWT, Swing, JavaFX & SWT 9
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
I Rich Text drucken AWT, Swing, JavaFX & SWT 0
F JavaFX (Tree)TableView korrekt drucken AWT, Swing, JavaFX & SWT 1
F 2D-Grafik JTextArea drucken bringt mieses Ergebnis AWT, Swing, JavaFX & SWT 2
L Charset beim Drucken falsch AWT, Swing, JavaFX & SWT 2
Sugan JavaFX Bilder drucken AWT, Swing, JavaFX & SWT 0
O JTable linksbündig drucken (nicht der Zelleninhalt) AWT, Swing, JavaFX & SWT 2
M Swing PDF Datei nach drucken nicht löschbar AWT, Swing, JavaFX & SWT 6
F AWT Drucken verschluckt inhalt AWT, Swing, JavaFX & SWT 1
S JTable im Hoch- und Querformat angepasst drucken AWT, Swing, JavaFX & SWT 1
kaoZ JFrame Drucken AWT, Swing, JavaFX & SWT 8
B Drucken der JTextArea AWT, Swing, JavaFX & SWT 4
Z Drucken AWT, Swing, JavaFX & SWT 2
M JTable Drucken NullpointerException +JTable speichern AWT, Swing, JavaFX & SWT 6
C Swing Drucken von JPanel AWT, Swing, JavaFX & SWT 14
E Drucken von JPanel mit richtiger Skalierung AWT, Swing, JavaFX & SWT 5
L [SWT] Daten und Bilder drucken AWT, Swing, JavaFX & SWT 2
S AWT Drucken aus bestimmtem Papierfach AWT, Swing, JavaFX & SWT 7
S Probleme beim drucken AWT, Swing, JavaFX & SWT 13
M Swing JTable drucken/Darstellung AWT, Swing, JavaFX & SWT 2
W AWT Drucken ohne Druckdialog AWT, Swing, JavaFX & SWT 2
O JTable mit Inhalt drucken AWT, Swing, JavaFX & SWT 3
C Swing Briefe/Dokumente zum Drucken erstellen AWT, Swing, JavaFX & SWT 20
P Jpanel mit Komponenten drucken AWT, Swing, JavaFX & SWT 3
H AWT Oberer Seitenrand kann beim Drucken vom Anwender nicht verstellen werden. AWT, Swing, JavaFX & SWT 6
P Drucken von Jtextpane mit Seitenangabe AWT, Swing, JavaFX & SWT 1
A Probleme beim Drucken AWT, Swing, JavaFX & SWT 5
D Vorabberatung :) Briefe gestalten und drucken (als PDF) AWT, Swing, JavaFX & SWT 3
A Probleme beim Drucken (Seite wird abgeschnitten) AWT, Swing, JavaFX & SWT 2
N JTable: Drucken mit größerer RowHeight AWT, Swing, JavaFX & SWT 2
N JPanel nicht ganz drucken AWT, Swing, JavaFX & SWT 2
A Probleme mit dem Drucken AWT, Swing, JavaFX & SWT 2
K Seite zum drucken einrichten AWT, Swing, JavaFX & SWT 2
F Drucken in Java AWT, Swing, JavaFX & SWT 3
A Problem mit der Seiteneinrichtung beim Drucken AWT, Swing, JavaFX & SWT 7
A Drucken einer JList AWT, Swing, JavaFX & SWT 4
C JTable drucken AWT, Swing, JavaFX & SWT 7
O Panel drucken AWT, Swing, JavaFX & SWT 2
Y Problem beim Drucken AWT, Swing, JavaFX & SWT 2
A Drucken AWT, Swing, JavaFX & SWT 23
H JTable drucken mit Header AWT, Swing, JavaFX & SWT 4
& XHTML drucken mit (oder ohne) Flying Saucer AWT, Swing, JavaFX & SWT 12
C Fenster rücken beim Drucken in den Hintergrund AWT, Swing, JavaFX & SWT 6
& mehrseitige HTML-Dokumente drucken AWT, Swing, JavaFX & SWT 2
ARadauer jtable drucken unter java 1.3 AWT, Swing, JavaFX & SWT 2
B Unsichtbares JPanel drucken. AWT, Swing, JavaFX & SWT 14
C Text drucken? AWT, Swing, JavaFX & SWT 2
V Drucken in Java AWT, Swing, JavaFX & SWT 2
K Drucken von JTextComponenten AWT, Swing, JavaFX & SWT 2
R Drucken unter jdk 1.4 mit JTable AWT, Swing, JavaFX & SWT 11
B Ein großes JTextPane komplett drucken AWT, Swing, JavaFX & SWT 2
I Drucken: Programm stürzt bei AWT, Swing, JavaFX & SWT 7
I Fensterinhalt drucken AWT, Swing, JavaFX & SWT 2
E Drucken von JComponent. AWT, Swing, JavaFX & SWT 4
F Transparent bzw. transfluent(durscheinend) drucken? AWT, Swing, JavaFX & SWT 2
P Idee zum drucken von JTextField und JTable AWT, Swing, JavaFX & SWT 2
O JTable, mehrere Spalten drucken AWT, Swing, JavaFX & SWT 4
orenishii mehrseitig Images anzeigen und drucken SimpleBook.java AWT, Swing, JavaFX & SWT 5
R JPanel drucken AWT, Swing, JavaFX & SWT 5
foobar JTable im Hintergrund drucken AWT, Swing, JavaFX & SWT 2
S Drucken - Bild skalieren AWT, Swing, JavaFX & SWT 2
S JAI und das praktische Drucken AWT, Swing, JavaFX & SWT 4
S Drucken AWT, Swing, JavaFX & SWT 15
S JTable - Drucken AWT, Swing, JavaFX & SWT 10
G HTML aus JEditorPane drucken AWT, Swing, JavaFX & SWT 2
G JPanel drucken AWT, Swing, JavaFX & SWT 2
B componente drucken AWT, Swing, JavaFX & SWT 3
M Ein Bild aus einem Panel drucken? AWT, Swing, JavaFX & SWT 11
G Frage zum Drucken AWT, Swing, JavaFX & SWT 2
V Problem beim drucken AWT, Swing, JavaFX & SWT 4
L swing komponenten Drucken AWT, Swing, JavaFX & SWT 7
G JTextPane drucken AWT, Swing, JavaFX & SWT 2
T JEditorPane-content drucken AWT, Swing, JavaFX & SWT 2
T Drucken des Inhaltes einer JTextArea AWT, Swing, JavaFX & SWT 4
J JTextArea drucken AWT, Swing, JavaFX & SWT 4
@ Erzeugen einer Maske zum drucken AWT, Swing, JavaFX & SWT 2
G Drucken?? AWT, Swing, JavaFX & SWT 4
H JTable drucken AWT, Swing, JavaFX & SWT 4
K JPanel drucken AWT, Swing, JavaFX & SWT 4
P JTable drucken AWT, Swing, JavaFX & SWT 2
B JPanel Drucken AWT, Swing, JavaFX & SWT 1
M effizient mehrere BufferedImage in eines schreiben AWT, Swing, JavaFX & SWT 6
O Swing Icon verschwindet beim Verschieben eines JLabels AWT, Swing, JavaFX & SWT 8
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
Splayfer Umrandung eines AttributedStrings AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
Jose05 zugreifen auf ein Objekt eines GridPanes AWT, Swing, JavaFX & SWT 0
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
news2swen automatisches erstellen eines Languagefiles AWT, Swing, JavaFX & SWT 1
B Stylen eines JTextPane funktioniert nicht AWT, Swing, JavaFX & SWT 1
MiMa Schliessen eines FXML Fensters? AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen

Neue Themen


Oben