Ausdruckbares Label innerhalb VB erzeugen

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von MaxPlj.

    Ausdruckbares Label innerhalb VB erzeugen

    Guten Morgen liebe Community,

    um mein laufendes Projekt/Programm zu optimieren fehlt mir leider ein wenig know how.

    Momentan funktioniert das Ganze wie folgt:

    Nach Eingabe der Beispiel-Daten "Name", "Nachname" und "Wohnort" wird mit einem Klick auf "Bestätigen" ein bereits vorgefertigtes PDF-Dokument mit vermeintlich diesen Daten ausgedruckt.

    Dabei prüft mein Programm nur, welcher Name, Nachname und Wohnort eingegeben wurde und sucht sich quasi das passende PDF-Dokument aus.

    Dieses PDF-Dokument ist in Form eines "Label" aufgebaut, also hat es eine gewisse Formatierung innerhalb von Word.

    Nun stellt sich mir die Frage, wie ich relativ simpel die Eingegeben Daten aus VB an vordefinierte Stellen nach Word übergeben kann.

    Oder gegebenenfalls innerhalb VB eine Word-Datei so zu formatieren wie ich sie benötige.

    Falls es weiterhilft: Das Label hat den Aufbau einer DIN A5 Seite und die Daten kommen darin zweimal vor.

    Die Fragestellung mag ein wenig verwirrend sein, deshalb bitte ich bei unklarheiten um Info.

    Ansonsten vorab vielen Dank für die Antworten. :)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    Vielleicht versteh ich auch das Problem falsch, aber: In Deinem Worddokument platzierst Du Dir Platzhalter, die Du dann bei Suchen und Ersetzen mit den passenden Daten füllst. Wäre das ggf. eine hinreichende Lösung?
    Beispiel:
    Im Word-Dokument steht (ggf. auch an mehreren Stellen)

    Quellcode

    1. #Name#
    2. #Anschrift#
    und in VB führst Du mittels Wordzugriff ein Suchen-und-Ersetzen durch: Suche nach #Name#, ersetze es durch Deinen konkreten Namen; suche nach #Anschrift#, ...
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Mir bleibt jedoch ein Punkt offen, welchen ich innerhalb des Tutorial leider nicht verstehe, bzw. korrekt umsetzen kann.

    @VB1963 kann sicherlich helfen:

    Ich möchte den Ausdruck per Buttonklick starten, ohne das Report-Fenster zu öffnen.
    Mit dem Tutorial komme ich absolut nicht klar, was ich hier wie zu tun habe.

    Eventuell gibt es hier auch unterschiede, da ich keine Datenbank o.ä. angebunden habe.
    Im Kapitel 9 meines Tut's wird's doch genau beschrieben, wie es geht...
    Du musst nur die Klasse DirectPrinting.vb in dein Projekt mit aufnehmen.
    Wenn du keine DB verwendest, wirst du wohl über Reportparameter deine Daten in den Report übergeben - und das wird dort auch gezeigt...
    Wo klemmt es den genau?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()

    Konnte mein Problem mit folgendem Code lösen.

    Vielen Dank für die Unterstützung

    VB.NET-Quellcode

    1. Dim report As LocalReport = New LocalReport()
    2. report.ReportPath = Application.StartupPath & "\Rpt\Report1.rdlc"
    3. Dim rpEmployeeSSN As New ReportParameter()
    4. rpEmployeeSSN.Name = "S1P1"
    5. rpEmployeeSSN.Values.Add("S1P1_Value")
    6. 'Set the report parameters for the report
    7. Dim parameters() As ReportParameter = {rpEmployeeSSN}
    8. report.SetParameters(parameters)
    9. Export(report)
    10. Print()
    Export:

    VB.NET-Quellcode

    1. Private Sub Export(ByVal report As LocalReport)
    2. Dim deviceInfo As String = "<DeviceInfo>" &
    3. "<OutputFormat>EMF</OutputFormat>" &
    4. "<PageWidth>8.5in</PageWidth>" &
    5. "<PageHeight>11in</PageHeight>" &
    6. "<MarginTop>0.25in</MarginTop>" &
    7. "<MarginLeft>0.25in</MarginLeft>" &
    8. "<MarginRight>0.25in</MarginRight>" &
    9. "<MarginBottom>0.25in</MarginBottom>" &
    10. "</DeviceInfo>"
    11. Dim warnings As Warning()
    12. m_streams = New List(Of Stream)()
    13. report.Render("Image", deviceInfo, AddressOf CreateStream, warnings)
    14. For Each stream As Stream In m_streams
    15. stream.Position = 0
    16. Next
    17. End Sub

    Print:

    VB.NET-Quellcode

    1. Private Sub Print()
    2. If m_streams Is Nothing OrElse m_streams.Count = 0 Then
    3. Throw New Exception("Error: no stream to print.")
    4. End If
    5. Dim printDoc As New PrintDocument()
    6. If Not printDoc.PrinterSettings.IsValid Then
    7. Throw New Exception("Error: cannot find the default printer.")
    8. Else
    9. AddHandler printDoc.PrintPage, AddressOf PrintPage
    10. m_currentPageIndex = 0
    11. printDoc.Print()
    12. End If