pdf aus Word exportieren

  • VB.NET
  • .NET 4.5

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    pdf aus Word exportieren

    Hallo zusammen,

    ich bin absoluter Anfänger in der Programmierung - hab aus eigenem Interesse versucht mir ein bisschen selbst beizubringen.
    Das Forum hier hat mir bisher bei jedem Problemchen geholfen. Im Moment bin ich aber absolut hilflos.
    Deshalb hab ich mich jetzt hier mal angemeldet und schreib meinen ersten Beitrag hier :/

    Nun mal zu meinem Problem. Ich hab ein Worddokument, dass ich aus meiner Form öffne.
    Darin änder ich den Inhalt von Steuerelementen und möchte dann nur das Word als pdf abspeichern.
    Es ist bestimmt nur eine Kleinigkeit... aber ich find es einfach nicht.

    Bei der Ausführung kommt in Zeile 33 folgende Fehlermeldung:
    "System.MissingMemberException: "Der öffentliche Member WdExportFormat für den Typ ApplicationClass wurde nicht gefunden.""

    Liebe Grüße Sarah

    VB.NET-Quellcode

    1. Private Sub PDF_erzeugen()
    2. Dim Word_Dokument As String = Verz_Doku & "word\" & TextBox5.Text & ".docx"
    3. Dim Pdf_Dokument As String = Verz_Doku & "pdf\" & TextBox5.Text & ".pdf"
    4. Dim WordApp As New Word.Application, WordDoc As New Word.Document
    5. 'Wenn Dokument vorhanden - Word mit Dokument starten
    6. If My.Computer.FileSystem.FileExists(Word_Dokument) Then
    7. 'Textmarke füllen
    8. With WordApp
    9. .Visible = True
    10. .Activate()
    11. WordDoc = .Documents.Open(Word_Dokument)
    12. 'WordDoc.FormFields("Kategorie").Range.Text = "test" 'Formularfeld ändern
    13. 'WordDoc.Bookmarks("Kategorie").Range.Text = "test" 'Textmarke ändern
    14. WordDoc.SelectContentControlsByTag("Kategorie").Item(1).Range.Text = ComboBox3.SelectedItem 'Inhaltssteuerelement ändern
    15. WordDoc.SelectContentControlsByTag("Thema").Item(1).Range.Text = ComboBox4.SelectedItem
    16. WordDoc.SelectContentControlsByTag("Bezeichnung").Item(1).Range.Text = TextBox8.Text
    17. WordDoc.SelectContentControlsByTag("Index").Item(1).Range.Text = TextBox5.Text
    18. If TextBox4.Text = "" Then
    19. 'Wenn keine Änderung, dann das Erstellungsdatum als Stand eintragen
    20. WordDoc.SelectContentControlsByTag("Stand").Item(1).Range.Text = Mid(TextBox2.Text, 4, 2) & "/" & Mid(TextBox2.Text, 7, 4)
    21. Else
    22. 'Wenn eine Änderung, dann das Änderungsdatum als Stand eintragen
    23. WordDoc.SelectContentControlsByTag("Stand").Item(1).Range.Text = Mid(TextBox4.Text, 4, 2) & "/" & Mid(TextBox4.Text, 7, 4)
    24. End If
    25. End With
    26. 'als pdf speichern
    27. WordApp.ActiveDocument.ExportAsFixedFormat(Pdf_Dokument, WordApp.WdExportFormat.wdExportFormatPDF)
    28. WordApp.Quit(WordApp.WdSaveOptions.wdDoNotSaveChanges)
    29. MsgBox("pdf-Datei erstellt")
    30. 'pdf in Vorschau wieder anzeigen:
    31. 'Browser_laden()
    32. WebBrowser1.Refresh()
    33. Else
    34. MsgBox("Word-Datei nicht vorhanden!")
    35. End If
    36. WordApp.Quit()
    37. End Sub '() PDF ERZEUGEN

    @Sarah Willkommen im Forum. :thumbup:
    Ich denke mal, dass das als Anfänger-Problem etwas hoch gegriffen ist, zumal Word die Option Speichern Unter -> PDF bietet.
    Vielleicht findest Du hier etwas einfachere Themen, um mit .NET warm zu werden: [Sammelthread] Programmieren, aber was? (Programmideen)
    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!
    Danke Rod für deine Schnelle Antwort!

    Ist ja nicht mein erstes Anfängerprojekt... Aber aus der Nummer komm ich nicht mehr raus :)
    Ich hab das ganze auch schon mit SaveAs durch. hier kommen mir aber die gleichen Meldungen.
    Ich kann mir vorstellen, dass ich evtl. irgendwas nicht oder falsch aktiviert hab. Kann das sein?

    Sarah schrieb:

    WordApp.ActiveDocument.ExportAsFixedFormat(Pdf_Dokument, WordApp.WdExportFormat.wdExportFormatPDF)

    wdExportFormatPDF ist keine Eigenschaft der Anwendung sondern eine Konstante, die im Word-Namespace definiert ist.

    VB.NET-Quellcode

    1. WordApp.ActiveDocument.ExportAsFixedFormat(Pdf_Dokument, Word.wdExportFormatPDF)

    oder ausgeschrieben:

    VB.NET-Quellcode

    1. WordApp.ActiveDocument.ExportAsFixedFormat(Pdf_Dokument, Microsoft.Office.Interop.Word.wdExportFormatPDF)

    oder ganz hart codiert:

    VB.NET-Quellcode

    1. WordApp.ActiveDocument.ExportAsFixedFormat(Pdf_Dokument, 17)
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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

    @petaod erstmal Danke Dir!

    Leider läuft es so auch noch nicht.

    Wenn ich meine Zeile berichtige, kommt, dass "Word.wdExportFormatPDF" kein Member von "Microsoft.Office.Interop.Word" ist....

    Die "hart codierte Variante" erzeugt folgenden Fehler:
    System.Runtime.InteropServices.COMException: "Diese Datei wird gerade von einer anderen Anwendung oder einem anderen Benutzer verwendet."

    Ich verzweifel. An für sich kann das ja kein Staatsakt sein X/

    Sarah schrieb:

    "Diese Datei wird gerade von einer anderen Anwendung oder einem anderen Benutzer verwendet
    Das heisst doch schon mal, dass er das tun will, was er soll, aber nicht kann.
    Was steht denn in Pdf_Dokument?
    Hast du die Datei im Reader geöffnet?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    VB.NET-Quellcode

    1. Public Class Form1
    2. Inherits System.Windows.Forms.Form
    3. Private WordApp As New Word.Application
    4. 'Globale Variablen festlegen
    5. Public Progpfad As String = Application.StartupPath & "\"
    6. Dim Verz_Daten As String = Progpfad & "Daten\"
    7. Dim Verz_Doku As String = Progpfad & "Dokumente\"
    8. Dim Datenbank_txt As String = Progpfad & "Dokumente\Dokumente.txt"
    9. Dim VerzIcon As String = Progpfad & "Icons\"
    10. Dim UserDatei As String = Progpfad & "Daten\Bearbeiter.txt"
    11. Dim AdminDatei As String = Progpfad & "Daten\Admin.txt"

    oben ist der Grundpfad definiert. in meiner Funktion selbst definiere ich Pdf_Dokument aus dem Grundpfad + Unterordner + Name der Datei aber OHNE Dateiendung.

    VB.NET-Quellcode

    1. Private Sub PDF_erzeugen()
    2. Dim Word_Dokument As String = Verz_Doku & "word\" & TextBox5.Text & ".docx"
    3. Dim Pdf_Dokument As String = Verz_Doku & "pdf\" & TextBox5.Text
    4. Dim WordApp As New Word.Application, WordDoc As New Word.Document
    5. 'Wenn Dokument vorhanden - Word mit Dokument starten
    6. If My.Computer.FileSystem.FileExists(Word_Dokument) Then
    7. 'Textmarke füllen
    8. With WordApp
    9. .Visible = True
    10. .Activate()
    11. WordDoc = .Documents.Open(Word_Dokument)
    12. 'WordDoc.FormFields("Kategorie").Range.Text = "test" 'Formularfeld ändern
    13. 'WordDoc.Bookmarks("Kategorie").Range.Text = "test" 'Textmarke ändern
    14. WordDoc.SelectContentControlsByTag("Kategorie").Item(1).Range.Text = ComboBox3.SelectedItem 'Inhaltssteuerelement ändern
    15. WordDoc.SelectContentControlsByTag("Thema").Item(1).Range.Text = ComboBox4.SelectedItem
    16. WordDoc.SelectContentControlsByTag("Bezeichnung").Item(1).Range.Text = TextBox8.Text
    17. WordDoc.SelectContentControlsByTag("Index").Item(1).Range.Text = TextBox5.Text
    18. If TextBox4.Text = "" Then
    19. 'Wenn keine Änderung, dann das Erstellungsdatum als Stand eintragen
    20. WordDoc.SelectContentControlsByTag("Stand").Item(1).Range.Text = Mid(TextBox2.Text, 4, 2) & "/" & Mid(TextBox2.Text, 7, 4)
    21. Else
    22. 'Wenn eine Änderung, dann das Änderungsdatum als Stand eintragen
    23. WordDoc.SelectContentControlsByTag("Stand").Item(1).Range.Text = Mid(TextBox4.Text, 4, 2) & "/" & Mid(TextBox4.Text, 7, 4)
    24. End If
    25. 'als pdf speichern
    26. WordApp.ActiveDocument.ExportAsFixedFormat(Pdf_Dokument, 17)
    27. WordApp.Quit(Word.WdSaveOptions.wdSaveChanges)
    28. End With
    29. MsgBox("pdf-Datei erstellt")
    30. 'pdf in Vorschau wieder anzeigen:
    31. 'Browser_laden()
    32. Else
    33. MsgBox("Word-Datei nicht vorhanden!")
    34. End If
    35. WordApp.Quit()
    36. End Sub

    Ich glaub es könnte noch sein, dass er ein Problem mit der pdf hat und diese geöffnet ist. Diese wird im Webbrowser auf der Form angezeigt. Bevor die Funktion "PDF_erzeugen()" aufrufe, leere ich den Webbrowser mit

    VB.NET-Quellcode

    1. Private Sub Button11_Click(sender As Object, e As EventArgs) Handles Button11.Click
    2. WebBrowser1.Navigate("about:blank")
    3. PDF_erzeugen()
    4. End Sub

    vielleicht führt es das nicht richtig oder schnell genug aus???

    Sarah schrieb:

    dass er ein Problem mit der pdf hat und diese geöffnet ist
    Genau das sagt die Fehlermeldung aus.
    Der Browser hält die sicher noch im Cache.
    Ggf. musst du den Browser schließen oder den Browsercache leeren.

    Oder du gibst dem Dateinamen einen Timestamp mit, wenn du da verschiedene Versionen derselben PDF anlegst.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --