Announcement

Collapse
No announcement yet.

PDF aus MySQL laden und anzeigen bzw. speichern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • PDF aus MySQL laden und anzeigen bzw. speichern

    Hallo Leute,

    habe mal wieder ein Problem, wo ich keinen Schimmer habe, wie ich es realisieren kann.
    Ich habe auf einem Server eine MySQL-Datenbank, wo viele Daten abgelegt sind. Der Zugriff erfolgt über das Internet mittels eines speziell dafür entwickelten Clients.
    Das klappt soweit alles gut und zügig.
    Nun besteht die Anforderung, auch PDF Dateien auf dem Server abzulegen innerhalb der Verzeichnisstruktur des Servers und am Client dann anzeigen zu können.
    Die Idee nun ist, entweder die PDF-Datei direkt in ein BLOB-Feld zu schreiben oder nur den Pfad in der Datenbank zu speichern.
    Allerdings weiss ich nicht, wie ich nun die Datei zum Client und dort mittels PDF Reader zur Anzeige zu bringe, egal welches Vorgehen ich benutzen möchte.
    Gelesen habe ich über Google, das es nicht sinnvoll ist, die Daten der PDF Datei direkt in ein BLOB-Feld zu schreiben, weil es die Datenbank unnötig aufbläht und die Performance darunter leidet, daher möchte ich gerne nur den Pfad speichern in der Datenbank.
    Wie sende ich dann die Datei zum Client?
    Wenn ich den Pfad dem CLient übergebe, dann sucht der Client immer auf dem lokalen Verzeichnis nach der Datei, was natürlich nicht erfolgreich ist.
    Hat jemand einen kurzen Code, wie man die Datei dann über das Internet beim Client anzeigen lassen kann?

    Für eure Hilfe wäre ich sehr sehr dankbar.

    Gerhard

  • #2
    Du musst die Daten mit einer serverseitigen Sprache wie PHP, PERL, JAVA u.a. zum Client senden. Dazu musst du in der DB nach dem PDF-Dokument (oder erst dem Pfad und dann im Filesystem) suchen und dieses als Antwort auf einen Request an den Client senden. Wie das genau geht hängt von der gewählten serverseitigen Sprache ab. Es ist wohl ein böses Gerücht, dass eine DB durch BLOB Felder unnötig aufgebläht wird. Wozu ist eine DB den da? Wo wäre der Unterschied zwischen einem Text mit 2000 Zeichen und einem PDF in dieser Größe?
    Christian

    Comment


    • #3
      Hallo Christian,
      danke für die schnelle Antwort.
      Das verstehe ich, das es wohl keinen Unterschied macht, ob ich 2000 Zeichen als Text habe oder ca das gleiche in einem Blobfeld.
      Dann versuche ich mal, die PDF direkt in der DB ab zulegen, das ist einfach.
      Aber wie sage ich dem Client dann, das er zuerst den PDF Reader startet mit den Daten aus dem BLobFeld? Sind ja nur binäre Daten ohne Hinweis darauf, das es eine PDF Datei ist...
      Mit ShellExecute und vorher ins TEMP Verzeichnis eine Datei erstellen?

      Gerhard

      Comment


      • #4
        Du hast von Server keine Zugriff auf den Client, kannst somit auch keine Dateien anlegen oder Systembefehle auswählen. Der Client muss dem Server einen Request senden. Dieser beantwortet diesen mit einem Response. Dieser Response hat einen Header und dieser wiederum einen Content-Typ. Diesem teilt man mit, dass in dem Response keine HTML-Seite drin ist, sondern eine PDF-Datei in dem man den Content-Typ "application/pdf" setzt. Der Client wertet zuerst den Header aus und sieht, dass jetzt PDF kommt. Er start die damit verbundene Anwendung (wenn keine Anwendung mit PDF verbunden ist wird der Download angeboten) und übergibt dieser die nach dem Header folgenden Daten.
        Das sieht in JAVA so aus:
        HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalConte xt().getResponse();
        response.setContentType("application/pdf");
        response.setHeader("Content-Disposition", "inline; filename=\"mein.pdf\"");


        Es ist die Aufgabe des serverseitigen Programmes den Request entgegen zu nehmen, die Daten aus der DB auszulesen, den Response zu bedienen und die DB-Daten dem Response zu übergeben
        Christian

        Comment


        • #5
          Sofern es sich nicht um Webtechnologie handelt, und dein spezieller Client direkt die Verbindung zur DB hat, musst du den Weg über shellexecute und dem TMP-Verzeichnis gehen
          Christian

          Comment


          • #6
            Danke Christian, der Weg über Shellexecute funnktioniert gut.
            Nun speichere ich die PDF Datei direkt in der Datenbank über TBlobStreams und kann die Datei dann auch wieder auslesen, indem ich erst den BLobstream ins TMP Verzeichnis speichere und dann über Shellexecute die Datei öffnen kann.

            War ein guter Tipp. Hoffentlich kann ich mich mal revanchieren.
            Dieser Link hat mir auch geholfen....

            "http://edn.embarcadero.com/article/27462"

            Gerhard

            Comment

            Working...
            X