Drucken

Status
Nicht offen für weitere Antworten.

SilentJ

Bekanntes Mitglied
Hallo,

ich nutze Java JAI und würde gerne ein Bild ausdrucken. Vorzugsweise mit dem Windows-Druckdialog. Das Problem ist, dass ich das Bild in Abhängigkeit zur gewählten Druckeinstellung skalieren muss. Das Skalieren ist technisch kein Proble, nur habe ich noch nicht mit dem Windows Druckdialog gearbeitet. Hat jemand vielleicht einen guten Tipp oder Codeschnipsel, bevor ich mich selbst an die Arbeit mache?

Michael
 

SilentJ

Bekanntes Mitglied
Ich weiß nicht, was in deinem Leben falsch gelaufen ist, thE_29, aber deinen Frust auf was auch immer an mir durch GROßBUCHSTABEN und sinnfreie Kommentare abbauen zu wollen, das muss ich nicht haben.

Sicher gibt es Schnipsel, nur leider finde ich kein wirklich konsistentes Beispiel für mein Problem. Gerade beim Java Print API hat sich einiges getan mit den letzten Versionen.
 

Dominicana

Aktives Mitglied
2 Klassen :

1. PrintGraphics.java
Code:
import java.util.Arrays;
import java.awt.Image;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import javax.print.attribute.standard.MediaPrintableArea;
import javax.print.attribute.standard.MediaSizeName;
import javax.print.attribute.standard.OrientationRequested;
import javax.print.attribute.standard.PrintQuality;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.DocFlavor;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.ServiceUI;
import javax.print.DocPrintJob;
import javax.print.Doc;
import javax.print.SimpleDoc;
import javax.print.PrintException;

public class PrintGraphics {
    PageFormat pageFormat;
    Paper paper;
    public static void main(String args []) {
//        new PrintGraphics();
    }
    public PrintGraphics(Image image) {
        final String sErrNoPrintService = "Es ist kein passender Print-Service installiert.";
        String s2ndParm = null;
        int idxPrintService = -1;
        DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
        PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
        aset.add(MediaSizeName.ISO_A4);
        aset.add(OrientationRequested.LANDSCAPE);
        aset.add(PrintQuality.HIGH);
        aset.add(new MediaPrintableArea(10, 10, 190, 277, MediaPrintableArea.MM));
        try {
            PrintService prservDflt = PrintServiceLookup.lookupDefaultPrintService();
            PrintService[] prservices = PrintServiceLookup.lookupPrintServices(flavor, aset);
            if (null == prservices || 0 >= prservices.length) {
                if (null != prservDflt) {
                    prservices = new PrintService[] { prservDflt };
                } else {
                    System.err.println(sErrNoPrintService);
                    System.exit(3);
                }
            }
            PrintService prserv = null;
            if (0 <= idxPrintService && idxPrintService < prservices.length) {
                prserv = prservices[idxPrintService];
            } else {
                if (!Arrays.asList(prservices).contains(prservDflt)) {
                    prservDflt = null;
                }
                prserv = ServiceUI.printDialog(null, 50, 50, prservices, prservDflt, null, aset);
            }
            if (null != prserv ) {
                pageFormat = new PageFormat();
                paper = new Paper();
                paper.setSize(594.936, 841.536);
                paper.setImageableArea(100, 100, 594.836, 841.436);
                pageFormat.setOrientation(PageFormat.LANDSCAPE);
                pageFormat.setPaper(paper);
                if (null == s2ndParm || !s2ndParm.equalsIgnoreCase("np")) {
                    DocPrintJob pj = prserv.createPrintJob();
                    Doc doc = new SimpleDoc(new MyPrintableObject(image), flavor, null);
                    pj.print(doc, aset);
                }
            }
        } catch (PrintException pe) {
            System.err.println(pe);
        }
    }
}
2. MyPrintableObject.java
Code:
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.Image;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Color;

public class MyPrintableObject extends java.applet.Applet implements Printable {
    public int iResMul = 4; // 1 = 72 dpi ; 4 = 288 dpi
    Image image;
    public MyPrintableObject(Image image) {
        this.image = image;
    }
    public int print(Graphics g, PageFormat pf, int iPage) throws PrinterException {
        if (0 != iPage) {
            return NO_SUCH_PAGE;
        }
        try {
            int iPosX = 1;
            int iPosY = 1;
            Graphics2D g2    = (Graphics2D)g;
            g2.translate( pf.getImageableX(), pf.getImageableY() );
            g2.scale( 1.0 / iResMul, 1.0 / iResMul );
            g2.drawImage(image, iPosX, iPosY, 3120, 2080, this);
            g2.setColor(Color.BLACK);
            g2.drawRect(iPosX, iPosY, 3120, 2080);
        } catch( Exception ex ) {
            throw new PrinterException( ex.getMessage() );
    }
    return PAGE_EXISTS;
    }
}
Übergabe :
Code:
new PrintGraphics(Toolkit.getDefaultToolkit().getImage("Bild.jpg"));

Alles einbauen , fertisch!
 

SilentJ

Bekanntes Mitglied
Danke,

inzwischen ist mein Problem aber die Größe des Bildes. Ein Ausdruck ist nicht so ohne weiteres möglich...
 

thE_29

Top Contributor
@SilentJ: ich weiß net was in deinem Leben falsch gelaufen ist, aber anscheinend auch viel..

Mind. 2 von der in den FAQ von mir geposteten Bsp rufen den Windows druckdialog auf, aber das passt dir ja auch net (was wolltest du überhaupt?)

Es nervt einfach wenn Leute wie du, die zu faul sind die Boardsuche zu nutzen oder in den FAQs mal reinschaun, um einfach ein Bsp haben zu wollen, was schon zig mal implementiert und gefragt wurde!

Und wir Mods müssen das anscheinend jedem zuerst mal lernen, oder Ihr müsst das alle mal lernen, das man zuerst sucht bevor man fragt!

Und das man vielleicht bei gefunden Seite auch auf Seite 2 wechseln kann und net nur, wenn ich auf Seite 1 nix gscheites gefunden habe, dann geh ich fragen!

Stell dir vor jeder wäre zu faul zum Suchen und würe immer fragen!

Wie drucke ich aus, wie lese ich ein Zeichen, wie stelle ich ein Bild da, wie mache ich JButton 2 zeilig, etc.

Dann wäre zu Semesterzeiten das komplette Forum zugemüllt mit immer wieder den selben Fragen (da die meisten Fragen sowieso von Studenten kommen).

Und das dann
1. keiner mehr auf 100 mal beantwortete Fragen antwortet is klar
2. das die Übersicht total verloren geht
3. die Leute eben deswegen weggehen weil niemand antwortet..

Tjo, somit ist das Forum zutode niedergespamt worden!

Applaus für die faulen Leute die net fähig sind zu suchen!!

Was glaubst du überhaupt warum du hier kaum (1er und mir) antwortet??

Weil deine Frage schon zu oft beantwortet ist.



Desweiteren zum skalieren von Bildern gibts auch schon genug hier!

Such halt danach, von mir brauchste keine Hilfe mehr erwarten!
 

SilentJ

Bekanntes Mitglied
@thE_29:

Man muss nicht auf jedes Posting antworten. Das spart Zeit, nur so als Tipp. Ich höre jetzt auf in diesem Thread zu posten, sonst müsstest Du weiterhin darauf warten, bis ich mal wieder was schreibe, um daraufhin aktiv zu werden.
 
G

grayson

Gast
ok, das beispiel "PrintGraphics.java " find ich ja recht gut, aber mal verständnistechnisch hab ich da noch nen problemchen....

annahme: ich habe eine liste von Image objekten, die ich drucken will, also einmal BS-abhängigen druckdialog anzeigen und dann je nach dort eingestellter seitenzahl die entsprechenden bildobjekte aus der liste drucken.

so wie ich das beispiel verstanden hab, würde für jede einzelne seite der dialog aufgehen ??
 

Dominicana

Aktives Mitglied
In meiner PrintGraphics Klasse : ja. War auch nur für den Druck von einer Seite gedacht. Kann man aber so umbauen, das mehrere Seiten am Stück gedruckt werden . zb.: man übernimmt ein Image-Array , welches in "MyPrintableObject" wieder aufgelöst wird und auf mehreren Seiten ausgedruckt wird.

Dom.
 
G

grayson

Gast
du meinst also sowas wie : erste datei in den stream stecken und wenn datei durch, nächste datei in den stream rein usw?
 
G

grayson

Gast
well ok, ich habs erstmal hin bekommen. problem nur... beim ausdruck hochformat, passt einfach garnichts das bild ist dann einfach querformat auf die seite grduckt und also in der mitte abgeschnitten .... also das pageformat hat sich geändert, das bild aber nicht....
 
G

grayson

Gast
hmm ok, das rumskalieren im quellcode ist natürlich irgendwie berg.....

und die qualität ist auch sagen wir.... unbefriedigend.....

na gut, wenn man das printableObject als klasse in der selben datei definiert wie die PrintGraphics, kann man zumindest auf die variablen zugreifen, und sicherstellen das die seite richtig skaliert wird für hoch / querformat..... aber desshalb sieht das ergebnis immernoch buckelig aus.... format und ausrichtung stimmen aber die druckqualität ..... wurgs.....

mal im ernst, das kann doch wohl nicht wahr sein, das man so viel sackstand hat, nur weil man ein paar grafiken bzw ein wenig text drucken will, ohne den ganzen schwachsinn jedes mal erst anzuzeigen ...... GRUMMEL!
 

Dominicana

Aktives Mitglied
Die Qualität des Ausdruckes hängt vom Drucker , vom Papier und vom Bild ab. Ich nehm Fotopapier , einen Fotodrucker und Fotos von einer 3-MioPix Cam und drucke. :D
 
G

Guest

Gast
falsch, die qualität hängt davon ab was du womit auf das graphics objekt zeichest.

mit graphics2d und afinetransform, sieht die ganze sache schon ganz anders aus.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
J bestimmten Bereich eines JPanels drucken 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
A Swing Drucken eines JTextPanes AWT, Swing, JavaFX & SWT 7
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
D 2D-Grafik Problem beim Drucken eines Grafik-Objekts 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
D Drucken eines "Formulars" in abgeänderter Form AWT, Swing, JavaFX & SWT 5
P Jpanel mit Komponenten drucken AWT, Swing, JavaFX & SWT 3
T Drucken eines JFrame AWT, Swing, JavaFX & SWT 2
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
N Nur ein Element sichtbar beim Drucken eines JFrame AWT, Swing, JavaFX & SWT 9
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 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
S Drucken eines Panels AWT, Swing, JavaFX & SWT 3
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

Ähnliche Java Themen

Neue Themen


Oben