Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[gelöst] Einfache Druck-Klasse gesucht
Dominicano
myCSharp.de - Member



Dabei seit:
Beiträge: 23
Herkunft: Dajabon

Themenstarter:

[gelöst] Einfache Druck-Klasse gesucht

beantworten | zitieren | melden

Hallo Community

Ich befasse mich erst seit kurzem mit C#, habe aber schon in anderen Sprachen programmiert.

Im Moment bin ich auf der Suche nach einer "einfachen" Klasse , mit der ich Bilder im Querformat mit einer bestimmten Größe (immer die selbe) drucken kann.
In Java hatte ich mir eine einfache Klasse (79 Zeilen) geschrieben, die perfekt funktioniert:
package xyz; // abzuändern für das jeweilige Projekt

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);
        }
    }
}
Hat "zufällig" jemand etwas Ähnliches schon in petto, bzw. gibt es die Möglichkeit, diese Klasse direkt in C# einzubinden?

MfG Dom.
private Nachricht | Beiträge des Benutzers
janismac
myCSharp.de - Member



Dabei seit:
Beiträge: 183

beantworten | zitieren | melden

Drucken

MfG janismac
private Nachricht | Beiträge des Benutzers
Dominicano
myCSharp.de - Member



Dabei seit:
Beiträge: 23
Herkunft: Dajabon

Themenstarter:

beantworten | zitieren | melden

Dank der die vielen hilfreichen Antworten, habe ich mir eine eigene Print-Klasse zusammenbauen können. Nicht so schön wiederverwendbar wie in Java, aber für meine Zwecke ausreichend.

Dom.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Dominicano,

dann poste die doch bitte.

herbivore
private Nachricht | Beiträge des Benutzers
Dominicano
myCSharp.de - Member



Dabei seit:
Beiträge: 23
Herkunft: Dajabon

Themenstarter:

beantworten | zitieren | melden

Warum? Hat jemand daran interesse?

Zum einen ist das speziell zum Drucken von DVD-Hüllen , zum anderen genauso Chaotisch aufgebaut wie es die Anleitungen von Mircosoft sind. Mir hat die Seite von O´Reilly (hier) sehr geholfen.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Dominicano,

es geht einfach nur um das hier: [Hinweis] Wie poste ich richtig? Punkt 9

Jemand der später das gleiche Problem hat, wie du jetzt, der hat dann gleich eine Lösung.

Vielen Dank!

herbivore
private Nachricht | Beiträge des Benutzers
Dominicano
myCSharp.de - Member



Dabei seit:
Beiträge: 23
Herkunft: Dajabon

Themenstarter:

beantworten | zitieren | melden

Aufgrund des vorangestellten Beitrags jetzt 'meine' Lösung:
1. Print_Button

private void print_Button(object sender, EventArgs e)
        {
            printDoc.PrintPage += new PrintPageEventHandler(Print_Page);
            printDoc.DefaultPageSettings.Landscape = true;
            printDoc.DefaultPageSettings.PrinterResolution.Kind = PrinterResolutionKind.High;
            printDoc.Print();
        }
2. Print_Page Methode

private void Print_Page(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            new PrintGraphics((Bitmap.FromFile("Wag.jpg")), e, printDoc);
        }
3. PrintGraphics Klasse

using System;
using System.Drawing;
using System.Drawing.Printing;
using System.IO;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;


namespace DVD_Database
{
	
	public class PrintGraphics
	{
		public PrintGraphics(Image image,PrintPageEventArgs e, PrintDocument pd)
		{
            picture = new Bitmap(image);
            printDoc_PrintPage(e);
		}
        // -------------- event handler ------------------------------------
        public void printDoc_PrintPage(PrintPageEventArgs e)
        {
            int leftMargin = e.MarginBounds.Left;
            int topMargin = e.MarginBounds.Top;
            Graphics g = e.Graphics;
            g.PageUnit = GraphicsUnit.Pixel;
            g.DrawImage(picture, 100, 100, 6435.000f, 4360.000f);
        }

        //-------------- end of event handlers -----------------------------
        private Bitmap picture;
	}
}

Erläuterung:

1. Ein Button (kann auch ein Menüeintrag, oder Ähnliches sein) als Steuerelement für Benutzereingabe. Darin (für mich eigentlich unlogisch, gehört in Druck-Klasse) die Druckereinstellungen für "Breitbild" (Landscape) und Auflösung, und Weiterleitung an Print_Page(2.).
2. (Für mich wiederrum eine unnötige Resourcenverschwendung) Weiterleitung an die PrintGraphics Klasse mit Bitmap(ausnahmsweise Hardcodiert ; Bild muß im selben Ordner sein wie die ausführbare .exe).
3. PrintGraphics Klasse, welche die eingentlichen Arbeit macht: Das Bild mit entsprechender Bemaßung auf´s Papier bringen (exakt DVD-Cover Größe). Natürlich sind auch andere Formen(Rect, Cicle, Arc, String, usw.) und Farben möglich.

Ich hoffe, daß dies ausreicht.

MfG Dom.

PS: Closen
private Nachricht | Beiträge des Benutzers