Imagegenerator für die Erstellung von Produktionsdatenblättern

04 Dezember 2013
Andreas Heizmann

Vor kurzem wurde ich damit beauftragt einen Prototyp für eine neue browserbasierte .Net Softwareanwendung zu entwickeln.

Die Anforderungen der Softwareentwicklung bestanden daraus, verschiedene technische Zeichnungen miteinander zu kombinieren und eine neue Zeichnung daraus zu erzeugen. Diese sollte direkt als Download zur Verfügung stehen und im Anschluss in Produktionsdatenblättern eingebunden werden können.

Die Zeichnungen bestehen aus skalierbaren Vektorgrafiken welche im svg-Format auf dem Server abgelegt werden. Der Prototyp sollte nun in der Lage sein mehrere dieser svg-Dokumente übereinander zu legen und als Bitmap abzuspeichern.

Mit den vorhandenen Werkzeugen des .Net Frameworks ist es leider nicht möglich svg-Dokumente zu rendern. Hierfür kann man jedoch eine offene Library verwenden: https://svg.codeplex.com/

Diese ist via Nuget Package schnell im Projekt eingebunden:

  1. PM>Install-PackageSvg

Nun zum Code:

Öffnen der Datei:

  1. SvgDocumentsvgDoc=SvgDocument.Open(filepath);

Bevor man das Bild rendert sollte man die Größe festlegen:

  1. svgDoc.Width=newSvgUnit(width);
  2. svgDoc.Height=newSvgUnit(height);

Rendern als Bitmap:

  1. System.Drawing.ImagebitmapImage=svgDoc.Draw();

Damit hat man das svg-Dokument schon mal als Bitmap vorliegen. Kombinieren lassen sich die Bitmaps dann wieder mit .Net Framework Bordmitteln:

  1. using(varbitmap=newBitmap(width,height))
  2. {
  3. using(varcanvas=Graphics.FromImage(bitmap))
  4. {
  5. canvas.Clear(System.Drawing.Color.White);canvas.DrawImageUnscaled(bitmap,0,0);// Bild 1
  6. canvas.DrawImage(bitmapImage1,0,0);// Bild 2
  7. canvas.DrawImage(bitmapImage2,(float)0.0,(float)17.79);canvas.Save();
  8. }
  9.  
  10. bitmap.Save("Combined.bmp",ImageFormat.Bmp);
  11. }