none
WPF Fensterinhalt in ein Word Dokument speichern RRS feed

  • Frage

  • Hallo zusammen,

    ich suche nach einer Methode den Inhalt eines geöffneten WPF Fensters in eine Word- oder PDF-Datei zu kopieren.

    Danke und viele Grüße

    Carl-Heinz

    Freitag, 10. Februar 2017 10:11

Antworten

  • Hallo Carl-Heinz,

    für einen Test habe ich eine Form mit einem Button, einer TextBox und einem Image Control (letzteres "Image1") erstellt.

    Mit dem folgenden Code wird der Inhalt des Formulars gerendert und dem Image Control zugewiesen.

    Private Sub Button_Click(sender As Object , e As RoutedEventArgs)
    
    Dim bmp As New RenderTargetBitmap( 400, 200, 72, 72, New System.Windows.Media.PixelFormat() )
        bmp.Render( Me )
    
        Me.Image1.Source = bmp
    
    End Sub
    

    D.h. die ersten beiden Zeilen wären das, was Du für die Erzeugung der Grafik brauchst.

    Wie Du die jetzt in Word oder PDF bekommst, hängt - wie gesagt - davon ab, wie Du auf Word oder Pdf zugreifst. Da es da viele Möglichkeiten gibt, beschreib bitte zuerst, wie deine Zugriffe hier aussehen oder such dir eine Möglichkeit aus. Es gibt kostenlose (meist nicht ganz so einfach nutzbare) als auch kostenpflichtige (oft einfacher nutzbare, teils aber recht teure) Möglichkeiten.

    Word Automation setzt auf jedem Ziel PC eine passende Word Installation (in der erwarteten Version) voraus. Falls das nicht gegeben ist, müsstest Du das Dokument auf anderem Weg erzeugen.

      https://www.google.de/?gws_rd=ssl#q=.net+word+document

      https://www.google.de/?gws_rd=ssl#q=.net+pdf+document


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Freitag, 10. Februar 2017 11:57

Alle Antworten

  • Hallo Carl-Heinz,

    was genau ist bei dir der "Inhalt" des WPF Fensters?

    Die gesamte Anwendungsoberfläche, also eine Grafik? Oder nur den Text? Falls ja, welchen bzw. aus welcher Art von Controls? ...?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 10. Februar 2017 10:19
  • Hallo Stefan,

    Der Inhalt des geöffneten WPF Fensters besteht aus Text, TextBoxen, Graphik und einem Datagrid.

    Gruß, Carl-Heinz

    Freitag, 10. Februar 2017 10:33
  • Hallo Carl-Heinz,

    letztendlich kannst Du das nur als eine große Grafik einfügen. Also ein Image vom Fenster erzeugen und das dann als Grafik in Word oder in ein PDF Dokument einfügen.

    Die Grafik aus dem Fenster erzeugen sollte über

      RenderTargetBitmap

    möglich sein. Das Einfügen in Word oder PDF hängt davon ab, ob Du Word Automation oder bspw. eine Komponente wie Aspose.PDF einsetzt.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 10. Februar 2017 10:40
  • Hallo Stefan,

    danke für den Link.

    Für mich ist das Neuland ich muss lernen.

    Kannst Du mir da ein Beispiel nennen?

    Gruß, Carl-Heinz

    Freitag, 10. Februar 2017 11:29
  • Hallo Carl-Heinz,

    für einen Test habe ich eine Form mit einem Button, einer TextBox und einem Image Control (letzteres "Image1") erstellt.

    Mit dem folgenden Code wird der Inhalt des Formulars gerendert und dem Image Control zugewiesen.

    Private Sub Button_Click(sender As Object , e As RoutedEventArgs)
    
    Dim bmp As New RenderTargetBitmap( 400, 200, 72, 72, New System.Windows.Media.PixelFormat() )
        bmp.Render( Me )
    
        Me.Image1.Source = bmp
    
    End Sub
    

    D.h. die ersten beiden Zeilen wären das, was Du für die Erzeugung der Grafik brauchst.

    Wie Du die jetzt in Word oder PDF bekommst, hängt - wie gesagt - davon ab, wie Du auf Word oder Pdf zugreifst. Da es da viele Möglichkeiten gibt, beschreib bitte zuerst, wie deine Zugriffe hier aussehen oder such dir eine Möglichkeit aus. Es gibt kostenlose (meist nicht ganz so einfach nutzbare) als auch kostenpflichtige (oft einfacher nutzbare, teils aber recht teure) Möglichkeiten.

    Word Automation setzt auf jedem Ziel PC eine passende Word Installation (in der erwarteten Version) voraus. Falls das nicht gegeben ist, müsstest Du das Dokument auf anderem Weg erzeugen.

      https://www.google.de/?gws_rd=ssl#q=.net+word+document

      https://www.google.de/?gws_rd=ssl#q=.net+pdf+document


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Freitag, 10. Februar 2017 11:57
  • Hallo Carl-Heiz,

    für Word nutze ich OpenXML. Eingearbeitet habe ich mich in ca. 1 Tag. Der Vorteil gegenüber PDF ist das Du nicht darauf achten musst wann eine Seite voll ist. Zudem kannst man sehr einfach mit einer Vorlage arbeiten und Platzhalter definieren. Ich erstelle damit gern Rechnungen. Hier auch etwas Code

    WordprocessingDocument doc = WordprocessingDocument.Open(filepath, true);
    
                #region Empfänger
    
                var adresszeile1 = string.Empty;
                var adresszeile2 = string.Empty;
                var adresszeile3 = user.Table_UserData.StraßeNr;
                var adresszeile4 = user.Table_UserData.PLZ + " " + user.Table_UserData.Ort;
                var adresszeile5 = user.Table_UserData.Land;
    
                if (String.IsNullOrWhiteSpace(user.Table_UserData.Firma))
                {
                    adresszeile1 = "Frau/Herr";
                    adresszeile2 = user.Table_UserData.Vorname + " " + user.Table_UserData.Nachname;
                }
                else
                {
                    adresszeile1 = "Firma";
                    adresszeile2 = user.Table_UserData.Firma;
                }
    
                var resEmpfänger = doc.MainDocumentPart.Document.Body.Descendants<BookmarkStart>().Where(n => n.Name == "Empfänger").FirstOrDefault();
                Paragraph Empfänger = new Paragraph(
                    new Run(new Text(adresszeile1)),
                    new Run(new Break()),
                    new Run(new Text(adresszeile2)),
                    new Run(new Break()),
                    new Run(new Text(adresszeile3)),
                    new Run(new Break()),
                    new Run(new Text(adresszeile4)),
                    new Run(new Break()),
                    new Run(new Text(adresszeile5))
                    );
                resEmpfänger.Parent.InsertAfterSelf(Empfänger);
    
                #endregion



    Gruß, Thomas

    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!

    Icon für UWP

    Freitag, 10. Februar 2017 14:16