Rene: Binärdaten als PDF speichern

Hi,

von einem Webservice bekomme ich als Response ein PDF in Binärform

<ms-pdf xmlns="">JVBERi0xLjMKJaqrrK0KNCAwIG9iago8...</ms-pdf>

Die Binärdaten ($finalStr = "JVBERi0xLjMKJaqrrK0KNCAwIG9iago8...") speichere ich als PDF-Datei ab

$fp = fopen("test.pdf", "wb");  
fwrite($fp, $finalStr);  
fclose($fp);

Aber die PDF-Datei kann ich nicht öffnen, weil die Datei beschädigt sein soll. Anscheinend geht das doch nicht so einfach wie ich dachte. Ich vermute mal, dass es an der Kodierung irgendwie liegt, aber an dieser Stelle komme ich einfach nicht weiter. Wer weiß Rat?

  1. Hi,

    von einem Webservice bekomme ich als Response ein PDF in Binärform

    <ms-pdf xmlns="">JVBERi0xLjMKJaqrrK0KNCAwIG9iago8...</ms-pdf>

    Binärdaten sind das mit Sicherheit nicht.

    [..]Ich vermute mal, dass es an der Kodierung irgendwie liegt, aber an dieser Stelle komme ich einfach nicht weiter. Wer weiß Rat?

    Ich vermute ein base64_encoding ;)

    Hotti

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. Hallo,

      <ms-pdf xmlns="">JVBERi0xLjMKJaqrrK0KNCAwIG9iago8...</ms-pdf>

      [..]Ich vermute mal, dass es an der Kodierung irgendwie liegt, aber an dieser Stelle komme ich einfach nicht weiter. Wer weiß Rat?

      Ich vermute ein base64_encoding ;)

      sieht gut aus:

      echo base64_decode('JVBERi0xLjMK'); # gibt %PDF-1.3 aus

      Freundliche Grüße

      Vinzenz

      1. hi,

        Ich vermute ein base64_encoding ;)

        sieht gut aus:

        echo base64_decode('JVBERi0xLjMK'); # gibt %PDF-1.3 aus

        Und der Rest!? Den will ich aber auch sehen ;)

        SCNR;
        Hotti

        1. Hallo,

          Ich vermute ein base64_encoding ;)
          sieht gut aus:
          echo base64_decode('JVBERi0xLjMK'); # gibt %PDF-1.3 aus

          Und der Rest!? Den will ich aber auch sehen ;)

          tja, ich habe nur wie file gegen die PDF-Spezifikation geprüft (siehe dieser Archivbeitrag).
          Aber ich verrate Dir: das nächste Zeichen ist ein Zeilenvorschub (LF) ...

          Freundliche Grüße

          Vinzenz

          1. Hallo,

            Und der Rest!? Den will ich aber auch sehen ;)

            tja, ich habe nur wie file gegen die PDF-Spezifikation geprüft (siehe dieser Archivbeitrag).

            ah, danke! Ich wollte schon immer mal wissen, was file eigentlich macht.

            Aber ich verrate Dir: das nächste Zeichen ist ein Zeilenvorschub

            Base64 resp. uuencode ist schon geil ;)
            Indes: Wenn Client und Server das Lesen/Schreiben in Sockets unterstützen, ist es möglich, auf das ganze "tara" (XML u.a. Verpackungen) zu verzichten und auch unter Verzicht auf Base64 reine binary-Sequenzen zu senden/empfangen. Btw., ich höre gerade Diva Funk als mp3-Stream...

            Viele Grüße,
            Hotti

      2. echo base64_decode('JVBERi0xLjMK'); # gibt %PDF-1.3 aus

        Ja, so funktioniert es.

        Danke für die Hilfe!

        Freundliche Grüße

        Vinzenz

    2. Hi,

      von einem Webservice bekomme ich als Response ein PDF in Binärform

      <ms-pdf xmlns="">JVBERi0xLjMKJaqrrK0KNCAwIG9iago8...</ms-pdf>

      Binärdaten sind das mit Sicherheit nicht.

      Du hast natürlich Recht! Ich hatte gestern zu oft mit Begriffen wie BINARY rumhantiert, daher hatte sich das bei mir eingebrannt ;-)

      [..]Ich vermute mal, dass es an der Kodierung irgendwie liegt, aber an dieser Stelle komme ich einfach nicht weiter. Wer weiß Rat?

      Ich vermute ein base64_encoding ;)

      Deine Vermutung ist vollkommen richtig! Dann ist es ja doch so einfach, wie ich erhofft hatte.

      Vielen Dank, das erspart mir viel Zeit!

      Hotti

      1. hi,

        Binärdaten sind das mit Sicherheit nicht.

        Du hast natürlich Recht! Ich hatte gestern zu oft mit Begriffen wie BINARY rumhantiert, daher hatte sich das bei mir eingebrannt ;-)

        Eine Binary in "text/xml" verpacken funktioniert nur dann, wenn die binary keine Bytes enthält, die selbst "text/xml" darstellen könnten. Weil dies praktisch nicht vorhersehbar ist, geht die Verpackung einer bin in xml schief, d.h., die Bytes müssen so codiert werden, dass die sich von der "Verpackung" in jedem Fall unterscheiden, was mit einer Base64-Codierung der Fall ist: Die ergibt keine Zeichen wie "<" oder ">".

        Hier noch ein interessanter Link: Base64

        (Zeichenvorrat und ~tabelle)

        Hotti