Aus VB.NET ein Metafile per PDF Creator als eps Datei exportieren
Hallo!
Mein Ziel ist es, ein Metafile als eps Grafik abspeichern zu können. Da VB.NET leider keine eps Grafiken abspeichern kann, wollte ich es über den PDF Creator lösen. Ich habe mich ersteinmal am Abspeichern als ps versucht, aber da wird das Metafile mal zu klein, mal viel zu groß und einfach mal "hochkant" abgespeichert ohne das ich das wollte.
Ich denke es liegt an den Einstellungen, die ich noch nicht so recht verstehe. Darum frage ich euch in der Hoffnung auf Erleuchtung.
Ersteinmal mein Test-Code:
Ich erzeuge in meinem Programm ein Metafile. Das ist dieses.
Größe und Breite wurden berechnet, die DPI auch.
Da gibt es den ersten Punkt, den ich nicht verstehe: Warum hat das Metafile immer eine Auflösung von 101.6 DPI?
Jetzt aber zu dem Druckproblem.
Ich habe bis jetzt den Ansatz, dass ich die Papiergröße genau auf die Größe des Metafiles zuschneide und die Ränder alle auf 0 setze. Klappt auch. Da die Frage: Warum muss ich die DefaultPageSettings nochmal überschreiben, wo ich die doch in Pagesettings schon alle gesetzt habe? Sonst übernimmt er die Einstellungen leider nicht korrekt und ich habe nur die PrintableArea von einem Din A4 Blatt oder so. Sprich es kommt nur Mist raus.
Und dann verstehe ich dieses nicht wirklich.
Ich verstehe ja, dass man das Metafile durch praktisch "auf den Drucker" zeichnet. Aber woher weiß ich welche Einheit der will? Sind es die 1/100 Zoll, die man bei den Pagesettings angeben muss? Wenn ich das als 1/100 Zoll angebe, kommt nur Mist raus. Bei Zoll geht es komischerweise. Aber das Rectangle hat doch nix mit dem Drucken zu tun? Es wird doch in Pixel angegeben? Warum dann diese Einheit?
Dann habe ich jetzt aktuell das Problem dass mir dieser Code das Metafile zwar als ps abspeichert, aber es steht "hochkant". Wenn ich ein anderes Metafile erzeuge mit einer anderen Größe, dann wird es manchmal richtig herum ausgespuckt. Woher kommt das? Gibt es noch eine Einstellung die ich noch nicht gefunden habe? So etwas wie Autorotate = False oder so?
Jetzt noch abschließend eine Frage:
Wie stelle ich ein, dass mir der PDF-Creator gleich von vornherein eine eps Datei erzeugt und nicht erst ein ps?
Finde dazu irgendwie keine Einstellungen. Aber das könnte ich auch noch anders lösen.
Vielen Dank schon mal im Vorraus!
florengray
Mein Ziel ist es, ein Metafile als eps Grafik abspeichern zu können. Da VB.NET leider keine eps Grafiken abspeichern kann, wollte ich es über den PDF Creator lösen. Ich habe mich ersteinmal am Abspeichern als ps versucht, aber da wird das Metafile mal zu klein, mal viel zu groß und einfach mal "hochkant" abgespeichert ohne das ich das wollte.
Ich denke es liegt an den Einstellungen, die ich noch nicht so recht verstehe. Darum frage ich euch in der Hoffnung auf Erleuchtung.
Ersteinmal mein Test-Code:
Private WithEvents PrintDocument1 As New Printing.PrintDocument
Private Sub Print_to_ps()
If DC.Export_Metafile Is Nothing Then Exit Sub
With PrintDocument1
' Dokument-Title
.DocumentName = "Print_DC"
.PrinterSettings.PrinterName = "PDFCreator"
.PrinterSettings.PrintToFile = True
.PrinterSettings.PrintFileName = "F:\Textexport.ps"
' Ausdruck starten
.Print()
End With
End Sub
Private Sub Change_Pagesettings(ByVal sender As Object, ByVal e As Printing.QueryPageSettingsEventArgs) Handles PrintDocument1.QueryPageSettings
With e.PageSettings
.PaperSize = New Printing.PaperSize With {.Height = 100 * DC.Export_Metafile.Height / DC.Export_Metafile.VerticalResolution, .Width = 100 * DC.Export_Metafile.Width / DC.Export_Metafile.HorizontalResolution, .RawKind = 0, .PaperName = "DC_Export"}
.PrinterResolution = New Printing.PrinterResolution With {.X = DC.Export_Metafile.HorizontalResolution, .Y = DC.Export_Metafile.VerticalResolution}
.Margins = New Printing.Margins With {.Bottom = 0, .Left = 0, .Right = 0, .Top = 0}
.PrinterSettings.DefaultPageSettings.Margins = .Margins
.PrinterSettings.DefaultPageSettings.PrinterResolution = .PrinterResolution
.PrinterSettings.DefaultPageSettings.PaperSize = .PaperSize
End With
End Sub
Private Sub Printing(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim gr As Graphics = e.Graphics
gr.PageUnit = GraphicsUnit.Inch
' Rechteck für den Ausdruck festlegen
Dim Area As Rectangle = New Rectangle(0, 0, DC.Export_Metafile.Width / DC.Export_Metafile.HorizontalResolution, DC.Export_Metafile.Height / DC.Export_Metafile.VerticalResolution)
' Bild im angegebenen Rechteck drucken
gr.DrawImage(DC.Export_Metafile, Area)
gr.Dispose()
End Sub
Ich erzeuge in meinem Programm ein Metafile. Das ist dieses
DC.Export_Metafile
Größe und Breite wurden berechnet, die DPI auch.
Da gibt es den ersten Punkt, den ich nicht verstehe: Warum hat das Metafile immer eine Auflösung von 101.6 DPI?
Jetzt aber zu dem Druckproblem.
Ich habe bis jetzt den Ansatz, dass ich die Papiergröße genau auf die Größe des Metafiles zuschneide und die Ränder alle auf 0 setze. Klappt auch. Da die Frage: Warum muss ich die DefaultPageSettings nochmal überschreiben, wo ich die doch in Pagesettings schon alle gesetzt habe? Sonst übernimmt er die Einstellungen leider nicht korrekt und ich habe nur die PrintableArea von einem Din A4 Blatt oder so. Sprich es kommt nur Mist raus.
Und dann verstehe ich dieses
gr.PageUnit = GraphicsUnit.Inch
Ich verstehe ja, dass man das Metafile durch
gr.DrawImage(DC.Export_Metafile, Area)
Dann habe ich jetzt aktuell das Problem dass mir dieser Code das Metafile zwar als ps abspeichert, aber es steht "hochkant". Wenn ich ein anderes Metafile erzeuge mit einer anderen Größe, dann wird es manchmal richtig herum ausgespuckt. Woher kommt das? Gibt es noch eine Einstellung die ich noch nicht gefunden habe? So etwas wie Autorotate = False oder so?
Jetzt noch abschließend eine Frage:
Wie stelle ich ein, dass mir der PDF-Creator gleich von vornherein eine eps Datei erzeugt und nicht erst ein ps?
Finde dazu irgendwie keine Einstellungen. Aber das könnte ich auch noch anders lösen.
Vielen Dank schon mal im Vorraus!
florengray
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 204273
Url: https://administrator.de/contentid/204273
Ausgedruckt am: 23.11.2024 um 01:11 Uhr
1 Kommentar