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.
MfG janismac
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.
Hallo Dominicano,
dann poste die doch bitte.
herbivore
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.
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
Aufgrund des vorangestellten Beitrags jetzt 'meine' Lösung:
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();
}
private void Print_Page(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
new PrintGraphics((Bitmap.FromFile("Wag.jpg")), e, printDoc);
}
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:
Ich hoffe, daß dies ausreicht.
MfG Dom.
PS: Closen