PDF Datei(en) im Programm "importieren" und darauf zugreifen

  • VB.NET

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

    PDF Datei(en) im Programm "importieren" und darauf zugreifen

    Hallo zusammen,

    ich stehe mal wieder vor einer "Herausforderung". Zwar habe ich das Internet bereits fleißig nach einem Lösungsansatz durchsucht, aber eine für mich passende Hilfe konnte ich leider nicht finden.

    Was will ich tun?

    Mithilfe eines Buttons sollen Nutzer die Möglichkeiten haben bis zu drei .PDF-Dateien zu importieren. Die Erstellung des Buttons und die damit verbundene Auswahl der gewünschten Datei, waren kein Problem. Allerdings weiß ich nun nicht, wie die ausgewählte Datei gespeichert wird. Ich vermute, dass ich die Datei in die lokalen Programm-Ressourcen "importieren" (bzw. speichern) muss. Aber wie kann ich die ausgewählte Datei speichern?

    Oder bin ich auf dem ganz falschem Weg und muss eine Datenbank dazu erstellen, wo die .PDFs hinterlegt werden? Wenn ja, wie genau kann ich diese erstelle und was muss ich dabei beachten?

    Mein Ziel ist es nämlich, dass der Nutzer in einem (in meinem Programm definierten Vorgang) bis zu drei PDFs importieren kann, die mit dem jeweiligen Vorgang (bei mir definiert mit einer festen ID) verknüpft werden. So können in jedem Vorgang bis zu drei PDFs hinterlegt werden. Zum Beispiel: Der Vorgang "Test" mit der ID1 hat zwei PDFs hinterlegt, der Vorgang 2 "Test2" mit der ID2 hat eine PDF hinterlegt.

    Mein aktueller Code bisher:

    VB.NET-Quellcode

    1. Private Sub button_hochladen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button_hochladen.Click
    2. With OpenFileDialog1
    3. .InitialDirectory = "Desktop"
    4. .Filter = "PDF Files|*.pdf"
    5. .Title = "Angebot hochladen"
    6. .FileName = ""
    7. Dim result As DialogResult = OpenFileDialog1.ShowDialog
    8. If result = Windows.Forms.DialogResult.Cancel Then
    9. MsgBox("Der Hochladevorgang wurde abgebrochen.", vbCritical, "Vorgang abgebrochen")
    10. Exit Sub
    11. Else
    12. Dim Pfad As String = OpenFileDialog1.FileName
    13. ' wie geht es nun weiter?
    14. End If
    15. End With
    16. End Sub


    Ich bin für jegliche Denkanstöße oder Hilfen dankbar.

    CodeTags korrigiert ~VaporiZed

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

    Woher kommen die PDFs und wo sollen sie hingehen? Was spricht dagegen, sie in dem lokalen Verzeichnis zu belassen, wo sie sind und nur deren Dateipfad im Programm zu speichern? Alternativ in einem Verzeichnis neben Deiner EXE zu platzieren und dann diesen Pfad zu speichern? Die komplette Datei irgendwie im Programm zu speichern ist möglich (wenn es wirklich im gesamten Programm nur 3 nicht allzu große PDFs geben soll, aber wenn ich lese: 3 pro Vorgang, dann ist das keine gute Idee), indem Du z.B. deren Bytes hernimmst und sie in die Settings packst. Aber trotzdem stellt sich die Frage: wozu? Das würde das Programm oder die Datenbank massiv aufblähen und ggf. auch unnötig langsam machen, allein, wenn es darum geht, alle Daten bei Programmstart erstmal zu laden.
    Daher: Welches Ziel willst Du erreichen, welches durch Dateipfadspeicherung alleine nicht erreichbar ist?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed

    Vielen Dank für deine Antwort. Das Problem ist, dass die Nutzer die Angebote lokal auf Ihrem Rechner gespeichert haben. Wenn jetzt z.B. ein Benutzer die PDF (durch den Pfad) implementiert und er später die PDF verschiebt, diese ja nicht mehr gefunden wird (da der ursprüngliche Dateipfad nicht mehr stimmt) oder?

    Daher war meine Idee, die PDFs direkt in das Programm einzuarbeiten, so dass irrelevant ist, wo der Nutzer die Datei auf seinem Rechner gespeichert hat.

    Grundlegend ist der Plan das es 100 bis 300 Vorgänge geben kann (nicht alle haben zwangsweise PDFs hinterlegt).

    Der Nutzer soll mittels meines Programms eine Zusammenfassung des Vorgangs, sowie auch die Einsicht der damitverbundenen Angebote in PDF-Form haben.
    Wie geschrieben: Dann wäre es m.E. effizienter, die Datei in ein Verzeichnis neben die EXE zu kopieren, ihr eine ID zu geben (will heißen: sie mit einer unique ID als Dateinamen zu versehen) und diesen Dateipfad intern zu speichern. Also z.B. die Userdatei C:\PapstFranziskus\Dokumente\DieWahrheitÜberJesus.PDF in das Verzeichnis D:\Programme\Kundendatenprogramm\PDFs\ mit dem Dateinamen h2lx634Ml.PDF zu kopieren und diesen Pfad zu merken. Dann kann der Kunde mit seiner PDF machen, was er will, die eigentliche PDF bleibt erhalten.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed "DieWahrheitÜberJesus" nach "h2lx634Ml" zu kopieren ist suboptimal.
    Dadurch wird die Festplatte zugemüllt und man muss Sorge tragen, dass hinterher wieder aufgeräumt wird, insbesondere nach einem Ansturz der Software bzw. des Rechners.
    @kaaskeyn Du kannst das PDF claimen (als Datei zum Lesen öffnen: docs.microsoft.com/de-de/dotne…io.file.open?view=net-5.0), dann der Kunde sie ebenfalls öffnen, aber nicht verschieben.
    Wenn Du fertig bist, schließt Du die Verbindung und feddich.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Und wenn das Programm nicht läuft und der Kunde verschiebt die PDF, ist wieder Chaos angesagt …
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Dann sollten wir mal mit einer belastbaren Aufgabenstellung anfangen.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!