Bilddatei drucken.

JavaRentner

Aktives Mitglied
Guten Tag.
Habe den Thread "Probleme mit drucken aus Java" beendet, weil ich von Grund auf das mit dem drucken verstehen lernen muss.

Ich habe:
Java:
FileInputStream fls = new FileInputStream("/Pfad/bild.png");
bild.png - Abmessung: 13 x 8 cm (ca. 491 x 302 pixel)

Dieses versuche ich jetzt auf ein A4-Papier zu drucken.
X - Position = 5cm (ca. 189px) -> vom linken Rand
Y - Position = 12cm (ca. 454px) -> vom oberen Rand
Breite und Höhe Originalgrösse. (13 x 8 cm)


Habe etliche Links gefunden! (konnte es aber mit meinen Kenntinssen nicht umsetzen)
Egal wie ich es anstelle, es wird mir immer das Bild auf das ganze Blatt aufgezogen!
Nicht mal die 4mm nicht Druckbarerbereich (links, oben, rechts und unten) wird berücksichtigt!
Er druckt immer die X/Y-Kordinaten bei (17 / 11 mm)

Gibt es Jemand der mir hier ein kleines Skript geben könnte, welches ich dann testen und analysieren könnte?
Da ich kein Profi bin könnte ich so ev. herausfinden, welche Parameter für was Zuständig sind um das gewünschte Ergebnis zu erhalten.

Vielen Dank!
Es wäre so hilfreich, damit ich endlich ein stück weiter kommen könnte... ☺️
 

Robert Zenz

Top Contributor
bild.png - Abmessung: 13 x 8 cm (ca. 491 x 302 pixel)

Nein. Das Bild ist 491x302px grosz. Vielleicht sind noch Metadaten hinterlegt welche die DPI angeben, aber ob diese Hinweise von druckenden Programmen beachtet werden oder nicht, ist Sache des Programms (und des Druckers manchmal).

Nicht mal die 4mm nicht Druckbarerbereich (links, oben, rechts und unten) wird berücksichtigt!

Ich musste noch sehr wenig aus Java heraus drucken, kannst du mal deinen Code zeigen? Gibt da mehrere Wege und waere gut zu sehen was genau du machst.
 

JavaRentner

Aktives Mitglied
Vielen Dank...
Mit dem Link: https://stackoverflow.com/questions/10951394/java-printing-to-specific-page-size-using-label-printer
Habe ich folgende Klasse gebastelt:
Java:
package panelPrint;

import java.awt.Component;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;

import javax.imageio.ImageIO;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.AttributeSet;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.HashAttributeSet;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.standard.Media;
import javax.print.attribute.standard.MediaPrintableArea;
import javax.print.attribute.standard.MediaSize;
import javax.print.attribute.standard.MediaSizeName;
import javax.print.attribute.standard.MediaTray;
import javax.print.attribute.standard.PrintQuality;
import javax.print.attribute.standard.PrinterName;

public class PanelPrint {

    double px2mm = 0.2645833333333;    //    1px = 0.2645833333333 mm
    double dpFaktor = 72.0;
 
    /**
     * Sollte die &uuml;bergebene Komponente samt Objekten drucken (<i>hier ein JPanel</i>)
     * @param printObjekt Die zu druckende Komponente.
     * @param printerName Der Druckername (<i>hier <b>Canon_MF720Cdw</b></i>)
     * @param tray Das Papierfach (<i>"Einzug 1", "Einzug 2" oder "Mehrzweck Papierfach"</i>
     * @param isoTyp Das Papierformat. (<i>A4, C5, usw</i>)
     * @param myPfad Pfad zum Anwendungsorder in dem das erstellte BufferedImage als "print.png" gespeichert wird.
     */
    public PanelPrint(Component printObjekt, String printerName, String tray, String isoTyp, String myPfad) {
        System.out.println("Wirft die aktuelle Position und Gr&ouml;sse des printObjekt:");
        System.out.println("\tprintObjekt X = "+printObjekt.getX()+" px  \tmm = "+(printObjekt.getX()*px2mm));
        System.out.println("\tprintObjekt Y = "+printObjekt.getY()+" px  \tmm = "+(printObjekt.getY()*px2mm));
        System.out.println("\tprintObjekt W = "+printObjekt.getWidth()+" px\tmm = "+(printObjekt.getWidth()*px2mm));
        System.out.println("\tprintObjekt H = "+printObjekt.getHeight()+" px\tmm = "+(printObjekt.getHeight()*px2mm));
     
        AttributeSet aset = new HashAttributeSet();
        aset.add(new PrinterName(printerName, null));

        PrintService[] services = PrintServiceLookup.lookupPrintServices(DocFlavor.INPUT_STREAM.PNG, aset);
        if (services.length >= 1) {
            DocPrintJob pj = services[0].createPrintJob();
         
         
            MediaSizeName msnISO = null;
            switch(isoTyp) {
            case "A4":
                msnISO =  MediaSizeName.ISO_A4;
                break;
            case "C5":
                msnISO =  MediaSizeName.ISO_C5;
                break;
            }

            MediaSize ms = MediaSize.getMediaSizeForName(msnISO);
         
            int msWidth = Math.round(ms.getX(MediaSize.MM));
            int msHeight = Math.round(ms.getY(MediaSize.MM));
         
            PrintService drucker = null;
            drucker = getPrinter(printerName);
         
            //Hier habe ich versucht den Druckbaren bereich fest zu legen!
            MediaPrintableArea mpa = new MediaPrintableArea(4, 4, msWidth, msHeight, MediaPrintableArea.MM);
         
            DocAttributeSet das = new HashDocAttributeSet();
            das.add(msnISO);
            das.add(mpa);
            das.add(PrintQuality.HIGH);
            das.add(getMediaTray(drucker, tray));
         
            FileInputStream fls = null;
            File tmpSave = new File(myPfad+"print.png");
         
            try {
                //Erstellt ein Buffered-Image und speichert es als "../print.png"
                ImageIO.write(getSnapShot(printObjekt), "png", tmpSave);
                //Liest das "../print.png" in FileInputStream (fls) ein.
                fls = new FileInputStream(tmpSave);
                if(fls != null && tmpSave.exists()) {
                    Doc doc = new SimpleDoc(fls, DocFlavor.INPUT_STREAM.PNG, das);
                    pj.print(doc, null);
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
         
            if(tmpSave.exists()) {
//                tmpSave.delete();
                System.exit(0);
            }
        }
    }

    /**
     * Erstellt aus einer Komponente ein <b><font color='blue'>BufferedImage</font></b>
     * @param view Die Komponente (<i>JFrame, JDialog, JPanel, JLabel, etc.</i>)
     * @return Das erstellte <b>BufferedImage</b>.
     */
    private BufferedImage getSnapShot(Component view)
    {
        int w = (int) (view.getWidth());
        int h = (int) (view.getHeight());
        BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
        synchronized (view.getTreeLock())
        {
            view.paint(image.createGraphics());
        }
        return image;
    }
    //-----------------------------------------------------------------------------------------------

    private PrintService getPrinter(String printerName) {
        AttributeSet aset = new HashAttributeSet();
        aset.add(new PrinterName(printerName, null));
        PrintService[] services = PrintServiceLookup.lookupPrintServices(null, aset);
        for (PrintService service : services) {
            if (service.getName().equals(printerName)) {
                return service;
            }
        }
        return null;
    }

    private MediaTray getMediaTray(PrintService printer, String trayName) {  
        DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PAGEABLE;
        Object o = printer.getSupportedAttributeValues(Media.class, flavor, null);
        if (o != null && o.getClass().isArray()) {
            for (Media media : (Media[]) o) {
                if (media instanceof MediaTray) {
                    if(media.toString().equals(trayName)) {
                        return (MediaTray) media;
                    }
                }
            }
        }
        return null;
    }

}
Die Ausgabe Zeilen 41 - 45 ergibt:
Wirft die aktuelle Position und Gr&ouml;sse des printObjekt:
printObjekt X = 15 px mm = 3.9687499999994995
printObjekt Y = 15 px mm = 3.9687499999994995
printObjekt W = 850 px mm = 224.89583333330498
printObjekt H = 596 px mm = 157.6916666666468
In Zeile 74 wollte ich das MediaPrintableArea setzen!
Das DocAttributeSet (das) füttere ich mit den Zeilen 77 - 80

In Zeile 92:
pj.print(doc, null);
verstehe ich nicht was da bei null ev. noch gesetzt werden kann / muss...

Den Tray auswählen funktioniert!
Folgende Ausdrucke werden gemacht:

Tray 2 (A4-Ausdruck.png):
Tray Manual (C5-Ausdruck.png):

Nachtrag:
Egal ob A4 oder C5!
z.B. ist beim übereinanderlegen der Ausdrucke sind die gedruckten Texte exakt gleich gross! Nur beim C5 wird ringsum alles abgeschnitten.

Fazit iwo fehlen im Obigen Code ANGABEN oder es wurden falsche Angaben gesetzt! ??? Verstehs nicht.
 

Anhänge

  • A4-Ausdruck.png
    A4-Ausdruck.png
    967,1 KB · Aufrufe: 0
  • C5-Ausdruck.png
    C5-Ausdruck.png
    559,3 KB · Aufrufe: 0
Zuletzt bearbeitet:

JavaRentner

Aktives Mitglied
grosz = groß -> der Buchstabe ß wird ja auch sz genannt und das ist eine mögliche Schreibweise, wenn z.B. kein ß zur Verfügung ist weil man z.B. eine US Tastatur hat oder so - da ist das ß dann ein ALT + 225 (Zehnertastatur).
Vielen Dank! Schon wieder was dazu gelernt.

Auf der CH-Tastatur (auf einem Linux) kann das ß auch mit [Alt Gr] + s geschrieben werden. Wenn ich gewusst hätte dass ich das NACH meiner Pensionierung noch gebrauchen könnte, hätte ich vor mehr als 48 Jahren, in der Schule besser aufgepasst, wo und wie das eingesetzt werden soll/muss!
😄😄😄😄😄
 

JavaRentner

Aktives Mitglied
Die Frage #1 in diesem Post habe ich hier in Anfänger-Tehmen gestellt weil ich schon mehr als einem Monat versuche
das Script aus:
mit dem Script aus diesem Post #3 zu kombinieren.

Aber egal was ich da zusammenbaue, es kommt nur Müll raus.

Gibt es denn kein einfaches funktionierendes Script welches mir ein PNG (sagen wir 150x150 pixel) zentriert auf einem A4 Papier ohne Druckerdialog ausdrucken kann?
Das PNG lade ich mit: FileInputStream fls = new FileInputStream("/Pfad/bild.png");

Anhand eines funktionierenden Script könnte ich lernen was, wie, wo gesetzt werden muss um das zu erreichen.

Mit Faulheit hat das nichts zu tun.
Wenn sowas mit JAVA gar nicht geht, welche Script-Sprachen könnten mir dann empfohlen werden?

Vielen Dank.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D InputStream parsen und als Bilddatei abspeichern Java Basics - Anfänger-Themen 1
J NullPointerException bei Laden von Bilddatei Java Basics - Anfänger-Themen 16
N Bilddatei laden Java Basics - Anfänger-Themen 42
G Bild in Buffer statt temporäre Bilddatei Java Basics - Anfänger-Themen 6
T Bilddatei aus Internet abspeichern Java Basics - Anfänger-Themen 3
J Probleme mit drucken aus Java Java Basics - Anfänger-Themen 3
M html-seite drucken (gerendert) Java Basics - Anfänger-Themen 3
T DamagedFontException beim drucken Java Basics - Anfänger-Themen 3
I Datei (Bild) Drucken und wie Druckeinstellung speichern? Java Basics - Anfänger-Themen 3
izoards Drucken Frage zu FAQ Beitrag Java Basics - Anfänger-Themen 2
U Drucken.. Birt vs Jasper Java Basics - Anfänger-Themen 1
H Drucken auf Drucker Java Basics - Anfänger-Themen 8
B Drucken mit einem Terminal / Bon Printer Java Basics - Anfänger-Themen 4
B HTML Code drucken Java Basics - Anfänger-Themen 4
B Drucken: Default Paper von Drucker? Mein Drucker druckt falsch Java Basics - Anfänger-Themen 3
B Drucken in JAVA -> nicht "Java printing" Java Basics - Anfänger-Themen 3
D Erste Schritte HTML aus JEditorPane drucken Java Basics - Anfänger-Themen 5
I Drucken in Java / verschiedene Papierformate Java Basics - Anfänger-Themen 0
I Drucken (Print) monitoren Java Basics - Anfänger-Themen 0
I Erste Schritte Drucken in JAVA / Druckaufträge etc. Java Basics - Anfänger-Themen 15
T Drucken mit Java Java Basics - Anfänger-Themen 16
E Input/Output Drucken am Mac immer gleiche Schriftgröße?!? Java Basics - Anfänger-Themen 2
E Input/Output png Auf Dymo 450 drucken Java Basics - Anfänger-Themen 2
S JPanel drucken -> PrinterException Java Basics - Anfänger-Themen 2
C Drucken/Druckdesign mit Java Java Basics - Anfänger-Themen 8
J checkbox status abfragen und drucken Java Basics - Anfänger-Themen 13
K doppeltes paint beim Drucken Java Basics - Anfänger-Themen 8
B Source Code "in einem Rutsch" drucken in Eclipse Java Basics - Anfänger-Themen 5
K Drucken Java Basics - Anfänger-Themen 8
G Mit Java Drucken Java Basics - Anfänger-Themen 11
O OOP prindata Methode aufrufen!? Methode drucken + Konstruktor Java Basics - Anfänger-Themen 9
G DRUCKEN von z.B. eines JFrame über print(Graphics g) Java Basics - Anfänger-Themen 9
K einfaches Drucken von Text (und ggf Bildern,gemischt) Java Basics - Anfänger-Themen 11
N barbecue Barcodes drucken Java Basics - Anfänger-Themen 5
H Bericht drucken Java Basics - Anfänger-Themen 4
T [Minimalprogramm] mit Java Drucken Java Basics - Anfänger-Themen 6
L drucken mit DocPrintJob Java Basics - Anfänger-Themen 3
R Drucken mithilfe eines Externen ActionListeners Java Basics - Anfänger-Themen 17
S Inhalt von GUI-Eingabe drucken Java Basics - Anfänger-Themen 7
I PDF aus JSF - Seite drucken mit iText Java Basics - Anfänger-Themen 5
J JTable Drucken Java Basics - Anfänger-Themen 3
J mit COM-Port drucken Java Basics - Anfänger-Themen 8
R mehrseitiges Drucken Java Basics - Anfänger-Themen 3
J Listen - Anzahl positiver Werte drucken Java Basics - Anfänger-Themen 8
H Papierschacht beim Drucken ansprechen Java Basics - Anfänger-Themen 4
T Drucken von Listen bestehend aus Grafik und Text (unter swing) Java Basics - Anfänger-Themen 7
A JTree drucken Java Basics - Anfänger-Themen 2
M html datei drucken Java Basics - Anfänger-Themen 18
E BufferedImage drucken Java Basics - Anfänger-Themen 3
K Drucken mit PrinterJob Java Basics - Anfänger-Themen 3
andresendo Drucken Java Basics - Anfänger-Themen 2
D Drucken - Seite leer Java Basics - Anfänger-Themen 2
S Drucken mit iText? Java Basics - Anfänger-Themen 7
T Formular drucken! Java Basics - Anfänger-Themen 2
S Drucken in farbe Java Basics - Anfänger-Themen 4
G Problem mit Drucken Java Basics - Anfänger-Themen 2
G Strings drucken Java Basics - Anfänger-Themen 2
N Im Querformat drucken mit PrintJob Java Basics - Anfänger-Themen 4
Z Drucken eines JTables mit Text drüber Java Basics - Anfänger-Themen 6
S ich komm mit dem drucken nich klar Java Basics - Anfänger-Themen 17
S Drucken! Java Basics - Anfänger-Themen 16
B Formatierung beim Drucken Java Basics - Anfänger-Themen 4
D Drucken Java Basics - Anfänger-Themen 3
M Drucken Java Basics - Anfänger-Themen 2
B RTF erstellen und drucken Java Basics - Anfänger-Themen 3
G Drucken mit PrintJob oder PrinterJob? Java Basics - Anfänger-Themen 4
F Drucken einer Text Datei Java Basics - Anfänger-Themen 2
M Probleme beim Drucken Java Basics - Anfänger-Themen 4
R String drucken Java Basics - Anfänger-Themen 3
G Drucken von pdf Dokumenten mit Lücken Java Basics - Anfänger-Themen 2
J Drucken von files Java Basics - Anfänger-Themen 4
D Drucken ohne Dialogfeld Java Basics - Anfänger-Themen 2
E HTML Datei drucken Java Basics - Anfänger-Themen 4
G drucken: genaues positionieren Java Basics - Anfänger-Themen 2
R rechtsbündiges Drucken Java Basics - Anfänger-Themen 2
G Drucken Java Basics - Anfänger-Themen 2
D PDF Dokument drucken Java Basics - Anfänger-Themen 10
S verständnisproblem drucken Java Basics - Anfänger-Themen 11
J Serienbrief drucken Java Basics - Anfänger-Themen 2
A Drucken mit Java über FOP Java Basics - Anfänger-Themen 9
B Bilder drucken Java Basics - Anfänger-Themen 4
M Formatiert Drucken in Java Java Basics - Anfänger-Themen 3
A Drucken und Vorschau Java Basics - Anfänger-Themen 4
F Java-Logo drucken Java Basics - Anfänger-Themen 2
S Noch ungelöst ! Klasse JTable und Klasse Drucken verknüpfen. Java Basics - Anfänger-Themen 8
M DATEI DRUCKEN ????? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben