erstellen und drucken eines Reports

dump

Grünschnabel
Hi,

ich will in meiner Applikation einen Report ausdrucken können. Den Report habe ich bereits im Designer zusammen geklickt und testweise konnte ich ihn mir mit dem ReportViewer in meiner Applikation auch anzeigen. Nun will ich aber den ReportViewer nicht benutzen, denn ich will ja nur drucken.

Wie gehe ich also nun vor?
Bisher habe ich folgendes zusammen:
Code:
LocalReport report = new LocalReport();
report.DataSources.Add(new ReportDataSource("SourceName",source));
report.ReportEmbeddedResource = "Report01.rdlc";

ReportEmbeddedResource weil Report01.rdlc scheinbar ins Assemply mit aufgenommen wurde.

Wie muss ich weitermachen? report.Render vieleicht? Gibt es für den Befehl irgendwo eine ausführliche Anleitung?

EDIT: ach und wie kann ich im report externe Bilder angeben? Wenn ich als Source Extern angebe und als Value den Pfad zum Bild dann frist er das nicht. Stattdessen mein er das EnableExternalImages property wäre nicht gesetzt. wo kann man das den setzen?

EDIT: ah ok habe das wegen der Bilder gefunden -> report.EnableExternalImages = true;
 
Zuletzt bearbeitet:
Hmm also ich habe jetzt anhand eines Beispiels aus der MSDN etwas zusammen gebaut das etwa eine 90% Lösung ist. Nur dummerweise wirft er mir eine Exception (System.Runtime.InteropServices.ExternalException) wenn ich etwas drucken will.

Code:
private void printMap()
{
	LocalReport report = new LocalReport();
	report.EnableExternalImages = true;
	report.DataSources.Add(new ReportDataSource("Tool_PrintMapObject", INIReader.Printmap_objects));
	report.ReportEmbeddedResource = "Tool.Report01.rdlc";

	Warning[] warnings;
	string deviceInfo =
	"<DeviceInfo>" +
	"  <OutputFormat>PNG</OutputFormat>" +
	"</DeviceInfo>";

	printer_Pages = new List<Stream>();
	report.Render("Image", deviceInfo, CreateStream, out warnings);

	foreach (Stream stream in printer_Pages)
		stream.Position = 0;

	printer_PageIndex = 0;

	PrintDocument printDoc = new PrintDocument();
	printDoc.DocumentName = "Tool Map";

	if (printDoc.PrinterSettings.IsValid)
	{
		printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
		printDoc.Print(); 
	}
	else MessageBox.Show("hmm", "Print Error");

	foreach (Stream stream in printer_Pages)
		stream.Close();

	printer_Pages = null;
}

private Stream CreateStream(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek)
{
	Stream stream = new FileStream(name +  "." + fileNameExtension, FileMode.Create);
	printer_Pages.Add(stream);
	return stream;
}

private void PrintPage(object sender, PrintPageEventArgs ev)
{
	Metafile pageImage = new Metafile(printer_Pages[printer_PageIndex]); // hier wirft er die exception
	ev.Graphics.DrawImage(pageImage, ev.PageBounds);

	printer_PageIndex++;

	ev.HasMorePages = (printer_PageIndex < printer_Pages.Count);
}
 
Habs es lag daran das er mit PNG als OutputFormat nicht klar kommt. Habe eben wie im msdn Beispiel EMF (was auch immer das sein soll) benutzt und jetzt geht es.

Das MS bis heute noch Probleme mit PNGs macht ist langsam nur noch peinlich.
 
Zurück