erik87
Goto Top

Druckformular

Hallo Forumgemeinde,


ich habe eine Kalkulationssoftware entwickelt welche ich gerne durch eine Druckfunktion erweitern möchte. Nur leider habe ich keine Ahnung wie :D

Also ich habe folgendes schon durch stundenlange suche hinbekommen:


 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim x = PrintDialog1.ShowDialog()
        PrintDocument1.PrinterSettings.PrinterName = PrintDialog1.PrinterSettings.PrinterName
        PrintDocument1.Print()
    End Sub
    
   Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        Dim Kimg As Image
        Kimg = Image.FromFile("E:\Projekte\Software\Professionelle Programme\ZRW - Grafik\ZRW\bin\Debug\obj\Kopf.jpg")  
        Dim PF As Font = New Font("Comic Sans MS", 12, FontStyle.Bold)  
        e.Graphics.DrawString("Zeile 1:", PF, Brushes.Black, x, 1)  
        e.Graphics.DrawImage(Kimg, 1, 10)
    End Sub



Also Texte einfügen und Bilder klappt soweit. Jedoch hätte ich noch ein paar fragen:

1.) Wie kann ich die Pixel in cm umrechnen? Beziehungsweise die x- und y-koordinaten. Habe mir überlegt die Eigenschaften e.PageBounds.Height und e.PageBounds.Height einfach durch die Längen der A4-Seiten zu rechnen und schon habe ich ein Verhältnis. bin mir aber nicht sicher ob das klappt. Eventuell gibt es ja eine Standardfunktion dafür?!

2.) Kann ich das Druckdokument schon irgendwie bevor ich es zum drucker schicke zusammenbasteln??? das muss ja irgendwie gehen :S denn ich brauche mehr als 1 Seite und hätte auch gerne eine Vorschau...

ich denke da kommen noch Folgefragen. Aber erstmal reicht das :D


Mit freundlichsten Grüßen

Content-ID: 164443

Url: https://administrator.de/contentid/164443

Ausgedruckt am: 16.11.2024 um 21:11 Uhr

Okeanos85
Okeanos85 13.04.2011 um 10:25:10 Uhr
Goto Top
Hallo,

mit dem lieben Drucken kann man Tage zubringen ehe alles richtig klappt und dann wenn man denkt es funktioniert alles...fragt jemand geht das auch auf einem anderen Drucker und man stellt fest das alles wieder ganz anders aussieht.
Korrigiert mich also bitte falls ich mit folgendem falsch liege...


1. Am einfachsten geht so etwas mit dem Taschenrechner. Din A4 Seite: Breite 21 cm Höhe 29,7 cm.
Das rechnen wir jetzt mal in zoll um:

1 Zoll = 2,54cm im Englischen Inch
Din A4: Breite 21/ 2,54 = 8,267716535433071" (Zoll)
Din A4: Höhe = 29,7/2,54 = 11,69291338582677" (Zoll)


jetzt brauchst Du noch die Auflösung deines Bildes. Je höher die auflösung desto schärfer kannst Du zeichnen.
Das Stichwort ist hier ppi: PixelPerInch

Beispielsweise eine Auflösung von 200 ppi.

Breite 8,267716535433071" * 200 = 1654px (aufgerundet)

Höhe: 11,69291338582677" * 200 = 2339px (aufgerundet)

Nun zum Quelltext:

Dim kk As New Bitmap(1654, 2339)
kk.SetResolution(200, 200)


So und nun zum Kern der 1. Frage: weil ich ja meine Auflösung festgelegt habe kann ich genauso rückrechnen (2,54 cm / 200 ppi) * [Deiner Pixelzahl] = cm Position auf dem DinA4 Blatt


Zur 2. Frage: mit dem Teil aus 1. und den PrintPreview Controls sollte sich soetwas basteln lassen.

MfG

Okeanos85
erik87
erik87 13.04.2011 um 19:12:01 Uhr
Goto Top
Hallo,

Ok, soweit habe ich das verstanden. Aber wie gehe ich nun genau vor? Mir fehlt so ein wenig das Kochrezept.

Ich arbeite mit VB 2008. Dort ist es möglich ein Objekt namens PrintDocument in der Form einzufügen. Wenn ich mich nicht irre, glaube ich das dieses nur einer Seite umfasst??? (Jedenfalls habe ich keine Eigenschaft gefunden, bei der ich eine Seitenzahl einstellen kann.) Diese eine Seite wird immer nur nach dem Aufruf PrintDocument1.print gedruckt. Also müsste ich mir eine globale Variable einrichten die mir die Seitenzahlen durch läuft und dann im PrintPage-handler die entsprechende Seite zur Laufzeit erstellen?

Das macht in meinen Augen kein Sinn. Wenn ich nun 10 Seiten zu pdf drucken möchte habe ich ja 10 pdf-dokumente anstelle von einem. -.-

Da die Seiten vom Grundaufbau immer gleich sind und ich einfach nur die Tabellen füllen und dann drucken möchte habe ich schon überlegt einfach eine HTML zur Laufzeit zu Erstellen und die dann zu drucken. Wäre das Sinnvoller/einfacher???

Wenn ja, worauf muss ich achten und wie schicke ich diese HTML dann zum drucker? Kann ich dem Printdocument die Html in etwa so: Printdocument = HTML zuweisen??

Kennst du eventuell einen Link zu einer Anleitung, welche sich mit dieser Problematik beschäfftigt? Meine Bücher geben da leider nichts her... face-sad


Mit freundlichen Grüßen
Okeanos85
Okeanos85 14.04.2011 um 09:11:40 Uhr
Goto Top
Hallo,

also man kann auch mit printDocument mehrseitig drucken. der Trick dabei ist: e.HasMorePages=True in der printPage Routine. Dies löst immer wieder das das printPage Ereigniss aus solange bis Du e.HasMorePages=False setzt. Was den Inhalt der Seiten betrifft, den musst Du für jede Seite generieren lassen. Dann würde auch ein PDF herauskommen und nicht 10.
PDF ist wieder so eine Sache. Um PDF zu drucken würde ich Dir [pdfsharp.com diesen Link] zu PDF Sharp mal geben wolen. Ich habe bisher immer einen Bogen darum gemacht mit PDF's zu Drucken, aber Naja musste mal probieren.

HTML zum Drucker bestimmt auch möglich über die Web Browser Komponente in VB. Hast Du schon einmal über eine Drittanbieter Komponente nachgedacht? List & Label 16 ist Da ein wirklich gutes Programm, wenn auch nicht gerade umsonst.

So nun noch ein paar Links die sich damit beschäftigen:

1

2

3


Ich hoffe Du wirst fündig... falls weitere Fragen aufkommen, nur her damit.

MfG

Okeanos85
erik87
erik87 14.04.2011 um 21:22:31 Uhr
Goto Top
Hallo,

danke, danke danke!!!! Das ist denke ich alles was ich wissen muss. Den Rest bekomme ich selber hin. ( denke ich xD )


Ohne deine Links gesichtet zu haben möchte ich dich noch darauf hinweisen das ich keine PDF´s erstellen möchte. Ich habe nur nen PDF-Druckertreiber installiert. Diesen steuer ich ja genauso wie den Drucker an xD.

So, jetzt muss ich die Bilder/Vorlagen programmieren face-smile


Mfg.
Okeanos85
Okeanos85 15.04.2011 um 08:15:57 Uhr
Goto Top
Hallo,

Na dann Wünsche ich noch viel Erfolg. Und bei weiteren Fragen ruhig schreiben...

MfG

Okeanos85